Python语言如何知道标识符的类型?
我最近遇到了这个问题Python语言如何知道标识符的类型?,python,programming-languages,Python,Programming Languages,我最近遇到了这个问题 How does python identifies the type of an identifier? 比如说 a=5 b=6 c=a+b c的值是11 何处为 x="hello" y="world" z=x+y z的值是“helloworld” Python如何区分这两种情况?检查类的方法 真正发生的是调用对象的\uuuuu添加\uuuuu方法: a+b实际上是a.\uu添加\uuuu(b) 还要检查特殊方法名称 从: int类型实现numbers.Integr
How does python identifies the type of an identifier?
比如说
a=5
b=6
c=a+b
c的值是11
何处为
x="hello"
y="world"
z=x+y
z的值是“helloworld”
Python如何区分这两种情况?检查类的方法
真正发生的是调用对象的\uuuuu添加\uuuuu
方法:
a+b
实际上是a.\uu添加\uuuu(b)
还要检查特殊方法名称
从:
int类型实现numbers.Integral抽象基类
同样,字符串是
str
类的实例。在Python中,类型不与变量名关联,而是与值关联。名称“a”不包含任何类型信息,而是值“1”包含该信息(即它是一个“int”类)
这是C和Java的契约,其中类型与变量名相关联
这正是咖喱式打字系统和教堂式打字系统的区别
C和Java使用Church类型(变量名有一个类型),而Python和JavaScript使用Curry类型(值有一个类型)。Python解释器不识别标识符的类型。相反,它标识标识符引用的对象的类型。您声明的标识符或名称不包含对象,而是引用对象,正如前面的答案所指出的,这些对象包含关于它们自己的类型信息。这些python对象在C中实现为PyObject
结构,其中有一个字段PyObject*ob_type
指向它们的类型(也就是PyObject
)
在上面的背景下,下面是python运行脚本时发生的情况
i=1
:它从int
类型为数值1
创建一个对象i
绑定到刚才创建的int
对象。“绑定到”是指在全局字典中插入一个条目(您可以通过globals()
查看)i
执行的任何操作都将转发到@valjeanval42所解释的它所引用的对象(当前为int(1)
)i
变量,而不管它是分配给1
还是'1'
(作为str
)
静态语言如C++或java所做的事情与Python之类的动态语言有很大不同,正如您所料。简而言之,它们在编译时管理类型问题,而python在运行时管理类型问题。
第页:每个对象都有一个标识,类型和值。您还应该阅读:它如何知道“1”是int或char?因为1是一个数字,“1”是一个字符串-编译器根据文本是否显示在引号中以及字符是否为有效数字生成正确的对象。但是,当您第一次执行脚本时,编译器运行时,您看不到它正在运行。