【问题标题】:Types in Dynamically Typed Languages [closed]动态类型语言中的类型
【发布时间】:2013-05-07 15:33:47
【问题描述】:

动态类型语言(即 Python)在运行时执行类型检查,因此变量或参数可以引用任何类型的值。 语言定义是否要求不键入变量和参数? 修改语言以使变量和参数具有类型是否有意义?

【问题讨论】:

  • 您的原始问题已关闭。您需要做的不仅仅是细微的措辞更改才能再次询问。
  • 大量语言都这样做:渐进式输入、动态类型语言的类型推断、合同,应有尽有。
  • 提问的方式有什么问题?

标签: types dynamic-typing


【解决方案1】:

除非像@jon-Skeet 这样的人优雅地保存,否则这个问题可能会被关闭。

到那时,我相信任何来自强类型编程背景的人都会争论至少指定类型的选项。但归根结底,该语言的创建者/修改者不喜欢打字的要求,以至于没有付出任何努力来允许指定类型的可能性。所以我不会指望它发生,即使它可能真的很有意义。

根据我的简短研究,python 似乎不允许指定类型。但是您可以使用 isinstance http://docs.python.org/library/functions.html#isinstance 来检查类型

现在作为个人意见,我说为什么不。如果相关语言的维护者/创建者能够以不影响效率/语言实际意图的方式来做到这一点,他们至少应该允许有兴趣添加指定类型的能力的人这样做。

【讨论】:

    【解决方案2】:

    您可以混合使用静态和动态类型;有很多语言可以做到这一点。

    在最简单的情况下,您将拥有一个类层次结构,其中包含以object 为根的所有类型(使用 Python 术语)。每个“无类型”变量都有object 类型,因此它可以保存任何变量。其他变量可能有更具体的类型,例如int

    一个实现仍然需要执行运行时类型检查,但它可以优化在编译时可以确定类型的检查。

    Cython 做了类似的事情,除了它将静态类型部分卸载到 C 编译器:

    def foo():
        cdef int i = 0  # statically typed variable
        ham = "spam"    # dynamically typed variable
    
        while i < 10:
            print(ham)
            i += 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多