转自:https://www.cnblogs.com/jin-xin/articles/10863032.html
匿名函数的定义:
函数名 = lambda 参数:返回值
1)lambda 是定义匿名函数的关键字,相当于函数的def
2)lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行
3)返回值在冒号之后设置,返回值和正常的函数一样,可以是任意数据类型
4)匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据
func=lambda a,b:a+b
print(func(3,4))
func=lambda a,b,*args,sex='alex',c,**kwargs:kwargs
print(func(3,4,c=666,name='alex'))
func=lambda **kwargs:kwargs
print(func(name='alex',job='student'))
func=lambda x:(x[0],x[2])
print(func('afafasd'))
#返回两个数中较大的数
func=lambda a,b:a if a>b else b
print(func(2,99))
常用的内置函数:
list() 将一个可迭代对象转换成列表
tuple() 将一个可迭代对象转换成元组
dict() 通过相应的方式创建字典
abs() 返回绝对值
sum() 求和
min() 求最小值
max() 最大值
reversed() 将一个序列翻转, 返回翻转序列的迭代器
bytes() 把字符串转换成bytes类型
zip() 拉链方法
sorted排序函数
filter筛选过滤
map 映射函数:map(function,iterable)
#计算两个列表中相同位置的数据的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
ret=list(map(lambda x,y:x+y,lst1,lst2))
print(ret)
reduce:
reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着,
接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始
临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推
from functools import reduce
l = reduce(lambda x,y:x*10+y,[5,6,7,8])
print(l) #5678
闭包的定义:
1. 闭包是嵌套在函数中的函数。
2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。
# def make_averager():
# series = []
# def averager(new_value):
# series.append(new_value)
# total = sum(series)
# return total/len(series)
# return averager
# avg = make_averager()
# # 函数名.__code__.co_freevars 查看函数的自由变量
# print(avg.__code__.co_freevars)
def wrapper(a,b):
def inner():
print(a)
print(b)
return inner
a = 2
b = 3
ret = wrapper(a,b)
#查看函数的自由变量
print(ret.__code__.co_freevars)
综上所述:只要含有自由变量的就是闭包