[英]Sharing a list between Python modules
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
以某種方式使用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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.