1

Python で見られる略記のいくつかを理解するのに苦労しています。誰かがこれら2つの機能の違いを説明できますか? ありがとうございました。

def test1():
   first = "David"
   last = "Smith"
   if first and last:
      print last


def test2():
   first = "David"
   last = "Smith"
   print first and last
4

3 に答える 3

5

最初の関数は常に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
于 2013-04-11T15:17:21.787 に答える
3

test1()関数との違いは、式の結果がtrue と評価される限り、 の値test2()test1()明示的に出力し、式の結果を出力することです。式の結果が -の値であるため、出力される文字列は同じですが、がtrue と評価されるためだけです。lastfirst and lasttest2()first and lastfirst and lastlastfirst

Python では、式の左辺がandtrue と評価される場合、式の結果はその式の右辺になります。ブール演算子の短絡により、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"

于 2013-04-11T15:49:08.530 に答える
0

これら 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、式の値は ですbaが偽の場合、式の値は次のaとおりです。

"David" and "Smith" -> "Smith"
0 and "Smith" -> 0
1 and "Smith" -> "Smith" 
"David" and 0 -> 0
"David" and 1 -> 1

一般的に:

  • 最初のものは時々何かを印刷し、他の時には何かを印刷しません。
    • 2番目は常に何かを出力します。
  • 最初の出力lastは、何かを出力する場合
    • 2 番目は、 の真偽に応じて、firstまたはのいずれかを出力します。lastfirst

具体的には、firstis ever""の場合、2 番目の例は印刷されます""が、最初の例は何も印刷されません。

于 2013-04-11T15:57:20.063 に答える