函数- eval()-lambda表达式和匿名函数-递归函数(阶乘练习)

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
上一篇:绕过webshell查杀工具


下一篇:【JS逆向】之HOOK代码怎么写