python函数可以调用具有相同名称的全局函数吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数可以调用具有相同名称的全局函数吗?相关的知识,希望对你有一定的参考价值。
我可以从具有相同名称的函数调用全局函数吗?
例如:
def sorted(services):
return {sorted}(services, key=lambda s: s.sortkey())
通过{sorted}
我的意思是全局排序函数。有没有办法做到这一点?然后我想用模块名称调用我的函数:service.sorted(services)
我想使用相同的名称,因为它与全局函数的作用相同,只是它添加了一个默认参数。
Python的名称解析方案有时被称为LEGB
规则,暗示当您在函数内使用非限定名称时,Python最多搜索四个范围 - 首先是本地(L)范围,然后是任何封闭的本地范围(E )def
s和lambda
s,然后是全局(G)范围,最后是内置(B)范围。 (请注意,它会在找到匹配后立即停止搜索)
因此,当您在函数内部使用sorted
时,解释器会将其视为全局名称(您的函数名称),因此您将拥有递归函数。如果你想访问内置的sorted
,你需要为Python指定。通过__builtin__
模块(在Python-2.x中)和builtins
在Python-3.x中(此模块提供对Python的所有“内置”标识符的直接访问)
python 2:
import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())
python 3:
import builtins
def sorted(services):
return builtins.sorted(services, key=lambda s: s.sortkey())
在定义具有相同名称的新功能之前,请存储原始功能参考。
original_sorted = sorted
def sorted(services):
return original_sorted(services, key=lambda s: s.sortkey())
对于像sorted
这样的内置函数,你可以使用__builtin__
module访问函数(在Python 3.x,builtins
module中):
import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())
但是,不建议使用哪种阴影内置功能。如果可能,请选择其他名称
以上是关于python函数可以调用具有相同名称的全局函数吗?的主要内容,如果未能解决你的问题,请参考以下文章
python Python函数装饰器,允许您重载具有相同名称的函数