46

我可以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,
):
4

6 回答 6

59

type用作函数的关键字参数将掩盖函数范围内的内置函数“类型” 。因此,虽然这样做不会引发 a SyntaxError,但它不被认为是好的做法,我会避免这样做。

于 2012-05-12T23:12:27.897 回答
15

两者都不。它不是保留字(可以在http://docs.python.org/reference/lexical_analysis.html#keywords找到它的列表),但隐藏任何内置命令通常是个坏主意。

于 2012-05-12T23:12:21.530 回答
7

虽然其他人指出阴影 python 内置函数是一种不好的形式,但只有将函数或函数参数命名为时才会出现这种情况type,但是 -

应该注意的type是,如果您将类属性命名为type.

即使在引用您的类属性时,它也总是以类实例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
于 2019-11-27T17:50:21.393 回答
2

这是一个十多年前的问题,为了安全起见,我建议使用kind而不是type作为论点。

很长一段时间,我一直在考虑为所有保留或构建的重命名建议,但看到你的问题让我终于做到了。

请检查python-keyword-aliases.md并随时向该列表提出新条目。

于 2020-12-24T09:21:06.053 回答
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'

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

于 2019-07-05T14:42:31.947 回答
0

一个带有阴影的内置变量的明确骗局,例如typeand id:如果您碰巧复制/粘贴了覆盖阴影的代码,id然后您将变量的所有实例替换为其他内容,但忘记重命名一个实例,因此您仍然使用id悬空, 代码在语法上仍然有效,并且 linter 很可能甚至找不到错误,但是当您运行代码时,您会得到非常奇怪的结果,因为id它不会像您预期的那样是字符串或数字。这将是内置函数id

这使我严重绊倒了几次。

于 2021-07-24T15:50:47.857 回答