142

私は Python を勉強しており、そのNone値について説明している章を読みましたが、残念ながらこの本はいくつかの点であまり明確ではありません。そこで共有すれば、私の質問に対する答えが見つかると思いました。

None価値とは何かを知りたいのですが、それを何に使用しますか?

また、私は本のこの部分を取得しません:

変数に の値を代入することはNone、変数を元の空の状態にリセットする 1 つの方法です。

どういう意味ですか?

答えは素晴らしかったですが、コンピューターの世界に関する知識が乏しいため (クラスやオブジェクトなどについて学んでいません)、ほとんどの答えが理解できませんでした。この文はどういう意味ですか?

変数に の値を代入することはNone、変数を元の空の状態にリセットする 1 つの方法です。

最後の:

最後に、さまざまな答えを探して答えを得ました。時間を割いて私を助けてくれたすべての人々 (特に Martijn Pieters と DSM) に感謝しなければなりません。すべての答えは素晴らしかったです。

4

9 に答える 9

72

None「空」または「ここに値がない」ことを示すために一般的に使用される値です。これは信号オブジェクトです。Python のドキュメントにその意味があると記載されているため、意味があるだけです。

特定の Python インタープリター セッションには、そのオブジェクトのコピーが 1 つだけ存在します。

たとえば、関数を記述し、その関数が明示的なreturnステートメントを使用しない場合、None代わりに が返されます。そうすれば、関数を使ったプログラミングが大幅に簡素化されます。関数は、そのオブジェクトが 1 つだけであっても、常に何かを返しNoneます。

明示的にテストできます:

if foo is None:
    # foo is set to None

if bar is not None:
    # bar is set to something *other* than None

もう 1 つの用途は、関数のオプション パラメータに「空の」デフォルトを与えることです。

def spam(foo=None):
    if foo is not None:
        # foo was specified, do something clever!

関数spam()にはオプションの引数があります。指定せずに呼び出すspam()と、デフォルト値Noneが渡されるため、関数が引数付きで呼び出されたかどうかを簡単に検出できます。

他の言語にも同様の概念があります。SQL にはNULL; JavaScript にはundefined nullなどがあります。

Python では、変数は使用されることによって存在することに注意してください。最初に変数を宣言する必要がないため、Python には実際に空の変数はありません。変数を にNone設定することは、デフォルトの空の値に設定することと同じではありません。Noneも値ですが、空であることを示すためによく使用されます。あなたが読んでいる本はその点で誤解を招きます。

于 2013-10-20T02:13:19.137 に答える
11

あなたが参照している本は明らかにの意味を大幅に単純化しようとしていNoneます。Python 変数には、初期の空の状態はありません。Python 変数は、定義されている場合にのみバインドされます。値を指定せずに Python 変数を作成することはできません。

>>> print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> def test(x):
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (0 given)
>>> def test():
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test
NameError: global name 'x' is not defined

しかし、変数が定義されているかどうかに応じて、関数の意味を変えたい場合があります。次のデフォルト値を持つ引数を作成できますNone

>>> def test(x=None):
...   if x is None:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

この値が特別なNone値であるという事実は、この場合にはそれほど重要ではありません。任意のデフォルト値を使用できました。

>>> def test(x=-1):
...   if x == -1:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

…しかし、None周りにいることで 2 つの利点が得られます。

  1. -1意味が不明確なような特別な値を選択する必要はありません。
  2. 私たちの関数は、実際に-1は通常の入力として処理する必要があるかもしれません。
>>> test(-1)
no x here

おっとっと!

そのため、この本は主にリセットという言葉の使用において少し誤解を招くものです。名前への割り当てNoneは、その値が使用されていないか、関数が何らかのデフォルトの方法で動作する必要があるが、値をリセットdelする必要があるというプログラマーへのシグナルです。元の未定義の状態にするには、次のキーワードを使用する必要があります。

>>> x = 3
>>> x
3
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
于 2013-10-20T20:15:43.463 に答える
3

None はシングルトン オブジェクト (None が 1 つしかないことを意味します) であり、言語とライブラリの多くの場所で、他の値がないことを表すために使用されます。


例:が辞書の
場合、存在する場合は返されますが、キーがない場合は返されます。dd.get(k)d[k]Nonedk

素晴らしいブログからこの情報を読んでください: http://python-history.blogspot.in/

于 2015-06-05T07:16:51.543 に答える
1

私はコード例 (およびフルーツ) が大好きなので、お見せしましょう

apple = "apple"
print(apple)
>>> apple
apple = None
print(apple)
>>> None

None は何の意味もなく、何の価値もありません。

None は False と評価されます。

于 2013-10-20T02:15:34.627 に答える