3 回答

TA贡献1808条经验 获得超4个赞
您所看到的是函数类型的表示:
>>> from types import FunctionType
>>> repr(FunctionType)
"<class 'function'>"
这是用 def 或其他方式定义的函数的“类型”:
>>> def f():
... pass
...
>>> type(f) is FunctionType
True
>>> type(lambda: None) is FunctionType
True
您在表示中看到的字符串来自__name__每个对象的属性:
>>> type(print).__name__
'builtin_function_or_method'
>>> FunctionType.__name__
'function'
“函数”本身不是语法,因为键入“def”更容易。
一个修辞问题:如果def名称用于解析函数类型,那么您将使用什么语法来实际定义函数?

TA贡献1820条经验 获得超9个赞
类和函数有一个固有的名称:
>>> def foo():
... pass
...
>>> foo
<function foo at 0x10f951400>
>>> foo.__name__
'foo'
附加到对象的名称与您用来访问该对象的名称无关,但在定义函数(和类)时,它们是相同的。
>>> bar = foo
>>> bar
<function foo at 0x10f951400>
你甚至可以去掉你用来访问函数的变量,只要你在其他地方有一个引用:
>>> funcs = [foo]
>>> funcs[0]
<function foo at 0x10f951400>
>>> del foo
>>> foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> funcs[0]
<function foo at 0x10f951400>
>>> funcs[0].__name__
'foo'
内置函数类型是这样的:没有变量引用它,但它仍然存在,并且有一个__name__:
>>> def foo(): pass
...
>>> type(foo)
<class 'function'>
>>> type(foo).__name__
'function'
添加回答
举报