Python で見られる略記のいくつかを理解するのに苦労しています。誰かがこれら2つの機能の違いを説明できますか? ありがとうございました。
def test1():
first = "David"
last = "Smith"
if first and last:
print last
def test2():
first = "David"
last = "Smith"
print first and last
Python で見られる略記のいくつかを理解するのに苦労しています。誰かがこれら2つの機能の違いを説明できますか? ありがとうございました。
def test1():
first = "David"
last = "Smith"
if first and last:
print last
def test2():
first = "David"
last = "Smith"
print first and last
最初の関数は常にNone
(printing Smith
) を返しますが、2 番目の関数は常に"Smith"
*を返します。
への簡単な余談and
:
pythonand
演算子は、最初に遭遇した「偽の」値を返します。「偽の」値に遭遇しない場合、最後の値 (「true-y」) を返します。これは理由を説明しています。
"David" and "Smith"
常に戻ります"Smith"
。どちらも空でない文字列であるため、どちらも「true-y」値です。
"" and "Smith"
偽の値であるため、返さ""
れます。
*OPが実際に投稿した元の関数は次のようになりました:
def test2():
first = "David"
last = "Smith"
return first and last
test1()
関数との違いは、式の結果がtrue と評価される限り、 の値test2()
をtest1()
明示的に出力し、式の結果を出力することです。式の結果が -の値であるため、出力される文字列は同じですが、がtrue と評価されるためだけです。last
first and last
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 つのスニペットの違いは何ですか?
if first and last:
print last
と
print first and last
最初のケースでは、コードは last の値を出力するか、出力しません。
2 番目のケースでは、コードは の値を出力し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
一般的に:
last
は、何かを出力する場合
first
またはのいずれかを出力します。last
first
具体的には、first
is ever""
の場合、2 番目の例は印刷されます""
が、最初の例は何も印刷されません。