parent/__init__.py
:
favorite_numbers = [1]
def my_favorite_numbers():
for num in favorite_numbers:
num
my_favorite_numbers()
from .child import *
my_favorite_numbers()
parent/child.py
:
然后我在父目录上创建了一个名为tst.py
的文件:
import parent
所以目录结构如下:
parent (directory)
__init__.py (file)
child.py (file)
tst.py (file)
我在执行时得到了这个错误:
NameError: name 'favorite_numbers' is not defined
如何在中为收藏夹编号添加值儿童.py因此,当我执行my_favorite_numbers()函数时,我得到1和7。在
在Python中,每个模块都有自己独立的全局变量。这实际上是模块的全部要点(与C预处理器样式的文本插入相反)。
当您执行
from .child import *
操作时,它将导入.child
,然后将其所有全局变量复制到当前模块的全局变量中。它们仍然是独立的模块,有自己的全局变量。如果要在不同模块中的代码之间传递值,则可能需要将该代码包装在函数中,然后将这些值作为函数参数和返回值传递。例如:
parent/__init__.py
:
^{pr2}$parent/child.py
:实际上,除了初始化(定义函数和类、创建常量和其他单例函数等)之外,您几乎总是希望在函数中包装任何代码。当您
import
一个模块(包括from … import
)时,它只在第一次运行其顶层代码。如果您再次import
,那么模块对象已经存在于内存中(在sys.modules
中),因此Python将只使用该对象,而不是再次运行代码来构建它。如果您真的想将一个值推送到另一个模块的命名空间中,可以,但必须显式地执行。这意味着您必须通过导入模块对象,而不仅仅是从导入模块对象:
但这绝不是个好主意。
你跑过吗设置.py或者一种“建立”你的图书馆的方法?
我会创造一个设置.py文件并可能在开发模式下运行它。Python setup.py develop vs install
相关问题 更多 >
编程相关推荐