我无法理解我在Python中看到的一些简写符号。有人能够解释这两个功能之间的区别吗? 谢谢。
def test1():
first = "David"
last = "Smith"
if first and last:
print last
def test2():
first = "David"
last = "Smith"
print first and last
答案 0 :(得分:5)
第一个函数始终返回None
(打印Smith
),而第二个函数始终返回"Smith"
*
快速了解and
:
python and
运算符返回它遇到的第一个“falsy”值。如果它没有遇到“假”值,那么它返回最后一个值(即“true-y”)这就解释了原因:
"David" and "Smith"
始终返回"Smith"
。由于两者都是非空字符串,因此它们都是“true-y”值。
"" and "Smith"
将返回""
,因为它是一个假值。
* OP发布的原始功能实际上是:
def test2():
first = "David"
last = "Smith"
return first and last
答案 1 :(得分:3)
函数test1()
和test2()
之间的区别在于test1()
显式打印last
的值,只要表达式first and last
的结果得到评估即可如果为true,test2()
将打印表达式first and last
的结果。打印的字符串是相同的,因为表达式first and last
的结果是last
的值 - 但仅因为first
的计算结果为真。
在Python中,如果and
表达式的左侧评估为true,则表达式的结果是该表达式的右侧。由于布尔运算符的短路,如果and
表达式的左侧求值为false,则返回表达式的左侧。
or
也会在Python中出现短路,返回表达式最左边部分的值,决定整个表达式的真值。
所以,再看几个测试函数:
def test3():
first = ""
last = "Smith"
if first and last:
print last
def test4():
first = ""
last = "Smith"
print first and last
def test5():
first = "David"
last = "Smith"
if first or last:
print last
def test6():
first = "David"
last = "Smith"
print first or last
def test7():
first = "David"
last = ""
if first or last:
print last
def test8():
first = "David"
last = ""
print first or last
test3()
不会打印任何内容
test4()
将打印""
。
test5()
将打印"Smith"
test6()
将打印"David"
。
test7()
将打印""
test8()
将打印"David"
。
答案 2 :(得分:0)
你问,这两个片段之间有什么区别?
if first and last:
print last
和
print first and last
在第一种情况下,代码将打印last的值,否则不会。
在第二种情况下,代码将打印first and last
的值。如果您习惯使用C,那么您可能会认为a and b
的值是布尔值True或False。但你错了。
a and b
评估a
;如果a
是真实的,则表达式的值为b
。如果a
错误,则表达式的值为a
:
"David" and "Smith" -> "Smith"
0 and "Smith" -> 0
1 and "Smith" -> "Smith"
"David" and 0 -> 0
"David" and 1 -> 1
Generallly:
last
,如果它打印任何东西
first
的真实性打印last
或first
。具体而言,如果first
永远是""
,则第二个示例将打印""
首先不会打印任何东西。