首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python函数可以调用同名的全局函数吗?

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

Stack Overflow用户
提问于 2014-12-26 13:53:39
回答 2查看 1.8K关注 0票数 5

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

例如:

代码语言:javascript
复制
def sorted(services):
    return {sorted}(services, key=lambda s: s.sortkey())

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

我想使用相同的名称,因为它执行与全局函数相同的操作,只不过它添加了一个默认参数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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:

代码语言:javascript
复制
import __builtin__
def sorted(services):
    return __builtin__.sorted(services, key=lambda s: s.sortkey())

python 3:

代码语言:javascript
复制
import builtins
def sorted(services):
    return builtins.sorted(services, key=lambda s: s.sortkey())
票数 8
EN

Stack Overflow用户

发布于 2014-12-26 13:57:00

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

代码语言:javascript
复制
original_sorted = sorted

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

对于像sorted这样的内置函数,可以使用 module (在Python3.x, module中)访问函数:

代码语言:javascript
复制
import __builtin__

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

但是,这两种阴影内建函数都不推荐。如果可能的话,选择其他名称。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27658067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档