为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3242003 2021-06-02 14:58:23
类像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'>它们显示为内置类,但尝试访问它们会引发名称错误:>>> functionTraceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'function' is not defined>>> builtin_function_or_methodTraceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'builtin_function_or_method' is not defined有什么特别的function和builtin_function_or_method?
查看完整描述

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名称用于解析函数类型,那么您将使用什么语法来实际定义函数?


查看完整回答
反对 回复 2021-06-08
?
慕妹3146593

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'


查看完整回答
反对 回复 2021-06-08
  • 3 回答
  • 0 关注
  • 547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号