1

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

4

2 回答 2

8

不,Python 不是静态类型的。

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

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

于 2012-06-04T22:45:08.467 回答
0

考虑这行代码:

x = [] # (or {})

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

x = 'a string'

Python 对此没有任何问题。

我想知道您是否对另一种语言的功能感到困惑,例如 Perl 的自动激活功能,它让您将未初始化的标量变量视为对列表或哈希的引用。您是否认为 Python 缺乏这样的功能,所以它的“动态性”较低?如果您真的在寻找这样的东西,请查看集合模块中的 defaultdict 类。

于 2012-06-04T23:03:52.677 回答