Python语言如何知道标识符的类型?

问题描述:

我最近面临这一问题..Python语言如何知道标识符的类型?

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如何区分这两种情况?

+1

从[数据模型](https://docs.python.org/2/reference/datamodel.html#objects-values-and-types)页面:每个对象都有一个标识,一个类型和一个值。 – 2014-09-03 07:42:37

+3

您还应该阅读:[大幅度提高您的Python:了解Python的执行模型](http://www.jeffknupp.com/blog/2013/02/14/drastically-improve-your-python-understanding-pythons-execution-模型/) – 2014-09-03 07:49:53

检查__add__方法的类。

真的会发生什么是对象的__add__方法被称为:

a + b真的a.__add__(b)

检查也diveintopython特殊方法名。

doc

int类型实现了numbers.Integral抽象基类。

同样,字符串是str类的实例。

在Python中,类型不与变量名称关联,但与值关联。名称'a'不包含任何类型信息,它的值是'1',它保存该信息(即它是'int'类)。

这是C和Java的契约,其中类型与变量名称相关联。

这正是咖喱式打字系统和教堂式系统的区别。

http://en.wikipedia.org/wiki/Simply_typed_lambda_calculus#Intrinsic_vs._extrinsic_interpretations

C和Java使用教会打字(变量名有类型),而Python和JavaScript中使用咖喱打字(值都有一个类型)。

+0

它如何知道'1'是int还是char? – user3909208 2014-09-03 18:05:25

+0

becuase 1是一个数字,'1'是一个字符串 - 编译器根据文本是否出现在引号中来构建正确的对象,当然如果这些字符是有效的数字。当你第一次执行脚本时,你看不到编译器的运行。 – 2014-09-03 19:17:23