当前位置: 首页 > 面试题库 >

Python是强类型的吗?

海雪松
2023-03-14
问题内容

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

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

bob = 1
bob = "bob"

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

那么,Python是强类型语言还是弱类型语言?


问题答案:

Python是强大的动态类型。

  • 强类型意味着值的类型不会以意外的方式改变。仅包含数字的字符串不会神奇地变成数字,就像Perl中可能发生的那样。类型的每次更改都需要显式转换。
    动态类型意味着运行时对象(值)具有类型,而静态类型则是变量具有类型。
    至于你的例子

bob = 1
bob = "bob"

这是可行的,因为变量没有类型;它可以命名任何对象。之后bob=1,你会发现type(bob)返回int,但是之后bob="bob",它将返回str。(请注意,这type是一个常规函数,因此它将计算其参数,然后返回值的类型。)

与此相比,C的早期方言是弱类型的,静态类型的,因此指针和整数几乎可以互换。(现代ISO C在许多情况下都需要转换,但是默认情况下,我的编译器对此仍然宽容。)

我必须补充一点,强类型vs.弱类型键入更多是一个连续的过程,而不是布尔选择。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 strings

class Foo(object):
    def __add__(self, other):
        other = to_number(other)
        # now do the addition

(我知道的唯一完全强类型(也称为严格类型)的语言是Haskell,其中类型完全不相交,并且只能通过类型类控制重载。



 类似资料:
  • 当我点击我的颤振应用程序中的一个按钮时,我出现了一个错误。这里有人有解决方案吗?! 路线 争论 还有地图 完全错误 生成CategoryMalsScreen(脏,依赖项:[[U ModalScopeStatus],状态:[U CategoryMalsScreenState]时引发了以下错误:类型“String”不是类型“Map”的子类型 导致错误的相关小部件是:CategoryMalsScreen

  • 本文向大家介绍什么是强类型系统?相关面试题,主要包含被问及什么是强类型系统?时的应答技巧和注意事项,需要的朋友参考一下 答:RTTI:类型识别系统。  

  • 本文向大家介绍Windows Powershell 变量的类型和强类型,包括了Windows Powershell 变量的类型和强类型的使用技巧和注意事项,需要的朋友参考一下 变量可以自动存储任何Powershell能够识别的类型信息,可以通过$variable的GetType().Name查看和验证Powershell分配给变量的数据类型。 会给数据分配一个最佳的数据类型;如果一个整数超出了32

  • 问题内容: JavaScript中的类型强制到底是什么? 例如,使用代替? 问题答案: 类型强制意味着当一个运算符的操作数是不同类型时,其中一个将被转换为另一个操作数类型的“等效”值。例如,如果您这样做: 布尔操作数将被转换为整数:变为,变为1。然后将这两个值进行比较。 但是,如果您使用非转换比较运算符,则不会发生这种转换。当操作数为不同类型时,此运算符将返回,并且仅在它们属于相同类型时才比较这些

  • 问题内容: 也许作为我使用强类型语言(Java)的日子的残余,我经常发现自己正在编写函数,然后强制进行类型检查。例如: 我应该继续这样做吗?这样做/不这样做有什么好处? 问题答案: 别那样做。 使用“动态”语言(强类型化为值*,无类型化为变量,以及后期绑定)的要点是,您的函数可以是适当多态的,因为它们可以处理任何支持您接口的对象功能依赖于(“鸭式打字”)。 Python定义了许多通用协议(例如,可

  • 强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则