Python字典构造函数有保留的kwargs吗?
当使用kwarg风格的字典初始化时:
In [3]: dict(a=1, b=2, c=3)
Out[3]: {'a': 1, 'b': 2, 'c': 3}
出于某种原因,定义键'from'会引发语法错误:
In [4]: dict(to=0, from=1)
------------------------------------------------------------
File "<ipython console>", line 1
dict(to=0, from=1)
^
SyntaxError: invalid syntax
那么,'from'这个键有什么特别之处呢?还有其他在kwarg风格初始化中保留的键吗?
我正在使用Python 2.6。
4 个回答
2
“from”是一个关键字:
from threading import Thread
在Python中,没有上下文敏感的关键字:一个名字要么是关键字,要么可以用作标识符。以前有一个例外:“as”在最初引入时在导入语句中是特殊处理的,但后来它被提升为“完整关键字”。
上下文敏感的关键字可能会带来一些问题。例如,下面的代码:
print=3
应该正常工作还是出错呢?(它可能是一个语法错误的打印语句,或者是给一个名为print的变量赋值)。再比如:
def print(x):
print x
print(3)
这段代码应该定义一个名为print的函数吗?如果是的话,最后一行是一个调用吗?
3
from
这个词,就像Python中的其他一些特殊词一样,是一个关键字或保留字。具体来说,from
用于从一个模块中导入一些特定的对象到当前的命名空间里。你不能把它用作变量名或者其他什么东西(最终,kwargs是变量名)。这就是不被允许的,即使在理论上可以让它变得清晰,这样做是为了让解析器更简单,也让编写解析器的人保持理智;)
5