[英]Using a lambda function in python
有没有办法将 function 转换为 lambda function(自动)在 Z23EEEB7347BDD756BDDFC 中? 就像是:
def func(arg):
print("Hi", arg)
==>
lambda arg: compile(func) # <== something like this
Python 中的函数是该语言的一等公民。 这意味着 function 可以像数据值一样进行操作。 因此,可以将 function 作为参数传递给另一个 function,或者作为结果从 function 返回。 这被称为高阶编程。
现在, def
和lambda
关键字都定义了这样的 function 值。 主要区别在于def
为这样的 function 分配了一个名称,而 lambda 是匿名函数。 另一个区别是 lambdas 仅限于一行代码(尽管有些语言不是这种情况)。
例如,这里有两个等价的函数,一个用def
定义,另一个用lambda
:
def say_hello(name):
print('Hi ', name)
lambda name: print('Hi ', name)
def
关键字的另一种解释方法如下:
say_hello = lambda name: print('Hi ', name)
尽管强烈建议不要使用此类代码。
本质上,这两个函数都是(几乎)等价的数据值,但在上面的代码片段中,用def
定义的函数稍后可以被调用,因为它有一个名称,因此我们可以稍后访问它。 由lambda
定义的那个不能,因为它没有名称,因此如果没有分配给变量或传递给另一个 function(例如f
)作为参数,它会立即丢失,然后在f
中给它一个名称本地 scope 根据f
的参数。
然而,在我们不想用新的、短的函数来混淆 scope 的情况下,lambdas 很有用,这些函数只作为参数传递给另一个 function:
map(lambda x: x * 2, [1, 2, 3])
# >>> [2, 4, 6]
如果您已经有一个用def
定义的 function ,它会执行上面显示的乘法运算,就像您的示例中的情况一样,例如:
def double(x):
return x * 2
然后您可以在对 map 的调用中按名称简单地引用此 function:
map(double, [1, 2, 3])
# >>> [2, 4, 6]
简而言之:没有必要“将 function 编译为 lambda”,lambda 只是 function 的特例,没有给出名称。 请按名称参阅您的 function。
PS:不要使用map
和filter
,而是使用列表推导,因为它们被认为更 Pythonic。
您可以轻松制作:
def auto_lam(f):
return lambda *args, **kwargs: f(*args, **kwargs)
然后使用它:
mylam = auto_lam(func)
在这种形式中,您可以看到这是非常没用的,因为您只是调用了相同的 function,但包装函数在 python 中非常常见,因为它允许我们修改 ZC1C425268E683985D14ZA504F 的行为。 这些被称为装饰器函数。
例如:
def logging_func(f):
def do_work(*args, **kwargs):
print ("You called me")
res = f(*args, **kwargs)
print ("Finished")
return res
return do_work
现在你可以用这个包装现有的 function ,如下所示:
@logging_func
def func(arg):
print("Hi", arg)
现在每次调用func
时,它都会在前后记录一些内容。 我认为这是对 function 包装器的更好使用,而不是简单地返回相同的 function 包装器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.