use*_*097 3 python namespaces function python-3.x python-internals
我可以从具有相同名称的函数调用全局函数吗?
例如:
def sorted(services):
return {sorted}(services, key=lambda s: s.sortkey())
Run Code Online (Sandbox Code Playgroud)
通过{sorted}我的意思是,全球排序功能.有没有办法做到这一点?然后我想用模块名称调用我的函数: service.sorted(services)
我想使用相同的名称,因为它与全局函数的作用相同,只是它添加了一个默认参数.
Python的名称解析方案(有时称为“ LEGB规则”)意味着,当您在函数内使用不合格的名称时,Python最多搜索四个范围- 首先是本地(L)范围,然后是任何封闭的(E)的本地范围defs和lambdas,然后是全局(G)范围,最后是内置(B)范围。(请注意,一旦找到匹配项,它将立即停止搜索)
因此,当您sorted在函数内部使用时,解释器会将其视为全局名称(您的函数名称),因此您将拥有递归函数。如果要访问内置函数,则sorted需要为Python指定。按__builtin__模块(在Python-2.x中)和builtins在Python-3.x中(此模块可直接访问Python的所有“内置”标识符)
蟒蛇2:
import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())
Run Code Online (Sandbox Code Playgroud)
的Python 3:
import builtins
def sorted(services):
return builtins.sorted(services, key=lambda s: s.sortkey())
Run Code Online (Sandbox Code Playgroud)
在定义具有相同名称的新功能之前,请存储原始功能参考.
original_sorted = sorted
def sorted(services):
return original_sorted(services, key=lambda s: s.sortkey())
Run Code Online (Sandbox Code Playgroud)
对于内置函数sorted,您可以使用__builtin__模块访问该函数(在Python 3.x中,builtins模块):
import __builtin__
def sorted(services):
return __builtin__.sorted(services, key=lambda s: s.sortkey())
Run Code Online (Sandbox Code Playgroud)
但是,不建议使用哪种阴影内置功能.如果可能,请选择其他名称
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |