‘id’是Python中的一个错误的变量名

‘id’是Python中的一个错误的变量名

'id' is a bad variable name in Python

为什么在Python中命名变量id是不好的?


id()是一个基本的内置:

Help on built-in function id in module
__builtin__:

1
2
3
4
5
6
7
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.)

通常,使用以任何语言遮蔽关键字或内置函数的变量名称都是一个坏主意,即使它是允许的。


id是一个内置函数,它给出了一个对象的内存地址。如果您将其中一个函数命名为id,则必须说__builtins__.id才能获得原始函数。除了小脚本之外,全局重命名id令人困惑。

但是,只要使用本地名称,重复使用内置名称作为变量并不是那么糟糕。 Python有许多内置函数,(1)具有通用名称,(2)无论如何都不会使用太多。使用这些作为局部变量或作为对象的成员是可以的,因为从上下文中可以明显看出您正在做什么:

例:

1
2
3
4
5
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代码样式指南中,以下指南出现在描述:命名样式部分:

  • single_trailing_underscore_ : used by convention to avoid conflicts
    with Python keyword, e.g.

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

因此,要回答这个问题,应用此指南的示例是:

1
id_ = 42

在变量名中包含尾随下划线使得意图清晰(对那些熟悉PEP 8中的指导的人)。


我可能会说一些不受欢迎的东西:id()是一个相当专业的内置函数,很少用于业务逻辑。因此,我没有看到在一个紧凑且编写良好的函数中将它用作变量名的问题,其中很明显id并不意味着内置函数。


在内置函数之后命名任何变量是不好的。其中一个原因是因为对于不知道名称被覆盖的读者而言可能会让人感到困惑。


'id'是Python中的内置方法。将值分配给"id"将覆盖该方法。最好在"some_id"之前使用标识符,或者在不同的大小写方法中使用它。

内置方法接受一个参数,并为您传递的对象的内存地址返回一个整数。

>>> ID(1)

9787760

>>> x = 1

>>> ID(x)的

9787760


因为它是内置函数的名称。


因为python是一种动态语言,所以给变量和函数赋予相同的名称通常不是一个好主意。 id()是python中的一个函数,因此建议不要使用名为id的变量。请记住,这适用于您可能使用的所有函数......变量不应与函数同名。


推荐阅读