type(object)
返回对象的类型。
>>> type(__builtins__)
<type 'module'>
>>> name = type(__builtins__)
>>> type(name)
<type 'type'>
>>> name
<type 'module'>
>>> name('my_module')
<module 'my_module' (built-in)>
>>> name('xyz')
<module 'xyz' (built-in)>
>>>
在此语法中,
my_module = type(__builtins__)('my_module')
type(__builtins__)
应返回以('my_module')
为参数的可调用对象。 type(object)
返回可调用对象?
如何理解这是做什么的?
答案 0 :(得分:3)
type()函数返回对象的类。在type(__builtins__)
的情况下,它返回模块类型。模块的语义详见:https://docs.python.org/3/library/stdtypes.html#modules
CPython的源代码在Objects / moduleobject.c :: module_init()中有这个:
static char *kwlist[] = {"name", "doc", NULL};
PyObject *dict, *name = Py_None, *doc = Py_None;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|O:module.__init__",
kwlist, &name, &doc))
这意味着您可以使用模块的 name 作为必需参数调用(实例化)模块对象,并将docstring作为可选参数。
答案 1 :(得分:1)
让我们来看看一些例子:
>>> type(int)
<class 'type'>
因此,由于type(int)
会返回type
,因此会显示
>>> type(int)(12)
<class 'int'>
自
>>> type(12)
<class 'int'>
更重要的是:
>>> (type(int)(12) == type(12)) and (type(int)(12) is type(12))
True
现在,如果您改为:
>>> type(int())
<class 'int'>
这也是预期的。
>>> (int() == 0) and (int() is 0)
True
和
>>> (type(int()) = type(0)) and (type(int()) is type(0))
True
所以,把事情放在一起:
int
是type
int()
是int
另一个例子:
>>> type(str())
<class 'str'>
这意味着
>>> (type(str())() == '') and (type(str())() is '')
True
因此,它的行为就像一个字符串对象:
>>> type(str())().join(['Hello', ', World!'])
'Hello, World!'
我觉得我可能会让它看起来比实际上复杂得多......它不是!
type()
返回一个对象的类。所以:
type(12)
只是一种写作int
type(12)(12)
只是一种写作int(12)
所以,&#34;是的!&#34;,type()
返回一个可调用的。但考虑到这一点(来自official docs)
类类型(对象)
使用一个参数,返回对象的类型。返回值是一个类型对象,通常与object .__ class __。
返回的对象相同