oga*_*ma8 60 python lazy-evaluation
例如,如果我有以下声明:
if( foo1 or foo2)
...
...
Run Code Online (Sandbox Code Playgroud)
如果foo1为true,python会检查foo2的条件吗?
unu*_*tbu 76
是的,Python懒惰地评估布尔条件.
该文件说,
表达式x和y首先计算x; 如果x为false,则返回其值; 否则,将评估y并返回结果值.
表达式x或y首先评估x; 如果x为真,则返回其值; 否则,将评估y并返回结果值.
小智 11
Python的懒惰可以通过以下代码证明:
def foo():
print('foo')
return False
def bar():
print('bar')
return False
foo() and bar() #Only 'foo' is printed
Run Code Online (Sandbox Code Playgroud)
另一方面,
foo() or bar()
Run Code Online (Sandbox Code Playgroud)
会导致打印'foo'和'bar'.
这在技术上不是懒惰的评估,它是短路布尔表达式.
懒惰的评价有一些不同的含义.例如,真正的懒惰评估可能会允许这样做
def foo(arg) :
print "Couldn't care less"
foo([][0])
Run Code Online (Sandbox Code Playgroud)
但Python没有.
Python也很好,因为它"回声"它是布尔参数.例如,一个或条件返回它的第一个"truthy"参数或最后一个参数(如果所有参数都是"falsey").和条件相反.
所以"回声论证"布尔意味着
2和[]和1
评估为[],和
[]或1或2
评估为1
归档时间: |
|
查看次数: |
26122 次 |
最近记录: |