2017-12-03 62 views
0

我有一個巨大的項目分成3個文件。我通常沒有問題使用另一個文件中的一個文件的功能,但這次我無法做到這一點。此外,我不太明白爲什麼我通過文件之間傳遞的列表中的一個列表在它離開函數後正在消失。不能使用Python中的文件之間的函數

文件:settings.py

list1 = [] 

文件:globals.py

from settings import * 
def foo(hey): 
    global list1 
    list1.append(hey) 

文件:new_code.py

from settings import * 
from globals import * 
def cool_function(): 
    global list1 
    list1 = [] 
    hey = "you" 
    foo(hey) 
    print (list1) 


cool_function() 

釷問題是我的代碼不能從globals.py調用foo。我在foo得到一個縮進錯誤。即使這個問題已經解決,我正在處理的實際項目list1會被追加到settings.py文件中,但是當我返回到cool_function後,它將返回爲空。

更新:即使在new_code.py文件中刪除list1 = []的代碼仍然是無法從settings.py調用函數foo。如果你想看看這裏的文件: https://drive.google.com/file/d/1ZiTwl-DOPfZCrrrA1kBcBHh8c9AInFLI/view?usp=sharing>文件

更新:我改變了globals.py文件

從設置導入* 高清富(嘿嘿): list1.append(哎)

而且new_code.py文件

from settings import * 
from globals import * 
global list1 
def cool_function(): 

    list1 = [] 
    hey = "you" 
    foo(hey) 
    print (list1) 


cool_function() 

這解決了這個問題,但我不明白爲什麼。

+0

使用進口*被認爲是不好的做法,採用進口FUNC1,FUNC2,FUNC3 –

回答

1

2個不好的想法:

  1. 使用globals爲模塊名,globals是一個內置函數的名稱。
  2. 使用global聲明。

如果你想保留一個全局列表對象,一個好的做法是把它包裝到一個對象。讓它成爲一個ref型變量。

一個更好的做法:

settings.py中

class Settings(object): 
    def __init__(self): 
     self.items = [] 

settings = Settings() 
在new_code

。潘岳:

from settings import settings 

def cool_function(): 
    settings.items.append('something') 
    return settings.items 

print(cool_function()) 
+0

謝謝,但你可以提供不使用類的解決方案?我不喜歡上課,也不喜歡上課。在我看來,他們只是讓事情變得更加複雜。 –

+0

@fredrussell不必使用一個類來做到這一點。實際上,如果你在new_code.py中刪除'list1 = []''行,你的代碼將會很好。 –

0

如果你得到一個縮進錯誤,你應該用你的文本編輯器的「渲染空白」功能來查找壓痕問題

+0

這不是縮進錯誤。代碼無法從另一個文件調用函數,並且出於這個原因認爲它是一個縮進錯誤,即使它不是。 –

0

new_code.py移動globals list1cool_funtion以上cool-function

相關問題