导入时,Python函数无法正常工作,仅在本地定义时才能正常工作

时间:2017-09-30 21:29:31

标签: python function variables import global

我的项目目录中有一个名为functions.py的文件,其中包含一些简单的函数。

其中一个函数(load())应该创建全局变量,而不需要用户事先定义它们。

使用

从文件导入功能时
from functions import load

它无法正常工作,这意味着不会创建全局变量。

但是,当我复制粘贴函数来定义它而不是从文件导入时,它可以正常工作。这是完整的功能:

def load(cnv):

    global hd1, hd2, variables, datapoints
    hd1, hd2, variables, datapoints  = [], [], [], []

    o = open(cnv)
    r = o.readlines()
    o.close()

    for line in r:
        if not line:
            pass
        elif line.startswith('*'):
            hd1.append(line)
        elif line.startswith('#'):
            hd2.append(line)
            if line.startswith('# name'):
                line = line.split()
                variables.append(line[4])
        else:
            float_list = []
            line = line.split()
            for item in line:
                float_list.append(float(item))
            datapoints.append(float_list)

    datapoints = filter(None, datapoints)

    global df
    df = pd.DataFrame(datapoints, columns = variables)

顺便说一下,在def()语句之后函数的整个主体中有一个缩进。我不确定为什么当我将它粘贴在这篇文章中时它不会出现。

我对编程非常陌生,因此我正在就如何改进此代码提出建议。

提前致谢。

2 个答案:

答案 0 :(得分:2)

“全局”变量并不是整个脚本范围内的全局变量。这不是PHP。

Python具有每个模块命名空间的所有结构。变量是模块范围的“全局”,声明了该函数。因此,当您导入函数并调用它时,它会创建可以functions.hd1functions.hd2等方式访问的变量。

答案 1 :(得分:0)

这取决于你如何使用它。对于使用全局,您需要首先调用load函数来初始化变量,之后您可以使用package.variable来使用它。

请查看以下实施。

#functions.py
def load():
    global hd1
    hd1 = []

#test.py
import functions
functions.load()
functions.hd1.append('hey')
print functions.hd1

OR

#test.py
from functions import load
load()
from functions import *
hd1.append('hey')
print hd1