5

次のような Python コードをいくつか継承しました。

name = 'London'
code = '0.1'
notes = 'Capital of England'
ev = model.City(key=key, code=code, name=name or code, notes=notes)

name or code学習の精神で、私は議論で何が起こっているのか知りたい. これは「namenull でない場合は使用し、それ以外の場合は使用するcode」ということですか?

そして、このような複数の可能な引数を提供するための技術用語は何ですか?Pythonのドキュメントで読むことができますか?

ありがとう!

4

6 に答える 6

13

ほとんど。false と評価されない場合はuse name と表示されます。false と評価されるものには次のものが含まれますが、これらに限定されません。

  • False
  • 空シーケンス ( (), [], "")
  • 空のマッピング ( {})
  • 0
  • None

編集SilentGhostがコメントで提供したリンクを回答に追加しました。

于 2010-11-08T14:37:38.170 に答える
7

Python では、or演算子は false と評価されない限り、最初のオペランドを返します。false の場合は、2 番目のオペランドを返します。実際には、これは を使用nameし、デフォルトのフォールバックはcodeifnameが指定されていない場合です。

于 2010-11-08T14:38:34.370 に答える
1

Python コンソールを起動します。

>>> name = None
>>> code = 0.1
>>> name or code
0.10000000000000001

name が false に評価される場合、式は code に評価されます。それ以外の場合は名前が使用されます。

于 2010-11-08T14:39:27.417 に答える
1

そのイディオムは、True と評価される最初の値を取ります (通常は None ではありません)。有効な値 (ゼロなど) が誤って見捨てられる可能性があるため、注意して使用してください。より安全なアプローチは次のようなものです。

if name is not None:
  # use name

また

name if name is not None else code
于 2010-11-08T14:42:16.350 に答える
0

おおよそ正しいと思いますが、「null」は正確に決定するものではありません。基本的に、false (0、false、空の文字列 '') と評価されるものはすべて、最初の文字列ではなく 2 番目の文字列が表示されます。この意味での 'x or y' は、次のようなものです。

x の場合: x
そうでなければ: y

いくつかのコンソールプレイ:

x = ''
y = 'roar'
x または y
-'roar'
x = ' arf'
x または y
-'arf'
x = False
x または y
-'roar'

于 2010-11-08T14:40:51.920 に答える
0

学習の精神で、名前またはコード引数で何が起こっているのか知りたいです。これは「null でない場合は名前を使用し、それ以外の場合はコードを使用する」と言っていますか?

はい、基本的にはありますが、PythonのNullは複数のことを意味する場合があります(空の文字列、なし..)

あなたの場合のように:

>>> name = 'London'
>>> code = 0.1
>>> name or code
'London'
>>> name = ''
>>> code = 0.1
>>> name or code
0.1000....

しかし、関数パラメータが整数の場合と文字列の場合があるのは奇妙です。

これが役立つことを願っています:=)

于 2010-11-08T14:42:13.743 に答える