首页 > 解决方案 > 传递参数 Python 的 Lambda 函数

问题描述

我是 python 新手,我只看到一些这样的代码:

title = 'Thank'
def write():
    a = lambda x: title + ' ' +  x
    return a
who = write()
print(who('you'))

它的resulf 返回“Thank you”,但我对“Write”函数的看法不带参数,那么为什么我们可以为“who”传递参数?

标签: pythonlambda

解决方案


lambda 是一个匿名函数,用于不需要命名函数的地方。一个例子是一个函数,它把另一个函数作为参数

sorted(my_int_list, key=lambda i: i % 12)

Lambda 不应该只分配给变量,这违背了目的。你的代码最好写成

title = 'Thank'
def write():
    def a(x):
        return title + ' ' +  x
    return a

who = write()
print(who('you'))

现在我们已经摆脱了 lambda 红鲱鱼,很容易看出a是. 接下来要考虑的是变量范围。由于两者都不是,它的外部函数都没有给 ,赋值,它们都不是本地的,而是会在全局范围内查找。writeawritetitletitle

write返回 function a,这只是一个普通的可调用函数。a接受一个参数并将其添加到全局title变量中的任何内容。您可以根据需要随时调用它,如果title发生更改,则该更改会反映在调用中。为了演示,使用-i选项运行并测试

$ python3 -i test.py
Thank you
>>> print('type', who)
type <function write.<locals>.a at 0x7f2b3b409c10>
>>> title = "Something completely different"
>>> print(who('you'))
Something completely different you

推荐阅读