匿名函数
基本语法
lambda:定义匿名函数(没有函数名的函数)
lambda 参数1,参数2,参数n : 返回值
应用场景
1、用于定义一些函数结构体非常简单、而且使用次数较少的函数
2、作为函数的参数传递
# 实例 对下面的列表进行排序(根据列表中的每个元素的第二值的大小进行排序)
li = [[1, 10, 32], [3, 22, 99], [2, 7, 77]]
li.sort(key=lambda x: x[1])
print(li)
内置函数
filter
# 参数1:过滤规则函数
# 参数2:可迭代对象
li = [11, 2, 34, 42, 15, 26, 7, 88, 29, 100]
res = filter(lambda x: x > 30, li)
print(list(res))
map
# 参数1:处理函数
# 参数2:可迭代对象
li = [11, 22, 33, 25, 18, 34, 2, 7, 5, 9]
res = map(lambda x: x ** 2, li)
print(list(res))
exec
# python代码执行器函数,可以执行字符串中的python代码
code = """
a=100
b=200
print(a+b)
"""
exec(code)
all
# 迭代对象内所有的元素为真,返回True
def work(name=None, age=None, sex=None):
if all([name, age, sex]):
print("条件成立")
work(11, 22, 33)
any
# 迭代对象内只要有一个元素为真,就返回True
def work(name=None, age=None, sex=None):
if any([name, age, sex]):
print("条件成立")
work(11)
zip
# 聚合打包
li1 = [11, 22, 33, 44]
li2 = ["aa", "bb", "cc", "dd"]
res = zip(li1, li2)
print(dict(res))
偏函数
作用
当函数的参数个数太多,需要简化时,使用functools。partial可以创建一个新的函数,
这个新函数可以固定住原函数的部分参数,从而在调用的时候更简单
分类
1、partial:可以用来对函数进行包装,固定函数的参数值(给函数的参数设置默认值)
2、wraps:将一个函数的属性赋值给另一个函数,消除装饰器的副作用
3、lru_cache函数:缓存装饰器函数,缓存函数调用的结果,节约程序的内存开销,
对于相同入参函数执行,只会执行一次,会将第一次执行的结果缓存起来,后面调用时直接返回函数的结果,而不执行函数,
一般用于递归函数
实例1
from functools import partial
def work(a, b, c):
print(a)
print(b)
print(c)
res = partial(work, a=99, c=88)
res(b=77)
递归函数
定义
在函数内部调用函数本身的函数被称之为递归函数
最大递归深度
# 超过最大递归深度,则会抛出异常
# 所有在编写递归函数时候,要注意递归的临界点(终止递归的条件)
import sys
print(sys.getrecursionlimit())
实例1
# 递归函数实现斐波拉契数列(第一个数据值为1,后一个数据的值为前两个数据之和)
# 1 1 2 3 5 8 13 21...
from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n - 1) + fib(n - 2)
print(fib(100))
闭包函数
定义
函数+封闭作用域
特点
1、函数内部嵌套一个函数
2、外层函数的范围值为里面嵌套的函数
3、嵌套函数内部,引用了外部的非全局变量(外层函数的作用域的变量)
作用
1、实现数据的锁定
2、当成装饰器使用
实例1
items = []
for i in [1, 2, 3, 4]:
def func(i):
def work():
return i * 2
return work
w = func(i)
items.append(w)
i = 100
for f in items:
print(f())
![img]()