'id' - неверное имя переменной в Python - PullRequest
112 голосов
/ 17 сентября 2008

Почему неправильно называть переменную id в Python?

Ответы [ 8 ]

119 голосов
/ 17 сентября 2008

id() является фундаментальным встроенным:

Помощь по встроенной функции id в модуле __builtin__

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.)

В общем, использование имен переменных, которые затмевают ключевое слово или встроенную функцию на любом языке, является плохой идеей, даже если это разрешено.

47 голосов
/ 17 сентября 2008

id - это встроенная функция, которая дает адрес памяти объекта. Если вы назовете одну из своих функций id, вам нужно будет сказать __builtins__.id, чтобы получить оригинал. Переименование id в глобальном масштабе сбивает с толку все, кроме небольшого сценария.

Однако повторное использование встроенных имен в качестве переменных не так уж и плохо, если их использовать локально. Python имеет lot встроенных функций, которые (1) имеют общие имена и (2) вы не будете много использовать в любом случае. Использование их в качестве локальных переменных или в качестве членов объекта - это нормально, поскольку из контекста очевидно, что вы делаете:

Пример:

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

Некоторые встроенные модули с заманчивыми именами:

  • id
  • file
  • list
  • map
  • all, any
  • complex
  • dir
  • input
  • slice
  • buffer
41 голосов
/ 22 января 2015

В PEP 8 - Руководство по стилю для кода Python , в разделе появляется следующее руководство: Описательное: Стили именования :

  • single_trailing_underscore_: используется соглашением, чтобы избежать конфликтов с ключевым словом Python, например

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

Итак, чтобы ответить на вопрос, пример, который применяет это руководство:

id_ = 42

Включение завершающего подчеркивания в имя переменной проясняет намерение (для тех, кто знаком с руководством в PEP 8).

40 голосов
/ 17 сентября 2008

Я мог бы сказать что-то непопулярное: id() - довольно специализированная встроенная функция, которая редко используется в бизнес-логике. Поэтому я не вижу проблемы в использовании его в качестве имени переменной в точной и хорошо написанной функции, где ясно, что id не означает встроенную функцию.

4 голосов
/ 17 сентября 2008

Плохо называть любую переменную после встроенной функции. Одна из причин в том, что это может сбить с толку читателя, который не знает, что имя переопределено.

1 голос
/ 17 сентября 2008

'id' - это встроенный метод в Python. Присвоение значения id будет перезаписывать метод. Лучше использовать либо идентификатор перед тем, как в "some_id", либо использовать его в другом методе ввода заглавных букв.

Встроенный метод принимает один параметр и возвращает целое число для адреса памяти переданного вами объекта.

>>> идентификатор (1)

9787760

>>> x = 1

>>> ID (х)

9787760

1 голос
/ 17 сентября 2008

Потому что это имя встроенной функции.

0 голосов
/ 17 сентября 2008

Поскольку python - это динамический язык, обычно не стоит давать имя переменной и функции с одинаковым именем. id () - это функция в python, поэтому рекомендуется не использовать переменную с именем id. Учитывая это, это относится ко всем функциям, которые вы можете использовать ... переменная не должна иметь того же имени, что и функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...