【问题标题】:why python doesn't need type declaration for python, other way what are the adv. of not declaring type?为什么 python 不需要 python 的类型声明,其他方式是什么?不声明类型?
【发布时间】:2011-04-16 10:30:23
【问题描述】:

如果我们非常了解变量或参数的类型,为什么不声明它们呢?

我想知道为什么它不好或没有必要。
抱歉,我是 Python 新手(大约 1 年),在我使用 C、VB、VB.NET 和 C# 编程语言之前。

对于 Python,我希望在编译时能够捕获错误的参数类型。

我希望有一个 IDE 可以在设计时向我建议变量的每个属性。可能是我太微软化了,但变量类型声明对我来说似乎是基本的。

【问题讨论】:

    标签: python programming-languages


    【解决方案1】:

    这就是动态语言的本质。

    静态类型是 Java/C# 风格。 (甚至 C# 现在也可以使用 var 推断类型。)

    这是一种折衷:您正在用类型安全换取运行时的灵活性。

    【讨论】:

      【解决方案2】:

      我确定您知道+ 函数。那么,它是什么类型的呢?数字?好吧,它也适用于列表和字符串。它甚至适用于定义__add__ 的每个对象。或者在某些情况下,当一个对象定义__radd__

      所以很难判断这个函数的类型。但是 Python 甚至可以在运行时定义这些方法,例如通过描述符或元类。您甚至可以根据用户输入定义它们!

      因为 Python 是高度动态的,Python 编译器根本不可能在不执行程序的情况下找出任何东西的类型(文字除外)。所以即使你写了注解,你也一无所获,类型检查仍然会在运行时进行!

      【讨论】:

        【解决方案3】:

        Python 是strongly-typed,因此不需要声明变量的类型。 (出于显而易见的原因,您通常仍必须声明变量!)

        这样做的原因是,如果您尝试对不支持的类型执行操作,例如向字符串添加整数,则会引发异常:

        >>> foo = "Hello"
        >>> bar = 2
        >>> foo + bar
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: cannot concatenate 'str' and 'int' objects
        

        大多数其他语言的行为方式并非如此,因此可能会发生坏事。

        【讨论】:

        • Python 确实是强类型的,但这并没有使变量声明变得不必要(或必要)。它实际上是完全不相关的。
        • 声明一个变量确实很重要。我应该澄清一下,在声明变量时您没有声明对象的 type
        • “强类型”是一个定义非常薄弱的​​术语,IMO。不同的人用它来表示完全不同的事物。 “静态类型”与“动态类型”更有用,并且对术语的含义有更多共识。
        • 这真的取决于你是引用变量本身还是变量的值。 Python 中的变量是动态的(变量只是对对象的引用),而类型不是。
        • @JonSkeet - 值得注意的是,至少在许多人的定义中,强类型与弱类型以及静态与动态类型是两个不同的轴。虽然它们是相关的(都与打字有关),但它们具有相当多的正交性。我毫不怀疑您已经意识到这一点,但是您的评论可能会被某人读到,说这可以用来表示接近同一件事。
        【解决方案4】:

        Python 使用动态类型(准确地说是Duck Typing),因此您无需声明变量。这是 Python 开发人员选择的一种编程和风格方法。作为一种高级语言,这种方法符合 Python 代码易读的哲学。

        还有其他语言也遵循这种方法。 (PHP)。

        【讨论】:

        • 注意不要将鸭子类型(基于接口)与强类型对象混淆。它们是相关但又截然不同的范例。
        • 有很多动态类型的语言。在所有这些语言中,你只需要说出一种,即可能是互联网上最讨厌的语言?
        猜你喜欢
        • 2012-08-17
        • 2016-07-03
        • 2020-05-12
        • 2012-11-17
        • 2012-04-05
        • 2019-11-20
        • 2015-12-17
        • 2017-11-02
        • 2018-01-22
        相关资源
        最近更新 更多