为什么`function` 不是 Python 中的关键字?

类像str或type


>>> type("pear")

<class 'str'>

>>> type(str)

<class 'type'>

可以在 Python 中访问:


>>> str

<class 'str'>

>>> type

<class 'type'>

然而,类function和builtin_function_or_method不是。


>>> def foo(): pass

... 

>>> type(foo)

<class 'function'>

>>> type(print)

<class 'builtin_function_or_method'>

它们显示为内置类,但尝试访问它们会引发名称错误:


>>> function

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'function' is not defined

>>> builtin_function_or_method

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'builtin_function_or_method' is not defined

有什么特别的function和builtin_function_or_method?


慕妹3242003
浏览 548回答 3
3回答

炎炎设计

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

慕妹3146593

类和函数有一个固有的名称:>>> def foo():...&nbsp; &nbsp; &nbsp;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>>> fooTraceback (most recent call last):&nbsp; 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'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python