Python闭包是否是`__all__`的一个很好的替代品?

Python闭包是否是`__all__`的一个很好的替代品?,第1张

概述使用闭包而不是__all__来限制 Python模块公开的名称是一个好主意吗?这样可以防止程序员意外地为模块使用错误的名称(import urllib; urllib.os.getlogin()),并避免将“from x import *”名称空间污染作为__all__. def _init_module(): global foo import bar def foo(): 使用闭包而不是__all__来限制 Python模块公开的名称是一个好主意吗?这样可以防止程序员意外地为模块使用错误的名称(import urllib; urllib.os.getlogin()),并避免将“from x import *”名称空间污染作为__all__.

def _init_module():   global foo   import bar   def foo():       return bar.baz.operation()   class Quux(bar.baz.Splort): pass_init_module(); del _init_module

与使用__all__的相同模块:

__all__ = ['foo']import bardef foo():    return bar.baz.operation()class Quux(bar.baz.Splort): pass

函数可以采用这种方式来避免污染模块名称空间:

def foo():    import bar    bar.baz.operation()

这对于希望帮助用户在交互式内省期间将其API与包和其他模块的API的使用区分开来的大型包可能会有所帮助.另一方面,也许IPython应该在选项卡完成期间简单地区分__all__中的名称,并且更多用户应该使用允许它们在文件之间跳转以查看每个名称的定义的IDE.

解决方法 我是编写代码的粉丝,它完全像脑子一样简单.

__all__是Python的一个特性,明确添加以解决限制模块可见的名称的问题.当您使用它时,人们立即了解您正在使用它做什么.

你的关闭技巧是非标准的,如果我遇到它,我不会立即理解它.你需要做一个很长的评论来解释它,然后你需要加入另一个长评论来解释为什么你这样做而不是使用__all__.

编辑:既然我对这个问题了解得更好,这里有一个替代答案.

在Python中,将私有名称作为模块中的下划线加前缀是一种很好的做法.如果您使用the_module_name import *,您将获得所有不以下划线开头的名称.因此,我更愿意看到正确使用初始下划线成语,而不是封闭技巧.

请注意,如果使用初始下划线名称,则甚至不需要使用__all__.

总结

以上是内存溢出为你收集整理的Python闭包是否是`__all__`的一个很好的替代品?全部内容,希望文章能够帮你解决Python闭包是否是`__all__`的一个很好的替代品?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存