web-dev-qa-db-ja.com

「id」はPython

Pythonで変数idに名前を付けるのが悪いのはなぜですか?

117
brian buck

id()は基本的なビルトインです:

モジュール__builtin__の組み込み関数idのヘルプ:

id(...)

    id(object) -> integer

    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory
    address.)

一般に、Eclipseで任意の言語のキーワードまたは組み込み関数を使用する変数名を使用することは、たとえ許可されていても、悪い考えです。

120
Kevin Little

idは、オブジェクトのメモリアドレスを提供する組み込み関数です。関数にidという名前を付けた場合、__builtins__.idオリジナルを取得します。 idの名前をグローバルに変更すると、小さなスクリプト以外は混乱します。

ただし、組み込みの名前を変数として再利用することは、使用がローカルである限りそれほど悪くはありません。 Pythonには(lotがあり、(1)共通の名前があり、(2)あまり使用しない。組み込み変数はローカル変数またはオブジェクトのメンバーは、コンテキストから何をしているのかが明らかなので、OKです。

例:

def numbered(filename):
  file = open(filename)
  for i,input in enumerate(file):
    print "%s:\t%s" % (i,input)
  file.close()

魅力的な名前を持つビルトイン:

  • id
  • file
  • list
  • map
  • allany
  • complex
  • dir
  • input
  • slice
  • buffer

PEP 8-Python Codeのスタイルガイド)では、セクション 説明:命名スタイル

  • _single_trailing_underscore__:Pythonキーワード、例えば、.

    Tkinter.Toplevel(master, class_='ClassName')

したがって、質問に答えるために、このガイドラインを適用する例は次のとおりです。

_id_ = 42
_

変数名に末尾のアンダースコアを含めると、意図が明確になります(PEP 8のガイダンスに精通している人にとって)。

44
DavidRR

ここで不人気なことを言うかもしれません:id()は、ビジネスロジックではめったに使用されない、かなり特殊な組み込み関数です。したがって、idが組み込み関数を意味していないことが明らかな、厳密で適切に記述された関数で変数名として使用しても問題はありません。

41

組み込み関数の後に変数に名前を付けるのは悪いことです。その理由の1つは、名前が上書きされることを知らない読者にとって混乱を招く可能性があるためです。

4
Toni Ruža

'id'はPythonの組み込みメソッドです。 「id」に値を割り当てると、メソッドが上書きされます。前に「some_id」のように識別子を使用するか、別の大文字化方法で使用することをお勧めします。

組み込みメソッドは単一のパラメーターを受け取り、渡したオブジェクトのメモリアドレスの整数を返します。

>>>id(1)

9787760

>>>x = 1

>>>id(x)

9787760

1
brian buck

それは組み込み関数の名前だからです。

1
ahockley