函数的进阶
匿名函数
- 匿名函数
"""
语法:
lambda 形参列表: 返回值
相当于
def (形参列表):
return 返回值
"""
注意: 匿名函数的本质还是函数; 普通函数中的绝大部分内容匿名函数都支持
与一般函数相比, 除了形参类型说明不可用, 其他基本一致
变量作用域
- 变量作用域 - 变量使用范围
根据变量作用域的不同, 可以将变量分为两种: 全局变量, 局部变量
- 全局变量
"""
定义在函数或者类外面的变量就是全局变量(没有定义在函数和类里面的变量)
全局变量的作用域: 从定义开始到程序结束
"""
- 局部变量
"""
定义在函数里面的变量就是局部变量.(形参也是局部变量)
局部变量的作用域: 从定义开始到函数结束
"""
- global关键字
"""
变量能不能使用, 看的是使用的时候内存中有没有.
定义全局变量的时候, 全局变量保存在全局栈区间, 程序结束后才会被自动释放;
局部变量保存在函数对应临时栈区间中, 函数调用结束就会被自动释放.
global是函数体中的关键字, 可以在函数体中修饰变量, 让变量在使用和保存的时候都在全局栈区间中进行
1) 函数中修改全局变量的值
2) 直接在函数中定义全局变量
"""
aa = 100
bb = 100
def func2():
# 不会修改全局变量aa的值, 而是创建一个局部变量的aa
aa = 200
print('函数里面aa', aa) # 函数里面使用的是局部变量aa的值
# print(bb) # 报错! global修改变量必须放在这个变量使用之前
global bb
bb += 100 # 这里使用的是全局变量bb的值, 对全局变量bb进行了修改
print('里面的bb:', bb)
global cc # 在函数内部定义修改全局变量时使用
cc = 300
func2()
print('外面的aa:', aa) # 函数外面使用的是全局变量aa的值
print('外面的bb:', bb)
print('外面的cc:', cc) # 函数外面使用的是全局变量cc的值
高阶函数
- 函数就是变量
"""
python中定义函数其实就是在定义一个类型是function的变量, 函数名就是变量名.
变量能做的事情, 函数都可以做
"""
- 高阶函数 - 实参高阶函数, 返回值高阶函数
实参高阶函数 - 函数的参数是函数
应该怎么来确定函数的参数是什么? - 看函数体中这个参数怎么使用
返回值高阶函数 - 函数的返回值是函数
- 装饰器
既是实参高阶函数, 又是返回值高阶函数, 还得自己写!
常用的实参高阶函数
- max, min, sorted, sort - 参数key要求是一个函数
max(序列, key=函数)
"""
max(序列, key=函数) - 按照函数制定的比较规则来获取序列中最大的元素
函数的要求: 1) 参数 - 有且只有一个参数; 这个参数代表前面的序列中的每个元素
2) 返回值 - 有一个返回值; 返回值就是比较对象
注意: 如果一个函数的参数是函数, 这个参数有两种传值方式: a.普通函数的函数名 b.匿名函数
"""
- map
map(函数, 序列1, 序列2, 序列3, …)
"""
1) map(函数, 序列) - 按照函数指定的规则将原序列转换成新的序列, 返回值是map对象 - 本质是序列
函数的要求: a. 参数: 有且只有1个参数; 参数代表后面的这个序列中的元素
b. 返回值: 有一个返回值; 返回值就是新序列中的元素
map(函数, 序列1, 序列2)
函数的要求: a. 参数: 有且只有2个参数, 分别代表后面两个序列中的元素
b. 返回值: 有一个返回值; 返回值就是新序列中的元素
map(函数, 序列1, 序列2, 序列3)
函数的要求: a. 参数: 有且只有3个参数, 分别代表后面3个序列中的元素
b. 返回值: 有一个返回值; 返回值就是新序列中的元素
map(函数, 序列1, 序列2, 序列3, ...)
"""
- reduce
注意: reduce在使用之前必须先导入
from functools import reduce
"""
reduce(函数, 序列, 初始值) - 按照函数指定的规则将序列中的所有元素合并成一个数据
函数的要求: 1) 参数: 有且只有两个参数, 第一个参数指向初始值, 第二个参数代表序列中的每个元素
2) 返回值: 有一个返回值; 描述初始值和元素之间的合并方式
"""
- filter - 过滤
filter(函数, 序列)
"""
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,
如果要转换为列表,可以使用 list() 来转换。
接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,
然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
"""