为什么我在 Python 控制台输入 2 或 3 时没有得到 True?
Why do I not get True when I type 2 or 3 at the Python console?
在Python中,任何非零值都被评估为True。因此,例如,以下代码打印 Yes
.
if 2 or 3:
print('Yes')
但是,如果我在 Python 控制台输入 2 or 3
,我会得到 2
而不是 True
。为什么会有不同的行为?
当使用 or
时,Python 将 return 第一个真值。
print None or 2 # Prints 2
print 0 or 'Foo' # Prints Foo
print False or True # Prints True
如果第一个值是假的,它会return第二个,实际上不管它是否为真:
print None or False # Prints False
print False or None # Prints None
print False or 0 # Prints 0
如果链接语句,它将首先评估第一个条件,然后是第二个
print None or False or 0 # Will evaluate into ((None or False) or 0)
这在 PHP and .
等语言中也是可能的
来源: https://docs.python.org/3/library/stdtypes.html#truth-value-testing
or
returns 如果值为 truthy,则为第一个值;如果第一个值为 falsy[,则为第二个值 (source).
这种行为有时惯用地用于初始化可变类型的关键字参数:
def foo(bar=None, zoo=None):
bar = bar or []
zoo = zoo or {}
这是not the unique way to initialize them, but you should be aware你不应该使用空列表或字典作为默认参数。
在您的所有情况下,2 or 3
表达式生成 2
。
然后由控制台直接显示,传递给 print
函数,或传递给 if
语句。
if
进行自己的真实性测试。
In [14]: 2 or 3 # or returns the first truthy item
Out[14]: 2
In [15]: None or 3
Out[15]: 3
In [16]: False or 0 or 2
Out[16]: 2
print
仅显示其参数:
In [17]: print(2 or 3)
2
if
如果其参数为真则执行操作; else
如果不是:
In [18]: if 2: print('yes')
yes
In [19]: if False: print('yes')
这里计算 or
,然后对结果进行操作:
In [20]: if None or 2 or 3: print('yes')
yes
and
returns 第一个 falsy,如果 none
最后一个
In [21]: 2 and 3
Out[21]: 3
In [22]: 2 and False
Out[22]: False
In [23]: 2 and 0 and 3
Out[23]: 0
在Python中,任何非零值都被评估为True。因此,例如,以下代码打印 Yes
.
if 2 or 3:
print('Yes')
但是,如果我在 Python 控制台输入 2 or 3
,我会得到 2
而不是 True
。为什么会有不同的行为?
当使用 or
时,Python 将 return 第一个真值。
print None or 2 # Prints 2
print 0 or 'Foo' # Prints Foo
print False or True # Prints True
如果第一个值是假的,它会return第二个,实际上不管它是否为真:
print None or False # Prints False
print False or None # Prints None
print False or 0 # Prints 0
如果链接语句,它将首先评估第一个条件,然后是第二个
print None or False or 0 # Will evaluate into ((None or False) or 0)
这在 PHP and
来源: https://docs.python.org/3/library/stdtypes.html#truth-value-testing
or
returns 如果值为 truthy,则为第一个值;如果第一个值为 falsy[,则为第二个值 (source).
这种行为有时惯用地用于初始化可变类型的关键字参数:
def foo(bar=None, zoo=None):
bar = bar or []
zoo = zoo or {}
这是not the unique way to initialize them, but you should be aware你不应该使用空列表或字典作为默认参数。
在您的所有情况下,2 or 3
表达式生成 2
。
然后由控制台直接显示,传递给 print
函数,或传递给 if
语句。
if
进行自己的真实性测试。
In [14]: 2 or 3 # or returns the first truthy item
Out[14]: 2
In [15]: None or 3
Out[15]: 3
In [16]: False or 0 or 2
Out[16]: 2
print
仅显示其参数:
In [17]: print(2 or 3)
2
if
如果其参数为真则执行操作; else
如果不是:
In [18]: if 2: print('yes')
yes
In [19]: if False: print('yes')
这里计算 or
,然后对结果进行操作:
In [20]: if None or 2 or 3: print('yes')
yes
and
returns 第一个 falsy,如果 none
In [21]: 2 and 3
Out[21]: 3
In [22]: 2 and False
Out[22]: False
In [23]: 2 and 0 and 3
Out[23]: 0