Lambda表达式和它的代码是一致的

时间:2017-03-06 19:28:48

标签: python python-3.x lambda

这是代码吗

GLOBAL_VERSION = '1'
def get_version():
    return GLOBAL_VERSION
 mod_version=get_version()

等于

GLOBAL_VERSION = '1'

mod_version=lambda **_: GLOBAL_VERSION
是不是?

非常感谢!

2 个答案:

答案 0 :(得分:1)

不,他们不是。

在第一个版本中,您有一个全局变量(GLOBAL_VERSION),一个函数(get_version)和另一个全局变量(mod_version)。

在第二个中你有一个全局变量(GLOBAL_VERSION)和一个函数(mod_version)。

两者之间最重要的区别可能是mod_version设置为第一个str '1'和返回str '1'的函数在第二个。

绝对不一样。

旁注如果lambda不需要任何参数,请不要定义任何参数:

some_func = lambda: GLOBAL_VERSION

答案 1 :(得分:0)

如前所述,lambdas与函数不同。差异的一个很好的例子是尝试pickle时。函数是pickleable,但lambdas不是:

import pickle

def func():
    return 0

lam = lambda: 1

print(func())
print(lam())

print(pickle.dumps(func))
print(pickle.dumps(lam))

此代码将打印01,帮助其找到func,然后在最后一行(Can't pickle <function <lambda> at 0x7fa30118e048>: attribute lookup <lambda> on __main__ failed)上显示错误。