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])