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新手,我并不了解与我的问题的相关性。欢迎任何建议。谢谢。
答案 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])