Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python语言如何知道标识符的类型?_Python_Programming Languages - Fatal编程技术网

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)
  • 由于对象总是知道它们的类型,这是它们支持哪些操作的主要信息源,因此python可以正确处理
    i
    变量,而不管它是分配给
    1
    还是
    '1'
    (作为
    str


    静态语言如C++或java所做的事情与Python之类的动态语言有很大不同,正如您所料。简而言之,它们在编译时管理类型问题,而python在运行时管理类型问题。

    第页:每个对象都有一个标识,类型和值。您还应该阅读:它如何知道“1”是int或char?因为1是一个数字,“1”是一个字符串-编译器根据文本是否显示在引号中以及字符是否为有效数字生成正确的对象。但是,当您第一次执行脚本时,编译器运行时,您看不到它正在运行。