为了账号安全,请及时绑定邮箱和手机立即绑定

Python是强类型的吗?

Python是强类型的吗?

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


查看完整回答
反对 回复 2019-07-29
?
精慕HU

TA贡献1845条经验 获得超8个赞

您将'强类型''动态类型'混淆。

我无法1通过添加字符串来更改类型'12',但我可以选择存储在变量中的类型,并在程序运行时更改它。

与动态类型相反的是静态类型; 变量类型声明在程序的生命周期内不会改变。强类型的反面是弱打字; 的类型可以在程序的生命周期中更改。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 981 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信