2012-06-04 63 views
1

我知道Python是动态类型的,鸭子类型也很强大。在某些情况下,我们必须确保它是事先声明为列表或字典以便使用它们......所以我可以说Python也是静态类型语言吗?Python静态类型?

+0

在遇到Python之前,您有没有可能学习非严格的Perl? –

回答

8

不,Python不是静态类型的。

在静态类型名称绑定到一个类型和一个对象(或值),在Python名称只绑定到对象。在任何时候,您都可以将名称重新分配给不同类型的对象,而这在静态类型语言中是无法做到的。

我不知道你需要事先声明你的变量是什么意思,但我的猜测是你实际上只是创建一个空的列表或字典并将其分配给一个名称。

0

考虑这行代码:

x = [] # (or {}) 

你是不是“变量声明为一个表(或字典)”使用它之前。您正在创建一个清单([])(或字典{}),然后将其分配为变量的值(x)。这并不意味着x现在有一个类型。你可以一个字符串后分配到x

x = 'a string' 

和Python会与这个没有问题。

我不知道你是否被另一种语言的特性弄糊涂了,比如Perl的autovivification特性,它让你把一个未初始化的标量变量看作是对列表或哈希的引用。你是否认为Python不太“动态”,因为它缺乏这样的功能?如果您确实在寻找这样的东西,请查看collections模块中的defaultdict类。