在我的代码中使用python单词“type”是否安全?

时间:2012-05-12 23:08:15

标签: python python-2.7 reserved-words

我可以在自己的代码中使用“type”这个词还是保留?我的函数头:

def get(
    self,
    region='Delhi',
    city='Delhi',
    category='Apartments',
    type='For sale',
limit = 60,
    PAGESIZE=5,
    year=2012,
    month=1,
    day=1,
    next_page=None,
threetapspage=0,
    ):

谢谢

5 个答案:

答案 0 :(得分:38)

使用type作为函数的关键字参数将掩盖函数范围内的built-in function "type"。因此,虽然这样做不会引起SyntaxError,但这不是一种好习惯,我会避免这样做。

答案 1 :(得分:10)

都不是。它不是一个保留字(可以在http://docs.python.org/reference/lexical_analysis.html#keywords找到一个列表),但遮蔽任何内置字体通常是个坏主意。

答案 2 :(得分:0)

type应该绝对被视为保留字。虽然可能很想在数据库字段中使用此词,但请考虑以下事实:type()是最重要的调试/测试功能之一,因为它告诉您对象的class

$ python

>>> x = 5
>>> s = "rockets"
>>> y = [1,2,3] 

>>> print(type(x)) 
class 'int'

>>> print(type(s))
class 'str'

>>> print(type(y)) 
class 'list'

地图集将归类为一本书,但请考虑使用“类别”一词。

答案 3 :(得分:0)

尽管其他人指出,阴影python内置插件的形式不好,但是只有将函数或函数参数命名为type时,情况如此-

应该注意,如果将类属性命名为type,则内置的python type不会以任何方式被遮盖。

即使引用您的class属性,它也始终以类实例self或自定义实例变量作为前缀-并且不会阻碍python内置函数。

例如:

好的:

>>> class SomeClass():
...     type = 'foobar'
...
...     def someFunction(self):
...         return self.type

不好,

>>> def type(): # Overrides python built-in in global scope
...     pass
...
>>> def foobar(type):
...     return type # Overrides python built-in within func

答案 4 :(得分:0)

阴影内置变量(例如 typeid)的明确缺点:例如,如果您碰巧复制/粘贴了遮盖 id 的代码,然后您替换了你的变量有别的东西,但忘记重命名一个实例所以你仍然使用了悬空 id,代码在语法上仍然有效,linter 甚至可能找不到错误,但是当您运行代码时,您会得到非常奇怪的结果,因为 id 不会是您预期的字符串或数字。它将是内置函数 id

这几次让我很受伤。