不能在python中使用文件之间的函数

时间:2017-12-03 07:15:54

标签: python

我有一个巨大的项目分成3个文件。我通常在使用另一个文件中的一个文件中的函数时没有问题,但这次我无法做到这一点。此外,我不太明白为什么我在文件之间传递的一个列表在传递出函数后就消失了。

文件: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后它会返回空。

更新:即使删除list1 = []文件中的new_code.py,代码仍然无法从settings.py调用函数foo。如果你想看一下这些文件: https://drive.google.com/file/d/1ZiTwl-DOPfZCrrrA1kBcBHh8c9AInFLI/view?usp=sharing>文件

更新:我将globals.py文件更改为

来自设置导入* def foo(嘿):    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()

这解决了问题,但我不明白为什么。

3 个答案:

答案 0 :(得分:1)

2个糟糕的想法:

  1. 使用globals作为模块名称,globals是内置函数的名称。
  2. 使用global声明。
  3. 如果要保留全局列表对象,最好将其包装到对象中。让它成为ref-type变量。

    更好的做法:

    在settings.py中

    class Settings(object):
        def __init__(self):
            self.items = []
    
    settings = Settings()
    
    你的new_code.py中的

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

答案 1 :(得分:0)

如果出现缩进错误,您应该使用文本编辑器的“渲染空白”功能来查找缩进问题

答案 2 :(得分:0)

new_code.pyglobals list1移到cool_funtion以上cool-function