Python支持短路吗?
Python支持布尔表达式中的短路吗?是的,Python支持短路吗?,python,boolean-logic,short-circuiting,Python,Boolean Logic,Short Circuiting,Python支持布尔表达式中的短路吗?是的,和和或运算符都支持短路——请参阅。运算符和中的短路行为,或: 让我们首先定义一个有用的函数来确定是否执行了某些操作。一个简单的函数,它接受一个参数,打印一条消息并返回输入,保持不变 >>> def fun(i): ... print "executed" ... return i ... 在以下示例中,可以观察到和、或运算符的用法: >>> fun(1) executed 1
和和或运算符都支持短路——请参阅。运算符和中的短路行为,或:
让我们首先定义一个有用的函数来确定是否执行了某些操作。一个简单的函数,它接受一个参数,打印一条消息并返回输入,保持不变
>>> def fun(i):
... print "executed"
... return i
...
在以下示例中,可以观察到和
、或
运算符的用法:
>>> fun(1)
executed
1
>>> 1 or fun(1) # due to short-circuiting "executed" not printed
1
>>> 1 and fun(1) # fun(1) called and "executed" printed
executed
1
>>> 0 and fun(1) # due to short-circuiting "executed" not printed
0
注意:以下值被解释器视为假值:
False None 0 "" () [] {}
函数中的短路行为:any()
,all()
:
Python的和函数也支持短路。如单据所示;他们按顺序评估序列中的每个元素,直到找到一个允许早期退出评估的结果。考虑下面的例子来理解两者。
该函数检查是否有任何元素为True。一旦遇到True,它就会停止执行并返回True
>>> any(fun(i) for i in [1, 2, 3, 4]) # bool(1) = True
executed
True
>>> any(fun(i) for i in [0, 2, 3, 4])
executed # bool(0) = False
executed # bool(2) = True
True
>>> any(fun(i) for i in [0, 0, 3, 4])
executed
executed
executed
True
该函数检查所有元素是否为True,并在遇到False时立即停止执行:
>>> all(fun(i) for i in [0, 0, 3, 4])
executed
False
>>> all(fun(i) for i in [1, 0, 3, 4])
executed
executed
False
链式比较中的短路行为:
此外,在Python中
);例如,x
及
或
是的,Python确实支持布尔运算符的短路求值、最小求值、或麦卡锡求值。它用于减少计算布尔表达式输出的求值次数。范例-
基函数
def a(x):
print('a')
return x
def b(x):
print('b')
return x
及
产量与产量
a
b
1
a
或
OR-OUTPUT
a
3
a
b
4
密切相关:次要的狡辩:明确列出的虚假价值观有点误导。任何类型都可以有一个或多个falsy值。按照惯例,所有值为0
的数字类型都是错误的(因此它不仅仅是0
,它是0.0
,0j
,decimal.decimal(0)
,分数(0)
,所有长度为0
的集合都是错误的(因此在您列出的最上面,b'/code>[Py3],u'
[Py2]和set()
/frozenset()
都是内置的,但用户定义的/第三方类型可以定义它们自己的(使用\uuuubool\uuuuuu
[Py3]/\uuuuu非零\uuuuuuuuuu\uuuu len\uuuuuu
间接定义)。ShadowRanger您的评论将完成我的回答。感谢您添加此注释。另外,python double计算短路条件,如果以后用作布尔值。。。除非它们在if语句中,这是私有的:@GrijeshChauhan python支持长电路吗?
In [171]: name = raw_input('Enter Name: ') or '<Unknown>'
Enter Name:
In [172]: name
Out[172]: '<Unknown>'
>>>False and 3/0
False
>>>True and 3/0
ZeroDivisionError: integer division or modulo by zero
>>>True or 3/0
True
>>>False or 3/0
ZeroDivisionError: integer division or modulo by zero
def a(x):
print('a')
return x
def b(x):
print('b')
return x
if(a(True) and b(True)):
print(1,end='\n\n')
if(a(False) and b(True)):
print(2,end='\n\n')
a
b
1
a
if(a(True) or b(False)):
print(3,end='\n\n')
if(a(False) or b(True)):
print(4,end='\n\n')
a
3
a
b
4