(一)Python入门-5函数:07lambda表达式和匿名函数-eval()函数

时间:2022-07-15 19:14:51

一:lambda表达式和匿名函数

  lambda表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数 的方法。lambda函数实际生成了一个函数对象。

  lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值。

  lambda表达式的基本语法如下:

    lambda arg1,arg2,arg3... : <表达式>

    arg1/arg2/arg3为函数的参数。<表达式>相当于函数体。运算结果是:表达式的运算结果。

#lambda表达式测试,lambda创建匿名函数

f = lambda a,b,c,d:a+b+c+d
def f1(a,b,c,d):     #此函数同lambda表达式f
    return a+b+c+d

g = [lambda a:a*2,lambda b:b*3,lambda c:c*4]
h = [f1,f1,f1]     #函数也是对象,此方式类似lambda表达式g

print(f(1,2,3,4))
print(f1(1,2,3,4))

print(g[0](1),g[1](2),g[2](3))
print(h[0](1,2,3,4),h[1](1,2,3,4))

运行结果:

  10
  10
  2 6 12
  10 10

二:eval()函数

  功能:将字符串str当成有效的表达式来求值并返回计算结果。
  语法: eval(source[, globals[, locals]]) -> value
  参数:

    source:一个 Python表达式或函数 compile()返回的代码对象

    globals:可选。必须是dictionary

    locals:可选。任意映射对象

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

#测试eval()函数

s = "print('abcdefg')"
eval(s)

a,b = 10,20
c = eval("a+b")
print(c)
eval("print(c)")

dict1 = dict(a=100,b=200)
d = eval("a+b",dict1)   #声明此时调用的a+b中的a,b是dict中的a,b
print(d)

运行结果:

  abcdefg
  30
  30
  300