我可以从同名函数调用全局函数吗?
例如:
def sorted(services):
return {sorted}(services, key=lambda s: s.sortkey()){sorted}指的是全局排序函数。有办法这样做吗?然后,我想用模块名调用我的函数:service.sorted(services)
我想使用相同的名称,因为它执行与全局函数相同的操作,只不过它添加了一个默认参数。
发布于 2014-12-26 13:57:14
Python的名称解析方案(有时被称为LEGB规则)意味着当您在函数中使用非限定名时,Python搜索最多四个作用域--首先搜索局部(L)作用域,然后搜索任何包围(E) defs和lambdas的本地作用域,然后搜索全局(G)范围,最后搜索内置(B)作用域。(注意,一旦找到匹配项,就会停止搜索)
因此,当您在函数解释器中使用sorted时,将它看作是一个全局名称(函数名),因此您将有一个递归函数。如果您想要访问内置的sorted,您需要为Python指定它。__builtin__模块( Python-2.x中的)和Python-3.x中的builtins (该模块提供对所有内置的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())发布于 2014-12-26 13:57:00
在定义同名的新函数之前存储原始函数引用。
original_sorted = sorted
def sorted(services):
return original_sorted(services, key=lambda s: s.sortkey())对于像sorted这样的内置函数,可以使用 module (在Python3.x, module中)访问函数:
import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())但是,这两种阴影内建函数都不推荐。如果可能的话,选择其他名称。
https://stackoverflow.com/questions/27658067
复制相似问题