Python是强类型的吗?我遇到过一些链接,说Python是一种强类型语言。但是,我认为在强类型语言中你不能这样做:bob = 1bob = "bob"我认为强类型语言在运行时不接受类型更改。也许我对强/弱类型的定义是错误的(或过于简单化)。那么,Python是一种强类型还是弱类型的语言
3 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
Python是强有力的动态类型。
强类型意味着值的类型不会以意外的方式改变。只包含数字的字符串不会神奇地变成一个数字,就像Perl中可能发生的那样。每种类型的更改都需要显式转换。
动态类型意味着运行时对象(值)具有类型,而不是静态类型,其中变量具有类型。
至于你的例子
bob = 1bob = "bob"
这是因为变量没有类型; 它可以命名任何对象。之后bob=1
,你会发现type(bob)
返回int
,但之后bob="bob"
,它会返回str
。(注意,这type
是一个常规函数,因此它会计算其参数,然后返回值的类型。)
与旧的C语言形成鲜明对比,后者是弱的,静态类型的,因此指针和整数几乎可以互换。(在许多情况下,现代ISO C需要转换,但默认情况下我的编译器对此仍然宽容。)
我必须补充一点,强类型和弱类型更像是一个连续体而不是布尔选择。C ++具有比C更强的类型(需要更多转换),但是类型系统可以通过使用指针强制转换来破坏。
动态语言(如Python)中类型系统的强度实际上取决于其原语和库函数如何响应不同类型。例如,+
重载是因为它适用于两个数字或两个字符串,但不是字符串和数字。这是在+
实现时所做的设计选择,但从语言的语义开始并不是必需的。实际上,当您+
在自定义类型上重载时,可以将其隐式转换为数字:
def to_number(x): """Try to convert x to a number.""" if x is None: return 0 # more special cases here else: return float(x) # works for numbers and stringsclass Foo(object): def __add__(self, other): other = to_number(other) # now do the addition
(我所知道的唯一一种完全强类型,也就是严格类型的语言是Haskell,其中类型是完全不相交的,只有通过类型类才可以控制形式的重载。)
添加回答
举报
0/150
提交
取消