lambda表达式和匿名函数
-
lambda表达式可以用来声明匿名函数
-
lambda函数是一种简单的、在同一行中定义函数的方法。
-
lambda函数实际生成了一个函数对象。
-
lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。
lambda 函数的特点
- lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
- lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。
lambda 语法格式
lambda arg1,arg2,arg3...: <表达式>
- lambda 是 Python 的关键字,用于定义 lambda 函数。
-
arg1,arg2,arg3为函数的参数,可以有多个参数,但必须在冒号前指定(lambda 函数也可以设置多个参数,参数使用逗号 , 隔开)
-
<表达式> 是一个函数体,用于计算并返回函数的结果
实例
- 练习
# a,b,c 表示形参,a+b+c 表示函数体 a = lambda a,b,c:a+b+c print(a(10,12,13)) # ()表示调用函数 b = [lambda m:m*2,lambda n:n*3,lambda s:s*4] print(b[0](6),b[1](2),b[2](7))
- lambda 函数没有参数
f = lambda: "Hello, world!" print(f()) # 输出: Hello, world!
- 使用 lambda 创建匿名函数,设置一个函数参数 a,函数计算参数 a 加 10,并返回结果
x = lambda a : a + 10 print(x(5)) # 输出 15
-
使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果
x = lambda a, b : a * b print(x(5, 6)) # 输出 30
eval()函数
功能
将字符串 str 当成有效的表达式来求值并返回计算结果
语法格式
eval(source[,globals[,locals]])->value
-
source:一个python表达式或函数compile()返回的代码对象
-
globals:可选,必须是dictionary
-
locals:可选,任意映射对象
注意:eval函数会将字符串当做语句来执行,因此会被注入安全隐患
递归函数
-
递归是一种常见的算法思路,在算法中都会用到。如:深度优先搜索(DFS: Depth First Search)
-
递归的基本思想是“自己调用自己”
含义
-
递归函数是指:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。
-
每个递归函数必须包含两个部分:
-
终止条件:表示递归什么时候结束,一般用于返回值,不再调用自己。
-
递归步骤:把第n步的值和第n-1步相关联。
-
注意:递归函数由于会创建大量的函数对象,过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。
实例
def my_recursion(n):
print('start:'+str(n))
if n==1:
print('recursion over')
else:
my_recursion(n-1)
print("end:"+str(n))
my_recursion(3)
#输出
start:3
start:2
start:1
recursion over
end:1
end:2
end:3
- 上述代码的递归函数整个调用过程
嵌套函数
嵌套函数就是内部函数
嵌套函数:在函数内部定义的函数
实例
def outer():
print('outer running!!!')
def inner():
print('inner running!!!')
inner()
outer()
使用嵌套函数的情况
-
封装-数据隐藏——外部无法访问“嵌套函数”
-
贯彻DRY(Don't Repeat Yourself)原则
-
嵌套函数,可以让我们在函数内部避免重复代码
-
闭包
nonlocal 和 global 关键字
含义
-
nonlocal用来内部函数中,声明外层的局部变量。
-
global函数内声明全局变量,然后才使用全局变量
实例
# 测试nonlocal、global关键字用法
a = 100
def outer():
b = 10
def inner():
nonlocal b
print('inner b:',b)
b = 20
global a
a = 1000
inner()
print('outer b:',b)
outer()
print('a:',a)
LEGB规则
Python中查找“名称”时,是按照LEGB规则查找的:
-
Local 是指函数或类的方法内部
-
Enclosed 是指嵌套函数(一个函数包裹另一个函数,闭包)
-
Global 是指模块中的全局变量
-
Built in是指Python为自己保留的特殊名称