python的str()函数实际上不是一个函数?

Python's str() function not actually a function?

我的印象是像str(5)这样的函数在整数5上调用str函数。但当您在解释器中键入str时:

1
2
>>> str
<class 'str'>

所以str实际上是一个类,这使得类似if type(a) is str的代码更有意义。但是,为什么str在文档的"内置功能"下列出?这只是一个简单化吗?


把它列为函数有点简单,是的。但请记住,类是可调用的*—这就是创建类实例的方法!

如果它对您有帮助,可以将str(5)看作是从数字5构造一个字符串。

请注意,所有其他内置类型都以相同的方式存在:int()float()str()tuple()list()set()file()…它们都是类,但是可以调用它们来构造类的实例,并且通常接受另一个类型的实例作为参数(如果适用)。

*:至少大多数时候。


str(5)实际上在str类上调用__call__()函数:

1
2
3
4
>>> str(5)
'5'
>>> str.__call__(5)
'5'

所以是的,str的行为就像函数和类(或者2.7之前版本中的类型)一样。


我认为查看它的简单方法是str()返回str类的一个实例。