以下の関数のreturn文で 'and'と 'or'文が何をしているのか説明できますか? 関数は、aとbの最大の共通分母を返すようです。Python関数の返信文が混乱し複雑である
def gcd(a,b): return b and gcd(b, a % b) or a
ありがとうございます!
以下の関数のreturn文で 'and'と 'or'文が何をしているのか説明できますか? 関数は、aとbの最大の共通分母を返すようです。Python関数の返信文が混乱し複雑である
def gcd(a,b): return b and gcd(b, a % b) or a
ありがとうございます!
私たちが行うことができますまず最初は、いくつかの括弧内に置かれた:
b and gcd(b, a % b)
b
がfalsyある場合、これはb
を与える:
((b and gcd(b, a % b)) or a)
は、今作品で、この作品を撮ることができます。それ以外の場合はgcd(b, a % b)
となります。言い換えれば、それは、以下の条件式と同等です:
b if not b else gcd(b, a % b)
式の次の部分がある:
前の式がそうでない場合は、falsy結果を持っている場合は、あなたにa
を与える
(...) or a
あなたに前の式を与えます。あなたはブール演算が:-)ブール値を返すC
のような言語から来る場合は、このはあなたが期待しているものではないかもしれないことを
は注意してください。 Pythonでは、がブール値を返すようにに保証されている唯一のブール演算はnot
です。しかし、これはすべて「ちょうどうまくいく」傾向があります。なぜなら、Pythonは必要なときにオブジェクトの「真理値」を取得する方法を知っているからです。例:
if obj:
...
実際にbool(obj)
を暗黙にチェックします。私はif
スイートを使用して全体のことを書き出すした場合
、それは次のようになります。b
はtruthy値を有している
def gcd(a, b):
if not b: # Likely `b == 0`. This is the recursion base-case.
val = b
else:
val = gcd(b, a % d)
if val:
return val
else:
return a
ご返信ありがとうございました! – pemfir
機能を継続的にすなわち等しくない、gcd(b, a % b)
を返します。この場合はゼロです。
(連続a % b
の結果に割り当てされた後)b
は0
に達し、b and gcd(b, a % b)
はFalse
なり、a
の値が返されます。
いくつかの良い読書があります:http://www.diveintopython.net/power_of_introspection/and_or.htmlこれは、 'と'と 'や'の使い方をもっと深く説明するべきです。 –
ありがとうございました。あなたのリンクが最も役に立つ回答でした!私は多くのことを学びました ! – pemfir