【发布时间】:2018-04-21 11:30:08
【问题描述】:
所以反馈促使我创建一个包含常用例程的包,因此我不必再将函数复制/粘贴到新模块中。这很好用,但现在我遇到了一个问题。我的模块 2 函数 f2 应该从模块 1 调用,编号为 n1。如果list1存在于模块1中,f2使用它来分析n1,否则它必须从头开始创建list2进行分析。到目前为止,我的方法是使用可选参数。
module1.py
from standardpackage.module2 import f2
list1 = [1, 2, 3]
n = 1
a = f2(n, list1) #works with existing list1
b = f2(n) #works without list1
module2.py
def f2(n, *arg):
if arg:
list2 = arg[0] #uses list1
else:
list2 = [3, 2, 1] #uses its own list
res = dosth(n, list2) #code executed within module2
return res
这种方法确实,它应该做的,但恕我直言,它看起来并不聪明。我从经验中知道,list1 可能很长,f2() 可能会被调用数百万次。每次都创建list1的副本,调用f2(),似乎浪费时间和内存空间。
我的问题是:module 2 能否以某种方式使用来自module 1 的list1?
我在 SO 和教程网站上阅读了有关全局变量共享的内容,现在明白了为什么我的 global list1 方法不起作用。我看到了将模块 1 绑定到模块 2 的建议,但我想在以后的项目中使用模块 2,所以我不知道这些模块的名称。我已经看到有关线程和多处理的建议,但作为 Python 新手,我不明白与我的问题的相关性。欢迎任何建议。谢谢。
【问题讨论】:
-
您可以直接将
arg[0]传递给dosth函数,而不是将arg[0] 复制到list2 中
标签: python python-3.x global-variables