gpt4 book ai didi

使用 lambda 的 Python def 函数赋值

转载 作者:行者123 更新时间:2023-11-28 17:37:31 26 4
gpt4 key购买 nike

这是如何工作的:

def writer():
title = "Mr"
name = (lambda x: title + ' ' + x)
return name

writer("Bond")
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: writer() takes 0 positional arguments but 1 was given

who = writer()

who("Bond")
'Mr Bond'

那么 lambda 接受位置参数 x 对吗?通过将函数对象 writer() 分配给“谁”,我以某种方式可以访问 lambda?

最佳答案

你正在返回一个函数,外部函数通过 __closure__ 方法创建一个闭包而关闭,所以仍然有对 title 的引用,所以它可以在内部函数:

def writer():
title = "Mr"
name = (lambda x: title + ' ' + x)
return name

wr = writer()
print(wr.__closure__)
print(wr("foo"))

def writer():
title = "Mr"
def name(x):
return title + ' ' + x
return name

wr = writer()
print(wr.__closure__)
print(wr("foo"))

(<cell at 0x7eff4b221588: str object at 0x7eff4b11a500>,)
Mr foo
(<cell at 0x7eff49883108: str object at 0x7eff4b11a500>,)
Mr foo

如果您采用以下函数工厂,它接受一个输入 e,这是一个指数,您希望在内部函数中将 x 提高到:

def exp(e):
def rse_to(x):
return x ** e
return rse_to


square = exp(2)

print(square(2)) # call inner function, returns 2 ** 2

在你的第一个函数中,你没有接受任何参数,所以你不能传递任何参数。您只是返回带有一个位置参数的 lambda 函数。

def writer():
title = "Mr"
name = (lambda x: title + ' ' + x)
return name

wr = writer()
print(wr)
<function writer.<locals>.<lambda> at 0x7f60e699dbf8>

您通过将 arg 传递给 writer 来尝试做的事情与定义一个不接受 arg 并尝试将 arg 传递给它的普通函数没有什么不同。

In [2]: def foo():
...: print("I take no args")
...:

In [3]: foo()
I take no args

In [4]: foo(2)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-3ab2f4e33a15> in <module>()
----> 1 foo(2)

TypeError: foo() takes 0 positional arguments but 1 was given

关于使用 lambda 的 Python def 函数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28900851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com