python函数可以调用同名的全局函数吗?

2024-10-01 09:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以从同名函数调用全局函数吗?在

例如:

def sorted(services):
    return {sorted}(services, key=lambda s: s.sortkey())

我指的是全局排序函数。 有办法吗? 然后我想用模块名调用我的函数:service.sorted(services)

我希望使用相同的名称,因为它与全局函数的作用相同,只是它添加了一个默认参数。在


Tags: 模块lambdakey函数名称return排序def
2条回答

在定义同名的新函数之前,存储原始函数引用。在

original_sorted = sorted

def sorted(services):
    return original_sorted(services, key=lambda s: s.sortkey())

对于像^{}这样的内置函数,可以使用^{} module(在python3.x中,^{} module)访问该函数:

^{pr2}$

但是,这两种影子函数都是不推荐的。如果可能,请选择其他名称。在

Python的名称解析方案有时被称为LEGB规则,这意味着当您在函数中使用非限定名称时,Python最多会搜索四个作用域-首先本地(L)作用域,然后是任何封闭的(E)defs和lambdas的局部作用域,然后是全局(G)作用域,最后是内置(B)范围。(请注意,一旦找到匹配项,它将立即停止搜索)

因此,当您在函数内部使用sorted时,解释器将其视为一个全局名称(您的函数名),因此您将拥有一个递归函数。如果您想访问内置的sorted,您需要为Python指定它。通过__builtin__模块(Python-2.x中的)和Python-3.x中的^{}(此模块提供对Python所有“内置”标识符的直接访问)


python 2:

import __builtin__
def sorted(services):
    return __builtin__.sorted(services, key=lambda s: s.sortkey())

Python3:

^{pr2}$

相关问题 更多 >