Python如何从Double告诉Int

时间:2018-10-30 18:04:25

标签: python types compiler-construction interpreter

因此,在有关装配的演讲幻灯片中,我们有:

  

C,A和B的高级语言数据类型确定正确的   几种选择(整数,浮点)中使用的电路   执行“ +”操作

现在在像Python这样的语言中,我没有指定变量的类型。我想知道这种语言是如何编译(解释,我认为它是做什么的)组装成汇编并选择正确的电路的?

谢谢

3 个答案:

答案 0 :(得分:1)

在解释器级别,很容易分辨出整数(34),浮点数(34.24)和字符串(“三十四”)之间的区别。类型的完整列表可以在https://docs.python.org/3/library/stdtypes.html看到。

一旦知道类型,就很容易知道需要什么操作。每个类都定义了一个单独的函数(__add__,由解释器(用C为标准Python编写)进行运算。 C是键入的,并且(比较)容易将编译器翻译为机器代码。

答案 1 :(得分:1)

每个Python变量都是对对象的引用。该对象包括变量的类型信息。例如,当我们反复“动态”重新分配x的值和类型时,只需经历几种可能性即可:

for x in [1, 1.0, "1", [1]]:
    print(x, type(x))

输出:

1 <class 'int'>
1.0 <class 'float'>
1 <class 'str'>
[1] <class 'list'>

如果您想知道Python如何分辨1是一个整型而1.0是一个浮点型,那么从输入字符串可以明显看出。语言处理器通常包含可以区分语言令牌的令牌生成器和在语言语法内解释这些令牌的另一个模块。 int和float对象具有不同的令牌格式……字符串,标点,标识符和任何其他语言元素也是如此。

如果您想了解更多详细信息,请研究如何解析计算机语言:大多数技术适用于大多数语言。

答案 2 :(得分:0)

现在在您的帖子下方评论,变量在Python中没有类型。价值观就是这样。

当您键入以下内容时,如何确定整数vs浮点数:

x = 1.5
y = 2

这是在解析阶段确定的。编译和解释语言实际上是以相同的方式开始的。

将代码发送到解释器/编译器的一般流程如下:

[source code] --> lexical analyzer --> [tokens] --> parser --> [abstract syntax tree] -->

解析器步骤检查诸如“ x”,“ =”,“ 1.5”之类的标记,并寻找指示不同类型的文字(如int,float和字符串)的模式。当实际的解释器/编译器获取抽象语法树(程序的树表示)时,它已经知道x(1.5)中存储的值是浮点数。

所以要清楚一点,过程的这一部分在概念上对于解释器和编译器是相同的。