2024-10-01 00:19:43 发布
网友
当然,你提到的文本对象携带(指针到;-)它们自己的类型,所以当一个名称绑定到该对象时,类型问题就不会出现——对象总是有一个类型,名称没有——只是将它委托给它所绑定的对象。在
在def increase(first, second):中没有“计算”—名称increase被绑定到一个函数对象,名称first和{}被记录为参数名,并在increase被调用时被绑定(很可能在不同点绑定到不同类型的对象)。在
def increase(first, second):
increase
first
所以假设主体是return first + second——对increase('foo', 'bar')的调用将很高兴地返回'foobar'(将加法委托给对象,在本例中是字符串),也许稍后对increase(23, 45)的调用也将同样愉快地返回68——同样,在调用点,将加法委托给绑定到这些名称的对象,在本例中是int。如果你用不兼容的类型调用,你会得到一个异常,因为委托的加法操作无法理解这种情况——没什么大不了的!在
return first + second
increase('foo', 'bar')
'foobar'
increase(23, 45)
68
Python是动态类型的:所有变量都可以引用任何类型的对象。id和name可以是任何东西,但实际对象的类型是int和{}。0是一个被解析为生成int对象的文本,而{}是一个生成{}对象的文本。许多对象类型没有文本,而是由可调用的(如frozenset-无法生成文本冻结集,必须调用frozenset)
id
name
int
0
frozenset
因此,不存在变量声明,因为您没有定义任何关于变量的内容。id = 0和{}只是赋值。在
id = 0
increase返回一个int,因为这就是您在其中返回的内容;Python中没有任何内容强制它不是任何其他对象。first和{}只有当你这样做的时候才是int。在
在某种程度上,对象共享一个公共接口。您可以对它们使用相同的运算符和函数,如果它们支持特定的操作,它就可以工作。这是一种常见的,推荐的技术,使用不同的类型,表现类似的互换;这称为duck typing。例如,如果某个对象采用file对象,则可以传递cStringIO.StringIO对象,该对象支持与文件相同的方法(如read和{}),但它是完全不同的类型。这有点像Java接口,但不需要任何正式的用法,您只需定义适当的方法。在
file
cStringIO.StringIO
read
Python使用duck类型方法-如果它走路、看起来和呱呱叫都像鸭子,那么它就是鸭子。如果您传入一个字符串,并尝试对其执行数值操作,则它将失败。在
看一下:http://en.wikipedia.org/wiki/Python_%28programming_language%29#Typing和http://en.wikipedia.org/wiki/Duck_typing
当然,你提到的文本对象携带(指针到;-)它们自己的类型,所以当一个名称绑定到该对象时,类型问题就不会出现——对象总是有一个类型,名称没有——只是将它委托给它所绑定的对象。在
在}被记录为参数名,并在
def increase(first, second):
中没有“计算”—名称increase
被绑定到一个函数对象,名称first
和{increase
被调用时被绑定(很可能在不同点绑定到不同类型的对象)。在所以假设主体是
return first + second
——对increase('foo', 'bar')
的调用将很高兴地返回'foobar'
(将加法委托给对象,在本例中是字符串),也许稍后对increase(23, 45)
的调用也将同样愉快地返回68
——同样,在调用点,将加法委托给绑定到这些名称的对象,在本例中是int。如果你用不兼容的类型调用,你会得到一个异常,因为委托的加法操作无法理解这种情况——没什么大不了的!在Python是动态类型的:所有变量都可以引用任何类型的对象。}。}是一个生成{}对象的文本。许多对象类型没有文本,而是由可调用的(如
id
和name
可以是任何东西,但实际对象的类型是int
和{0
是一个被解析为生成int
对象的文本,而{frozenset
-无法生成文本冻结集,必须调用frozenset
)因此,不存在变量声明,因为您没有定义任何关于变量的内容。}只是赋值。在
id = 0
和{increase
返回一个int
,因为这就是您在其中返回的内容;Python中没有任何内容强制它不是任何其他对象。first
和{在某种程度上,对象共享一个公共接口。您可以对它们使用相同的运算符和函数,如果它们支持特定的操作,它就可以工作。这是一种常见的,推荐的技术,使用不同的类型,表现类似的互换;这称为duck typing。例如,如果某个对象采用}),但它是完全不同的类型。这有点像Java接口,但不需要任何正式的用法,您只需定义适当的方法。在
file
对象,则可以传递cStringIO.StringIO
对象,该对象支持与文件相同的方法(如read
和{Python使用duck类型方法-如果它走路、看起来和呱呱叫都像鸭子,那么它就是鸭子。如果您传入一个字符串,并尝试对其执行数值操作,则它将失败。在
看一下:http://en.wikipedia.org/wiki/Python_%28programming_language%29#Typing和http://en.wikipedia.org/wiki/Duck_typing
相关问题 更多 >
编程相关推荐