【问题标题】:All possible types of a variable in pythonpython中所有可能的变量类型
【发布时间】:2012-01-23 19:13:25
【问题描述】:

我们如何知道变量的所有可能类型?考虑以下示例,

n = int(raw_input())

if n<50:
        a = 5
elif n<100:
         a = 6.8
else:
         a = 'abc'

print type(a)

但是,它会根据 n 的值将输出作为“int”或“float”或“str”...

我们不能拥有所有可能的变量类型吗?例如,上面应该给出类似的输出:

{int,float,str}

【问题讨论】:

  • 第一。你需要一个更好的英语拼写检查器。你的问题很难阅读。其次,Python 有无数种类型(因为可以通过class 定义新类型。)您想了解哪些您无法从阅读中学到的代码?
  • 作为非母语人士,由于存在大量缩写、拼写错误和多余的标点符号,我无法阅读此问题。你能把这些(例如Btabv)写出来吗?谢谢!
  • Python 是一种动态的鸭式编程语言。一般来说,这意味着行为比类型更重要。这也意味着变量可以是 any 类型。但是,在这种情况下,您编写了生成a 的代码,因此您知道a 的类型。没有语言功能静态分析来确定a 可以采用哪些值(以及因此哪些类型);你必须跟踪它。
  • 您的要求无法完成,jcollado 是对的,python 中的a 甚至不是变量,而只是其值的“标签”。这个概念在Code Like a Pythonista: Idiomatic Python 中得到了很好的解释。

标签: python variables variable-types


【解决方案1】:

您无法在运行时确定这一点,因为变量的类型取决于执行路径。据我所知,也没有静态分析工具可以做到这一点。

【讨论】:

    【解决方案2】:

    您必须枚举 Python 解释器已知的所有类型。我想这是可能的,但它本质上是没有意义的,因为有这么多的类型。

    Python 是一种动态类型语言,因此它没有与 C 等静态类型语言相同的变量。在您的 sn-p 中,a 只是一个绑定到对象的名称。该对象可以是 Python 解释器已知的任何类型。

    在使用动态类型语言进行编程并提出诸如此对象是什么类型?之类的问题时,思维方式存在根本差异。相反,最好提出以下形式的问题,此对象支持哪些操作?这种编程方法称为duck typing

    【讨论】:

      【解决方案3】:

      我认为这里的底线应该是python中的变量根本没有任何类型。变量只是引用它们被分配到的对象的标签。真正拥有类型的是对象本身。

      除此之外,鉴于可以将任何类型的对象分配给变量,变量引用的对象的可能类型的数量与您可以在语言中创建的可能类型的数量相同取决于硬件约束,几乎是一个未绑定的数字。

      【讨论】:

        【解决方案4】:

        我们不能拥有所有可能的变量类型吗?

        不,因为 Python 中的变量没有类型; 价值观

        当您编写type(a) 时,您并没有检查名为a 的变量的类型;您正在检查名称 a 所指的事物的类型(也可能碰巧有其他名称)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-15
          • 2017-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多