在Python模块之间共享列表

时间:2017-11-08 16:57:22

标签: python python-3.x global-variables

SO反馈激励我创建一个包含常用例程的包,因此我不必再将功能复制/粘贴到新模块中。这很好用,但现在我遇到了一个问题。我的模块2函数f2应该从模块1调用,编号为n1。如果模块1中存在list1,则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能以某种方式使用list1中的module 1吗?

我在SO和教程网站上阅读有关全局变量共享的内容并立即了解,为什么我的global list1方法无法正常工作。我已经看到了将模块1绑定到模块2的建议,但是我想在将来的项目中使用模块2,所以我不知道这些模块的名称。我已经看过线程和多处理的建议,但作为一个Python新手,我并不了解与我的问题的相关性。欢迎任何建议。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以直接将arg [0]传递给dosth函数来避免复制,也可以对代码进行一些更改

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

    return dosth(n, arg[0])