问题:’id’是Python中错误的变量名
为什么id
在Python中命名变量很不好?
回答 0
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.)
通常,即使允许使用使用任何语言使关键字或内置函数都黯然失色的变量名也是一个坏主意。
回答 1
在PEP 8-Python代码样式指南中,以下指南出现在“ 描述性:命名样式 ”部分:
single_trailing_underscore_
:按惯例用于避免与Python关键字冲突,例如
Tkinter.Toplevel(master, class_='ClassName')
因此,为了回答这个问题,应用此准则的示例是:
id_ = 42
在变量名中包括结尾的下划线可以使意图很清楚(对于那些熟悉PEP 8指南的人)。
回答 2
id
是一个内置函数,用于提供对象的标识(这也是CPython中的内存地址)。如果命名函数之一id
,则必须说出builtins.id
要获取的原始函数(或__builtins__.id
在CPython中)。id
全局重命名除了一个小脚本之外,其他任何地方都令人困惑。
但是,只要使用本地名称,将内置名称重用作为变量并没有什么坏处。Python具有许多内置函数,这些函数(1)具有通用名称,(2)无论如何都不会使用太多。可以将它们用作局部变量或作为对象的成员,因为从上下文可以明显看出您正在做什么:
例:
def numbered(filename):
with open(filename) as file:
for i, input in enumerate(file):
print("%s:\t%s" % (i, input), end='')
一些带有诱人名称的内置函数:
id
file
list
,dict
map
all
,any
complex
,int
dir
input
slice
buffer
sum
min
,max
object
回答 3
我可能会在这里说一些不受欢迎的东西:这id()
是一个相当专业的内置函数,很少在业务逻辑中使用。因此,在紧密且编写良好的函数中将其用作变量名时,我看不出有任何问题,在这种情况下,显然id并不意味着内置函数。
回答 4
用内置函数命名任何变量都是不好的。原因之一是因为它会使不知道该名称被覆盖的读者感到困惑。
回答 5
id
是Python中的内置函数。分配一个值id
将覆盖该功能。最好在中添加前缀,some_id
或在中使用不同的大小写形式ID
。
内置函数采用单个参数,并为您传递的对象(在CPython中)的内存地址返回一个整数。
>>> id(1)
9787760
>>> x = 1
>>> id(x)
9787760
回答 6
因为它是内置函数的名称。
回答 7
其他人提到它令人困惑,但是我想进一步解释一下为什么。这是一个基于真实故事的示例。基本上,我编写了一个带有id
参数的类,但是稍后尝试使用内置函数id
。
class Employee:
def __init__(self, name, id):
"""Create employee, with their name and badge id."""
self.name = name
self.id = id
# ... lots more code, making you forget about the parameter names
print('Created', type(self).__name__, repr(name), 'at', hex(id(self)))
tay = Employee('Taylor Swift', 1985)
预期Yield:
Created Employee 'Taylor Swift' at 0x7efde30ae910
实际输出:
Traceback (most recent call last):
File "company.py", line 9, in <module>
tay = Employee('Taylor Swift', 1985)
File "company.py", line 7, in __init__
print('Created', type(self).__name__, repr(name), 'at', hex(id(self)))
TypeError: 'int' object is not callable
??我要在哪里叫int?这些都是内置的…
如果我将其命名为badge_id
or id_
,那么我就不会遇到这个问题。
回答 8
因为python是一种动态语言,所以给变量和函数起相同的名字通常不是一个好主意。id()是python中的函数,因此建议不要使用名为id的变量。请记住,这适用于您可能使用的所有函数…变量的名称不应与函数的名称相同。