目录
- 1 函数定义与调用
- 1.1 自定义模块函数
- 1.2 函数的返回值 return
- 2 参数的传递方式
- 2.1 位置参数
- 2.2 默认值参数
- 2.3 关键参数
- 2.4 可变长度参数(收集和分配参数)
- 2.4.1 收集位置参数
- 2.4.2 分配位置参数,函数参数的序列解包
- 2.4.3 收集关键字参数
- 2.4.4 分配关键字参数
- 3 变量的作用域
- 3.1 局部变量
- 3.2 全局变量
- 3.3 global:可以将局部变量变成全局变量
- 4 匿名函数 Lambda
- 4.1 lambda函数和filter函数连用
- 4.2 lambda函数和map函数连用
- 4.2 应用场景
- 5 递归
- 6 内置函数
- 6.1 数据类型相关
- 6.2 逻辑判断相关
- 6.2.1 all()函数
- 6.2.2 any()函数
- 6.3 数学相关
- 7 模块函数
- 7.1 导入模块
- 7.2 random模块
- 7.3 math模块
1 函数定义与调用
- 函数定义:def return 语句,形参
- 函数调用:实参
- 实参是实际占用内存地址的实实在在的参数,而形参只是意义上的一种参数,在定义的时候是不占内存地址的
def 函数名(参数1,参数2...):
代码块(函数要实现的功能)
return 返回值
#其中,函数的参数和返回值不是必须要写的,如果一个函数没有reutrn语句(也就是没有返回值),它实际上有一个隐式return语句,返回值为None,类型为'NoneType'。
- 函数没有给定参数和返回值
print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
- 案例一
- 案例二
def PR():
print("===================")
print("人生苦短,我学Python")
print("===================")
- 函数给定参数,没有给返回值
1.1 自定义模块函数
- 编写想要封装进模块的函数
- 把这些函数放到一个空的ipynb文件里
- 重命名(给文件取名),另存为.py格式
- 查看Python的搜索路,把 .py文件放到任意一个搜索路径的文件夹里(只需要放一个可以)
import sys
sys.path #查看Python的搜索路径
- 导入模块,通过模块调用里面的函数
1.2 函数的返回值 return
- print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
- 将函数处理结果送出函数外部,可以进行接收
- 当函数运行到return,函数终止
- 返回多个值, 多个变量加逗号分隔
2 参数的传递方式
2.1 位置参数
按照位置传参,位置参数
2.2 默认值参数
函数定义阶段直接赋值了的形参
如果调用的时候为参数指定值,则指定值覆盖默认值,按照指定值进行计算
2.3 关键参数
函数调用阶段按照形参名赋值的实参
注意:当位置参数和关键字参数混用,位置参数在前,关键字参数在后
2.4 可变长度参数(收集和分配参数)
就是说只指定一个参数,然后允许调用函数时传入任意数量的参数。
- 在定义的时候,一颗星表示收集位置参数,两颗星表示收集关键字参数
- 在调用的时候,一颗星表示分配位置参数,两颗星表示分配关键字参数
2.4.1 收集位置参数
*args 把多余的位置参数以元组的形式储存
2.4.2 分配位置参数,函数参数的序列解包
2.4.3 收集关键字参数
**args 把多余的关键字参数以字典的形式存储
2.4.4 分配关键字参数
3 变量的作用域
3.1 局部变量
- 函数内部的变量叫做局部变量, 局部变量只能在函数内部被使用, 用完就释放
-
当局部变量和全局变量名字相同时, 自定义函数内优先使用局部变量
-
自定义函数内部有局部变量的用局部变量,没有局部变量的,用全局变量
3.2 全局变量
- 在自定义函数外边定义的变量叫做全局变量
- 全局变量能在函数的任意位置被使用
3.3 global:可以将局部变量变成全局变量
- 可以使用global关键字在函数内部定义一个全局变量, 全局变量能在函数的任意位置被使用
- 如果在自定义函数中修改全局变量,那么就需要使用global进行声明,否则出错
4 匿名函数 Lambda
Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数。
a = lambda x,y,z: x+y+z
a(1,2,3)
#out:6
4.1 lambda函数和filter函数连用
ilter()过滤后,返回的是结果为真(即不等于0)的对象
'''
filter函数:
- filter()有两个参数。第一个参数可以是一个函数,也可以是一个None。
- 如果是第一个参数是函数的话,则将第二个迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;
- 如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
ilter()过滤后,返回的是结果为真(即不等于0)的对象
'''
temp = filter(None,[1,2,0,False,True])
list(temp) #filter保留结果为真的原数据,筛除结果为假的原数据
#[1, 2, True]
案例:
#写一个筛选奇数的过滤器
def is_odd(n):
return n%2
list(filter(is_odd,range(10)))
#使用lambda简化上述函数
list(filter(lambda n:n%2,range(10)))
4.2 lambda函数和map函数连用
map()遍历,返回的是计算结果
'''
map:映射
map()也有两个参数,仍然一个是函数,一个是可迭代序列,将序列的每一个个元素作为函数的参数进行运算加工,直到可迭代序列每个元素加工完毕,返回所有加工后的元素构成的新序列。
map()遍历,返回的是计算结果
'''
[*map(lambda x:x%2,range(10))]
#out: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
4.2 应用场景
- python编写一些程序的脚本时,使用lambda就可以省下来定义函数的过程。比如写一个简单的脚本管理服务器,就没有必要定义函数,再去调用它。直接使用lambda函数,可以使程序更加简明。
- 一些只需要调用一两次的函数,就没有必要为了想个合适的函数名字而费精力了,直接使用lambda函数就可以省去取名的过程。
- 阅读普通函数,通常需要跳到开头def定义的位置,使用lambda函数可以省去这样的步骤。
5 递归
函数自己调用自己,注意递归停止条件
#累加
def add_sum(n):
if n == 1:
return 1
else:
return n+add_sum(n-1)
add_sum(10)
#out: 55
6 内置函数
可以直接用函数名调用
6.1 数据类型相关
int() , bool() , float() , str() , list() , set() , tuple() ,dict() ,type()
6.2 逻辑判断相关
6.2.1 all()函数
如果bool(x)对于可迭代的所有值x为True,则返回True。如果iterable为空,则返回True
6.2.2 any()函数
如果bool(x)对于可迭代的任何x为True,则返回True。如果iterable为空,则返回False。
6.3 数学相关
求和:sum()
求绝对值:abs()
求最小值:min()
求最大值:max()
求长度:len()
生成随机数:range(),
求m的n次幂:pow(m,n)
四舍五入:round()【*.5的时候,返回距离原数据最近的偶数,精度可以取负值:round(156.433,-1)】
求商和余数: divmod()
zip函数:将等长的列表或元组组合成字典
7 模块函数
通过模块名进行调用,如math.sin()等 (前提是先导入(import)第三方模块)
7.1 导入模块
- import math #第一种导入模块的方式
- import math as mt #第二种导入模块的方式 最常用的
- from math import sin #第三种导入模块的方式
7.2 random模块
7.3 math模块