目录

  • 一、lambda 表达式和匿名函数
  • 二、eval()函数
  • 递归函数


一、lambda 表达式和匿名函数

lambda 表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。
lambda 表达式的基本语法如下:
lambda arg1,arg2,arg3… : <表达式>
arg1/arg2/arg3 为函数的参数。<表达式>相当于函数体。运算结果是:表达式的运算结果。

f = lambda a,b,c:a+b+c
print(f)
print(f(2,3,4))
g = [lambda a:a*2,lambda b:b*3,lambda c:c*4]
print(g[0](6),g[1](7),g[2](8))
执行结果:
<function <lambda> at 0x0000000002BB8620>
9
12 21 32

二、eval()函数

功能:将字符串str 当成有效的表达式来求值并返回计算结果。
语法: eval(source[, globals[, locals]]) -> value
参数:
source:一个Python 表达式或函数compile()返回的代码对象
globals:可选。必须是dictionary
locals:可选。任意映射对象

#测试eval()函数
s = "print('abcde')"
eval(s)
a = 10
b = 20
c = eval("a+b")
print(c)
dict1 = dict(a=100,b=200)
d = eval("a+b",dict1)#dict表示a+b中a,b参数是dict1中的a,b
print(d)

eval 函数会将字符串当做语句来执行,因此会被注入安全隐患。比如:字符串中含有删除文件的语句。那就麻烦大了。因此,使用时候,要慎重!!!

递归函数

递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类
似于大家中学数学学习过的“数学归纳法”。每个递归函数必须包含两个部分:

  1. 终止条件
    表示递归什么时候结束。一般用于返回值,不再调用自己。
  2. 递归步骤
    把第n 步的值和第n-1 步相关联。
def test(n):
    if n==0:print("over")
    else:
        print("test进入顺序:",n)
        test(n-1)
    print('test********:结束的test函数,根据参数判断结束顺序:',n)#先进后出,后进先出
test(5)



###计算阶乘
###计算阶乘
def factoria(n):
    if n==1:
        return 1#只能用return,因为用print,导致会产生nontype,int 和nontype 无法相乘

    else:
        return n*factoria(n-1)
for i in range(1,5):
    print(i,"!=",factoria(i))

执行结果
test进入顺序: 5
test进入顺序: 4
test进入顺序: 3
test进入顺序: 2
test进入顺序: 1
over
test********:结束的test函数,根据参数判断结束顺序: 0
test********:结束的test函数,根据参数判断结束顺序: 1
test********:结束的test函数,根据参数判断结束顺序: 2
test********:结束的test函数,根据参数判断结束顺序: 3
test********:结束的test函数,根据参数判断结束顺序: 4
test********:结束的test函数,根据参数判断结束顺序: 5
1 != 1
2 != 2
3 != 6
4 != 24