2024-10-01 09:16:16 发布
网友
我可以从同名函数调用全局函数吗?在
例如:
def sorted(services): return {sorted}(services, key=lambda s: s.sortkey())
我指的是全局排序函数。 有办法吗? 然后我想用模块名调用我的函数:service.sorted(services)
service.sorted(services)
我希望使用相同的名称,因为它与全局函数的作用相同,只是它添加了一个默认参数。在
在定义同名的新函数之前,存储原始函数引用。在
original_sorted = sorted def sorted(services): return original_sorted(services, key=lambda s: s.sortkey())
对于像^{}这样的内置函数,可以使用^{} module(在python3.x中,^{} module)访问该函数:
但是,这两种影子函数都是不推荐的。如果可能,请选择其他名称。在
Python的名称解析方案有时被称为LEGB规则,这意味着当您在函数中使用非限定名称时,Python最多会搜索四个作用域-首先本地(L)作用域,然后是任何封闭的(E)defs和lambdas的局部作用域,然后是全局(G)作用域,最后是内置(B)范围。(请注意,一旦找到匹配项,它将立即停止搜索)
LEGB
def
lambda
因此,当您在函数内部使用sorted时,解释器将其视为一个全局名称(您的函数名),因此您将拥有一个递归函数。如果您想访问内置的sorted,您需要为Python指定它。通过__builtin__模块(Python-2.x中的)和Python-3.x中的^{}(此模块提供对Python所有“内置”标识符的直接访问)
sorted
__builtin__
python 2:
import __builtin__ def sorted(services): return __builtin__.sorted(services, key=lambda s: s.sortkey())
Python3:
在定义同名的新函数之前,存储原始函数引用。在
对于像^{} 这样的内置函数,可以使用^{} module (在python3.x中,^{} module )访问该函数:
^{pr2}$但是,这两种影子函数都是不推荐的。如果可能,请选择其他名称。在
Python的名称解析方案有时被称为
LEGB
规则,这意味着当您在函数中使用非限定名称时,Python最多会搜索四个作用域-首先本地(L)作用域,然后是任何封闭的(E)def
s和lambda
s的局部作用域,然后是全局(G)作用域,最后是内置(B)范围。(请注意,一旦找到匹配项,它将立即停止搜索)因此,当您在函数内部使用} (此模块提供对Python所有“内置”标识符的直接访问)
sorted
时,解释器将其视为一个全局名称(您的函数名),因此您将拥有一个递归函数。如果您想访问内置的sorted
,您需要为Python指定它。通过__builtin__
模块(Python-2.x中的)和Python-3.x中的^{python 2:
Python3:
^{pr2}$相关问题 更多 >
编程相关推荐