2017-05-02 5 views
0

私はちょっとPythonには新しく、今回はグラフィックを含むゲームプログラミングでAIのために使っています。またはpython3の割り当てで

私は

def __init__(self, m=None): 
    if isinstance(m, Matrix33): 
     m = list(m._m) 
    self._m = m or [1., 0., 0., 0., 1., 0., 0., 0., 1.] 

どのようにPythonが位置づけるまたはいずれかの条件なしでの変数の代入ではないですブック内のコードの例を見ましたか?

+1

として、より明示的に表現することができ

それは '自己'に[...、1.0] 'M'は空のリストであるか、 'NONE'及び場合はそう'リストを設定するかどうかをチェックします。そうでなければ、 'self._m'は' m'に設定されます – kuro

+0

@kuro、それが答えなら、答えとして投稿してください。 – Kevin

+0

[Pythonは短絡をサポートしていますか?](http://stackoverflow.com/questions/2580136/does-python-support-short-circuiting) – mkrieger1

答えて

0

ブール演算子orTrueまたはFalseを返すと予想しています。しかし、それはしません。 orは、評価する被演算子の最初のものをTrueに返します。

ので:

1 or 0 - >1(あなたはブールが予想され、それを使用する場合Trueとして扱わ)

0 or 'B' - >'B'(ブール値である場合、あなたがそれを使用する場合Trueとして扱わ

引用した例は、ブール値でないデータ型を自動的にブール値にキャストする大部分の言語で見られるイディオムです。長い伝統はPL/1に戻ります。最初のオペランドにNoneまたは有効な値のいずれかが含まれていて、有効な値が実際にゼロになることを期待している場合、イディオムはあなたを惑わせる可能性があります。あなたはまた、

self._m = m if m else [1., 0., 0., 0., 1., 0., 0., 0., 1.] 
関連する問題