【问题标题】:difference between __all__ and from bar import * in __init__.py in package__all__ 和 from bar import * in __init__.py in package 的区别
【发布时间】:2018-07-10 02:04:48
【问题描述】:

有人可以告诉我在我的包裹中的__init__.py 中使用这两者有什么区别吗?哪个更好用?

__all__ = ['functions']

from functions import *

【问题讨论】:

  • 开始here
  • 这两行做了两件不同的事情:设置__all__ 定义了在使用from … import * 语法从该模块导入时将导入哪些成员。
  • @poke 所以说我的结构是 main.py this_pkg/ _init.py_ myfile.py (里面有 myfunctn)和我的 'init.py' 我会放 'all = ['myfile.py']' 然后在 main.py 我会放 'from this_pkg import *' 然后我应该可以在 main.py 'myfunctn(myarg)' 中说,但我不能

标签: python import module package init


【解决方案1】:

脚本 bar__init__.py 中可能的两个语句的区别在于 bar 下的子包或模块导入的范围。如果包栏包含子包命名函数,则声明

从函数导入 *

在bar__init__.py中会将functions子包导入到bar包的作用域中,可以通过引用访问

bar.functions

在导入 bar 的 Python 代码中。如果 bar__init__.py 包含代码

所有 = [功能]

然后是包含代码的 Python 代码

从栏导入 *

将子包定义为函数(不引用bar)

两种方法都可以引用子包函数的内容,只是语法不同。

【讨论】:

    【解决方案2】:
    print(len(globals()))
    import sys
    print(len(globals()))
    from sys import *
    print(len(globals()))
    

    输出:

    8
    9
    67
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      相关资源
      最近更新 更多