簡體   English   中英

在Python模塊之間共享列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM