python中的所有对象,但为什么没有关键字作为对象?
我是新来的python编程,python的美丽是一切都是对象,但为什么没有关键字作为对象?python中的所有对象,但为什么没有关键字作为对象?
>>> type(for)
File "<stdin>", line 1
type(for)
^
SyntaxError: invalid syntax
有一些混合消息正在进行。 Mark Pilgrim说Everything is an Object,但即使在所有语言都是对象的情况下,也不是,所有内容都是对象。 ;)
Python允许您通过专门命名的方法对类进行操作符重载。它也有一个operator
模块。不过说到底,的operator
模块和特殊操作者类方法两个构件是功能,因此对象,但裸字(如+
),该Python使用以提供可读性和语义是根本不总是可解析作为对象。
这对于关键字来说不太正确。有些关键字(如if
)根本不归结为对象。这也可能是最好的忽略词一切在深入Python和只记得这句话:
字符串是对象。列表是对象。函数是对象。即使是 模块也是对象。
操作符和关键字不是对象的原因是它们实际上只是语言的语法的一部分,而不是您可以操作的元素。正如phihag所说,你会用一个假设的'for'对象来做什么?
但是,操作符是对象 - 但是您必须记住,'+'操作符基本上只是语法糖,用于添加函数。当你写
a + b * c
什么Python看到(忽略优化)更像
a.__add__(b.__mul__(c))
事实上,我们可以用数字试试这个:
>>> (5).__mul__((3).__add__(10))
65
因此,运营商+ '由(5).__ add__函数表示,这是一个对象。 (我们必须使用括号,因为数字文字是一种特殊的句法情况。)
它比语法糖多一点点;观察'(2).__ add __('')'。 – phihag 2012-08-05 21:18:21
关键字在Python中不存在。你会得到一个语法错误,但如果你没有,你仍然不能键入(关键字),因为关键字不存在。
以下面的代码为例:
>>> from urllib2 import urlparse as foo
在这里,我们看到这个词“是”作为语法的一部分。这是一个关键字。
>>> type(as)
File "<stdin>", line 1
as
^
SyntaxError: invalid syntax
但尝试使用它作为一个语法错误的对象的结果。
但是在2.4 as
不是保留字。所以有不同的事情:
>>> from urllib2 import urlparse as foo
到目前为止好。
>>> type(as)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'as' is not defined
在那里我们看到as
根本不存在。这不是一个对象,因为它不是什么。该语言不知道它的存在。这是因为语言在执行之前无法识别。解析在执行之前完成。因此,语法和关键字的解析在“一切”存在之前完成。因此关键字不是“一切”的一部分,因此它们不是对象。
您得到的语法错误是为了防止您通过使用关键字作为变量名称来犯错误。不过,在这种情况下,这个错误意味着为什么关键字不是对象:因为它们不是任何东西。
“一切都是对象”在Python中既不美丽也不真实。 – 2012-08-05 19:31:21
有可能成为队长明显......但也许是因为他们是关键字和运营商,而不是对象? :)为什么你想让他们成为对象? – favoretti 2012-08-05 19:31:40
*几乎*一切都有例外。 – 2012-08-05 19:37:13