1.lambda表达式和匿名函数
lambda表达式可以用来声明匿名函数。lambda函数是一种简单的,在同一行中定义函数的方法。
lambda函数实际生成了一个函数对象
lambda表达式只容许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。
lambda表达式:lambda arg1,arg2,arg3…
# lambda表达式使用
f1 = lambda a, b, c, d: a * b * c * d
def tast01(a, b, c, d):
print("########")
return a * b * c * d
print(f1(2, 3, 4, 6)) #输出:144
g = [lambda a: a * 2, lambda b: b * 3]
print(g[0](6)) #输出:12
print(g[0](2),g[1](3)) #输出:4 9
f2 = [tast01, tast01] #函数也是对象
print(f2[0](2, 3, 4, 6),f2[1](1,3,2,2)) #输出:144 12
2.eval()函数用法
将字符串str当成有效的表达式来求值并返回计算结果
语法:eval(source[,globals[,locals]])–>value
source:一个Python表达式或函数compile()返回的代码对象
globals:可选,必须是dictionary
locals:可选。任意映射对象
s = "print('abcdf')"
eval(s) #输出:abcdf
a = 10
b = 20
c = eval("a+b")
print(c) #输出:30
dict1 = dict(a=100, b=200)
d = eval("a+b")
print(d) #输出:30
f = eval("a+b", dict1)
print(f) #输出:300
3.递归函数_函数调用内存分析_栈帧的创建
递归函数指的是:
自己调用自己的函数,在函数内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。
每个递归函数必须包含两部分:
(1)终止条件:表示递归什么时候结束。一般用于返回值,不再调用自己。
(2)递归步骤 :把第n步的值和第n-1步相关联。
def tast01(n):
print("tast01:",n)
# tast02() #在tast01中掉tast02
if n==0:
print("over")
else:
tast01(n-1)
print("tast01***",n)
#def tast02():
# print("tast02")
tast01(4)
#输出:
tast01: 4
tast01: 3
tast01: 2
tast01: 1
tast01: 0
over
tast01*** 0
tast01*** 1
tast01*** 2
tast01*** 3
tast01*** 4
递归函数_阶乘计算案例
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
result = factorial(5)
print(result)
#输出:120