以下代码有什么作用?
a = lambda _:True
Run Code Online (Sandbox Code Playgroud)
从我在交互式提示中阅读和测试的内容来看,它似乎始终是一个返回的函数True.
我理解正确吗?我希望理解为什么_还使用了下划线().
小智 118
这_是变量名.试试吧.(这个变量名通常是被忽略变量的名称.可以这么说占位符.)
蟒蛇:
>>> l = lambda _: True
>>> l()
<lambda>() missing 1 required positional argument: '_'
>>> l("foo")
True
Run Code Online (Sandbox Code Playgroud)
所以这个lambda 确实需要一个参数.如果你想要一个总是返回没有参数的lambda True,那么执行以下操作:
>>> m = lambda: True
>>> m()
True
Run Code Online (Sandbox Code Playgroud)
下面是有问题的代码行:
a = lambda _:True
Run Code Online (Sandbox Code Playgroud)
它创建一个具有一个输入参数的函数:_。下划线是一个相当奇怪的变量名选择,但它只是一个变量名。_即使不使用 lambda 函数,您也可以在任何地方使用。例如,而不是......
my_var = 5
print(my_var)
Run Code Online (Sandbox Code Playgroud)
你可以写:
_ = 5
print(_)
Run Code Online (Sandbox Code Playgroud)
但是,使用或_之类的名称作为参数名称是有原因的。我们稍后会讨论这个问题。xinput
首先,我们需要知道 lambda 关键字构造一个函数,与 类似def,但语法不同。lambda 函数 的定义a = lambda _:True类似于:
def a(_):
return True
Run Code Online (Sandbox Code Playgroud)
a它创建一个以输入参数命名的函数_,并返回True。人们可以很容易地写成a = lambda x:True,用x代替下划线。但是,约定是_当我们不打算使用该变量时将其用作变量名。考虑以下:
for _ in range(1, 11):
print('pear')
Run Code Online (Sandbox Code Playgroud)
请注意,循环索引永远不会在循环体内部使用。我们只是希望循环执行指定的次数。正如winklerrr所写,“变量名_[...]就像一个‘扔掉的变量’,只是一个没有用的占位符。”
同样,对于“a = lambda x:True”,输入参数不在函数体内使用。输入参数是什么并不重要,只要有一个即可。该 lambda 函数的作者编写了_类似x, 的内容来表明该变量不会被使用。
请注意,lambda确实有一个参数;所以,写
a(),会引发错误。
如果你想要一个不带参数的 lambda,请编写如下内容:
bar = lambda: True
Run Code Online (Sandbox Code Playgroud)
现在调用bar(),不带参数,就可以正常工作了。不带参数的 lambda 不需要总是返回相同的值:
import random
process_fruit = lambda : random.random()
Run Code Online (Sandbox Code Playgroud)
上面的 lambda 函数比总是返回相同常量的函数更复杂。
lambda程序员有时使用关键字而不是关键字的原因之一def 是函数特别短且简单。请注意,一个lambda定义通常可以放在一行中,而使用 def 语句很难做到这一点。使用lambda而不是的另一个原因def当函数不会再次使用时如果我们不想稍后再次调用该函数,则无需为该函数命名。例如,考虑以下代码:
def apply_to_each(transform, in_container): out_container = list() for idx, item in enumerate(container, 0): out_container[idx] = transform(item) return out_container
现在我们进行以下调用:
squares = apply_to_each(lambda x: x**2 range(0, 101))
Run Code Online (Sandbox Code Playgroud)
请注意,lambda x: x**2没有给出标签。这是因为我们以后可能不会再调用它,这只是我们暂时需要的一些简短的东西。
事实上,lambda 函数不需要命名,因此有另一个名称来描述它们:“匿名函数”。
另请注意,lambda 语句类似于函数调用,因为它们返回对其创建的函数的引用。以下行为是非法的:
apply_to_each(def foo(x): x**2 , range(0, 101))
Run Code Online (Sandbox Code Playgroud)
然而,apply_to_each(lambda x: x**2 range(0, 101))就很好了。
因此,当我们想要一些简短的、甜蜜的并且以后可能不想再次使用的东西时,我们使用代替和代替长变量名lambda。def_
它似乎是一个无论如何返回True的函数.
是的,它是一个返回True的函数(或lambda).的下划线,这通常是用于忽略可变的占位符,在这种情况下是不必要的.
这种函数的一个示例用例(几乎没有任何作用):
dd = collections.defaultdict(lambda: True)
Run Code Online (Sandbox Code Playgroud)
当用作defaultdict的参数时,您可以将其True作为常规默认值.
Lambda 表示函数。上面的语句和写一样
def f(_):
return True
Run Code Online (Sandbox Code Playgroud)
对于 lambda,需要存在一个变量。所以你传递给它一个名为_(同样你可以传递x,y..)
| 归档时间: |
|
| 查看次数: |
49223 次 |
| 最近记录: |