在Python模块之间共享列表



SO的反馈促使我创建了一个包含常用例程的包,这样我就不必再将函数复制/粘贴到新模块中了。这很有效,但现在我遇到了一个问题。我的模块2函数f2应该是从编号为n1的模块1调用的。如果list1存在于模块1中,则f2使用它来分析n1,否则它必须从头开始创建list2来进行此分析。到目前为止,我的方法是使用可选的参数。

模块1.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

模块2.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函数来避免复制,还可以对代码进行一些更改

def f2(n, *arg):
if not arg:
list2 = [3, 2, 1]         
return dosth(n, list2)
return dosth(n, arg[0])

相关内容

  • 没有找到相关文章

最新更新