2017-12-03 60 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

相关问题