3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
您所看到的是函數(shù)類型的表示:
>>> from types import FunctionType
>>> repr(FunctionType)
"<class 'function'>"
這是用 def 或其他方式定義的函數(shù)的“類型”:
>>> def f():
... pass
...
>>> type(f) is FunctionType
True
>>> type(lambda: None) is FunctionType
True
您在表示中看到的字符串來自__name__每個(gè)對象的屬性:
>>> type(print).__name__
'builtin_function_or_method'
>>> FunctionType.__name__
'function'
“函數(shù)”本身不是語法,因?yàn)殒I入“def”更容易。
一個(gè)修辭問題:如果def名稱用于解析函數(shù)類型,那么您將使用什么語法來實(shí)際定義函數(shù)?

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
類和函數(shù)有一個(gè)固有的名稱:
>>> def foo():
... pass
...
>>> foo
<function foo at 0x10f951400>
>>> foo.__name__
'foo'
附加到對象的名稱與您用來訪問該對象的名稱無關(guān),但在定義函數(shù)(和類)時(shí),它們是相同的。
>>> bar = foo
>>> bar
<function foo at 0x10f951400>
你甚至可以去掉你用來訪問函數(shù)的變量,只要你在其他地方有一個(gè)引用:
>>> 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'
內(nèi)置函數(shù)類型是這樣的:沒有變量引用它,但它仍然存在,并且有一個(gè)__name__:
>>> def foo(): pass
...
>>> type(foo)
<class 'function'>
>>> type(foo).__name__
'function'
添加回答
舉報(bào)