python - 在 Python 中指定函数别名
问题描述
在 Python 中至少有两种不同的方法来指定函数的别名。给定一个函数:
def fun1(a, b=5):
return a+b
你可以像这样创建一个别名:
def fun2(*args, **kwargs):
return fun1(*args, **kwargs)
或像这样:
fun3 = fun1
第一个在内存中创建一个新函数,而第二个只是指向原始函数的指针。使用其中一个有什么好处吗?
解决方案
第一个函数在 Python 中经常用于装饰其他函数。这是一个“代理功能”。
装饰师
返回另一个函数的函数,通常使用 @wrapper 语法作为函数转换应用。装饰器的常见示例是 classmethod() 和 staticmethod()。
装饰器语法只是语法糖,以下两个函数定义在语义上是等价的:
... f = staticmethod(f) @staticmethod def f(...): ...
类也存在相同的概念,但在那里不太常用。有关装饰器的更多信息,请参阅函数定义和类定义的文档。
这对于构建干净的代码非常有帮助。更多信息请访问https://docs.python.org/3/glossary.html#term-decorator
第二个只是将函数分配给某个地方,变量,对象或类属性等。通常用于 Monkey Patching
猴子补丁是程序在本地扩展或修改支持系统软件的一种方式(仅影响程序的运行实例)。
该术语的定义因使用它的社区而异。在 Ruby、Python 和许多其他动态编程语言中,monkey patch 一词仅指在运行时对类或模块的动态修改,其动机是为了修补现有的第三方代码作为解决错误或功能的方法不按自己的意愿行事。其他在运行时修改类的形式根据其不同的意图有不同的名称。例如,在 Zope 和 Plone 中,安全补丁通常使用动态类修改来交付,但它们被称为修补程序
推荐阅读
- javascript - 使用 JS 检查网站是否在 chrome 扩展中启动的最简单方法
- reactjs - 为什么 React 钩子可以有条件地与 throw 错误一起使用?
- google-chrome - 如何从 ADMX 文件中的 GP 英文名称中查找 GP 名称
- php - 订单创建时差
- javascript - 无法使用 Javascript 将 cookie 路径设置为根目录
- c - 使用 NULL 的 if/else 逻辑
- solidity - 为什么我从复制粘贴并尝试部署的合同中收到“应支付调用的函数”错误?
- python - AWSIOT: RuntimeError: 1033 (AWS_IO_TLS_CTX_ERROR): 无法创建 tls 上下文
- django - 上传前向 Django (Wagtail) 管理员打开并验证文件
- reactjs - setRTLTextPlugin 不能被多次调用 - reactjs