Python是强类型的吗?

Python是强类型的吗?

我遇到过一些链接,说Python是一种强类型语言。

但是,我认为在强类型语言中你不能这样做:

bob = 1bob = "bob"

我认为强类型语言在运行时不接受类型更改。也许我对强/弱类型的定义是错误的(或过于简单化)。

那么,Python是一种强类型还是弱类型的语言


SMILET
浏览 982回答 3
3回答

有只小跳蛙

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,其中类型是完全不相交的,只有通过类型类才可以控制形式的重载。)

精慕HU

您将'强类型'与'动态类型'混淆。我无法1通过添加字符串来更改类型'12',但我可以选择存储在变量中的类型,并在程序运行时更改它。与动态类型相反的是静态类型; 变量类型的声明在程序的生命周期内不会改变。强类型的反面是弱打字; 值的类型可以在程序的生命周期中更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python