Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python支持短路吗?_Python_Boolean Logic_Short Circuiting - Fatal编程技术网

Python支持短路吗?

Python支持短路吗?,python,boolean-logic,short-circuiting,Python,Boolean Logic,Short Circuiting,Python支持布尔表达式中的短路吗?是的,和和或运算符都支持短路——请参阅。运算符和中的短路行为,或: 让我们首先定义一个有用的函数来确定是否执行了某些操作。一个简单的函数,它接受一个参数,打印一条消息并返回输入,保持不变 >>> def fun(i): ... print "executed" ... return i ... 在以下示例中,可以观察到和、或运算符的用法: >>> fun(1) executed 1

Python支持布尔表达式中的短路吗?

是的,
运算符都支持短路——请参阅。

运算符
中的短路行为,
:
让我们首先定义一个有用的函数来确定是否执行了某些操作。一个简单的函数,它接受一个参数,打印一条消息并返回输入,保持不变

>>> 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