我的项目目录中有一个名为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()语句之后函数的整个主体中有一个缩进。我不确定为什么当我将它粘贴在这篇文章中时它不会出现。
我对编程非常陌生,因此我正在就如何改进此代码提出建议。
提前致谢。
答案 0 :(得分:2)
“全局”变量并不是整个脚本范围内的全局变量。这不是PHP。
Python具有每个模块命名空间的所有结构。变量是模块范围的“全局”,声明了该函数。因此,当您导入函数并调用它时,它会创建可以functions.hd1
,functions.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