以下代码有何作用?
a = lambda _:True
根据我在交互式提示中阅读和测试的内容,它似乎是一个始终返回True
的函数。
我是否理解正确?我希望理解为什么使用下划线(_
)。
答案 0 :(得分:97)
_
是变量名。试试吧。
(这个变量名通常是被忽略变量的名称。可以这么说占位符。)
的Python:
>>> l = lambda _: True
>>> l()
<lambda>() missing 1 required positional argument: '_'
>>> l("foo")
True
所以这个lambda 确实需要一个参数。如果你想要一个没有参数的lambda 总是返回True
,那就这样做:
>>> m = lambda: True
>>> m()
True
答案 1 :(得分:6)
Underscore是一种Python惯例,用于命名未使用的变量(例如,静态分析工具不会将其报告为未使用的变量)。在您的情况下,lambda参数未使用,但创建的对象是单参数函数,它始终返回True
。所以你的lambda在数学上有点类似于Constant Function。
答案 2 :(得分:5)
它似乎是一个无论如何返回True的函数。
是的,它是一个返回True的函数(或lambda)。在这种情况下,underscore通常是被忽略变量的占位符。
示例用例用于此类函数(几乎不执行任何操作):
dd = collections.defaultdict(lambda: True)
当用作defaultdict的参数时,您可以将True
作为常规默认值。
答案 3 :(得分:4)
Lambda表示一个函数。 以上陈述与撰写
相同def f(_):
return True
对于lambda,需要存在一个变量。所以你传给一个名为_
的变量(同样你可以传递x
,y
..)
答案 4 :(得分:3)
下划线_
是有效的标识符,在此用作变量名称。对于传递给函数的参数,它总是返回True
。
>>>a('123')
True
答案 5 :(得分:2)
以下是有问题的代码行:
a = lambda _:True
它创建一个具有一个输入参数的函数:_
。 Underscore是变量名称的一个相当奇怪的选择,但它只是一个变量名称。即使不使用lambda函数,也可以在任何地方使用_
。例如,而不是....
my_var = 5
print(my_var)
你可以写:
_ = 5
print(_)
但是,有一个原因是_
被用作参数名称的名称而不是x
或input
。我们马上就会谈到这一点。
首先,我们需要知道lambda关键字构造一个函数,类似于def
,但语法不同。 lambda函数a = lambda _:True
的定义类似于编写:
def a(_):
return True
它创建一个名为a
的函数,其输入参数为_
,并返回True
。人们可以用a = lambda x:True
轻松写下x
而不是下划线。但是,当我们不打算使用该变量时,惯例是使用_
作为变量名。请考虑以下事项:
for _ in range(1, 11):
print('pear')
请注意,循环索引永远不会在循环体内使用。我们只是希望循环执行指定的次数。正如winklerrr
所写的那样,“变量名_
就像一个”扔掉变量“,只是一个没用的占位符。”
同样,使用``a = lambda x:True ,输入参数不会在函数体内使用。输入参数是什么并不重要,只要有一个。该lambda函数的作者写了
_
而不是x
之类的东西,以表明该变量不会被使用。
请注意,lambda 确实有一个参数;所以,写作
a()
,会引发错误。
如果你想要一个没有参数的lambda写这样的东西:
bar = lambda: True
现在调用bar()
,没有args,就可以了。
不带参数的lambda不必总是返回相同的值:
import random
process_fruit = lambda : random.random()
上面的lambda函数更复杂,只是总是返回相同常量的东西。
程序员有时使用lambda
关键字而不是def
的一个原因是功能特别简短。请注意,lambda
定义通常可以适用于一行,而使用def语句则很难做到。当函数不再使用时,使用lambda
而不是def
sf的另一个原因。如果我们以后不想再次调用该函数,则无需为该函数指定名称。例如,请考虑以下代码:
def apply_to_each(transform,in_container): out_container = list() 对于idx,枚举项(容器,0): out_container [idx] =变换(项目) return out_container
现在我们进行以下调用:
squares = apply_to_each(lambda x: x**2 range(0, 101))
请注意,lambda x: x**2
没有给出标签。这是因为我们以后可能不会再次调用它,它只是我们暂时需要的简短而简单的东西。
lambda函数不需要给出名称的事实是描述它们的另一个名称的来源:“匿名函数。”
另请注意,lambda语句类似于函数调用,因为它们返回对它们创建的函数的引用。以下是非法的:
apply_to_each(def foo(x): x**2 , range(0, 101))
然而,apply_to_each(lambda x: x**2 range(0, 101))
就好了。
因此,我们使用lambda
代替def
和_
而不是长变量名称,当我们想要一些简短,甜蜜的东西时,可能以后不再需要使用。
答案 6 :(得分:-1)
Perc =λx,y:浮点数(x)* 100 /浮点数(y)
谁能解释它在python中的用途