Python中的'input'是关键字吗?

52

我是Python的新手。我在Sublime中编写代码时,它会将“input”这个单词标亮。

我将其用作变量名,似乎也能正常工作,所以我想知道它是否在新版本中是一个关键字。(我目前使用的是2.7.5版本)


2
这个问题不应该被踩吗?将他的确切问题输入Google会出现相应的文档页面,然后是一个专门回答这个问题(保留关键字)的网站。 - TankorSmash
7
@TankorSmash这个函数是内置的并不能很好地解释为什么它会被突出显示,对像我这样的新手来说。我之前使用Java,那里没有内置函数。此外,对于像我这样的新手来说,当我没有传递参数或括号时,Sublime认为它是一个方法并不是非常明显的。 - Zoltán
2个回答

58

不,input 不是关键字。相反,它是一个内置函数

而且,你是可以用 input 这个名字来创建一个变量的。但请不要这样做。这么做是个坏习惯,因为它会掩盖掉内置函数(在当前作用域中无法使用)。

如果你必须使用这个名字,习惯上是在后面加一个下划线:

input_ = input()

好的,我会将其重命名。不过你有什么建议吗?它是一个通用过滤函数的输入 :) - Zoltán
1
@Zoltán - 嗯,这取决于你。我已经用过 inp 几次了。 - user2555451
没错。Python不会阻止您更改通常指向内置函数的名称,但这几乎总是一个坏主意。内置函数仍然存在,如果您确实想要实际更改函数名称的含义,但需要访问内置函数,则可以使用__builtins__来引用它。 - Peter DeGlopper
1
@Zoltán: 不确定您所说的“过滤函数”的含义,但根据输入是多个或单个,可能的通用函数参数名称为iterablevalue。内置函数filter的输入分别命名为functioniterable - Steve Jessop
你可以使用 inputs 作为替代变量名。 - wisbucky
不,那个“尾随下划线”约定是当我们根本不能使用名称时,比如classdef。没有关于掩盖现有名称的约定,您只是使用另一种约定进行了编写。只要代码不是面向初学者,掩盖现有名称就完全可以(否则语言将阻止它),因此在专业环境中,在本地重新定义idinput并不是问题。 - Eric

0

input 不是一个关键字,而是由标准库提供的函数,包含在 builtins 模块中(该模块提供全局可访问的变量和函数):

>>> import builtins
>>> input is builtins.input
True

当然,你可以创建一个名为input的变量。对于有经验和中级用户来说,这样做是完全可以的,因为他们可以很容易地发现input名称已被重用。

使用最适合传达内容/意图的名称。如果input是最好的选择,那就使用它(前提是你不需要内置函数),不要用像input_这样的名称来混淆读者(初学者会想知道尾随下划线是否有特殊含义)。

但如果你是初学者,请不要重新定义内置函数,通过遮盖内置的input(遮盖变量会使其在当前范围内无法使用),当你稍后在同一范围内调用input()时,你将遇到此错误,并且可能难以找出原因:

TypeError: 'str' object is not callable

初学者应该使用另一个名称,最好不要使用input_,因为在Python中下划线具有特殊含义,这样其他初学者就会想知道那个尾部下划线是否有特殊含义(它与前导下划线相同或相关吗?或者可能与双下划线有关吗?)

在另一条评论中,有人表示遮盖变量是一种不好的做法,他甚至提出了一种从其他用途借鉴的约定。毕竟,如果遮盖变量真的是一种很糟糕的做法,Python语言设计者一开始就不会允许它存在,但他们知道并承认它有改善可读性的潜力,就像其他语言一样。所以他们允许了它,并且它还可以方便从其他允许遮盖的语言(如C/C++、Java甚至bash)过渡到Python。

注意:尾部下划线的常规用法是在无法使用名称时,比如Python中的关键字class。然后你可以使用class_(但正如我上面写的,最好在Python中避免使用它,因为下划线可能会让初学者感到困惑,因为它们可能传达特殊含义)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接