[英]Python3 how to declare global variables for “For” loop
因此,我试图在For循环中使用全局变量。 当不在函数“ def”中时,此代码可以正常工作,但是我需要这样做,因为我试图创建一个tkinter文件对话框,一旦选择文件,该对话框便会运行该代码,如果您可以帮助告诉我我在做什么错误或给我替代使用tkinter和“ def”的方法。
工作代码:
import os
import sqlite3
from datetime import datetime
# import datetime
import itertools
from dateutil.relativedelta import relativedelta
date = datetime.strptime('1991-01-01', '%Y-%m-%d')
f_path = 'C:/Users/Lewis Collins/Job_Code/data/cru_ts_2_10.1991-2000_cutdown.pre'
# db = sqlite3.connect('output.db')
# cursor = db.cursor()
# cursor.execute('CREATE TABLE Rainfall (Xref, Yref, Date, Value)')
# date = datetime.date(1991,1,1)
flag = 0
Xref = ''
Yref = ''
with open(f_path) as file_read:
for row in itertools.islice(file_read, 5, None):
# print(row)
if 'Grid-ref' in row:
Xref = row.split(',')[0].split('= ')[1]
Yref = row.split(',')[1]
date = datetime.strptime('1990-12-01', '%Y-%m-%d')
else:
for Value in row.split():
date = date + relativedelta(months=+1)
# print(Xref.strip(), Yref.strip(), date, Value)
# print(Xref, Yref, date, Value)
# db.commit()
# db.close()
编辑代码:
import tkinter
from datetime import datetime
from dateutil.relativedelta import relativedelta
import itertools
#date = datetime.strptime('1991-01-01', '%y-%m-%d')
# date = datetime.strptime('1991-01-01', '%Y-%m-%d')
f_path = 'C:/Users/Lewis Collins/Job_Code/data/cru_ts_2_10.1991-2000_cutdown.pre'
Xref = ''
Yref = ''
def read_date():
with open(f_path) as file_read:
for row in itertools.islice(file_read, 5, None):
if 'Grid-ref' in row:
Xref = row.split(',')[0].split('= ')[1]
Yref = row.split(',')[1]
date = datetime.strptime('1990-12-01', '%y-%m-%d')
else:
for Value in row.split():
date = date + relativedelta(months=+1)
print(Xref.strip(), Yref.strip(), date, Value)
建议不要使用使用全局变量的PS,除非它是最后的方法
像这样在您的函数中添加全局关键字
my_blobal_var
my_blobal_var2
def my_func():
global my_blobal_var
global my_blobal_var2
do_something()
对于你的情况
Xref = ''
Yref = ''
def read_date():
global Xref
global Yref
do_your_thing()
不要使用全局变量。 这几乎总是一个错误。 将参数传递给函数,并使其返回结果:
def read_date(path):
xref = ''
yref = ''
with open(path) as file_read:
for row in itertools.islice(file_read, 5, None):
if 'Grid-ref' in row:
xref = row.split(',')[0].split('= ')[1]
yref = row.split(',')[1]
date = datetime.strptime('1990-12-01', '%y-%m-%d')
else:
for Value in row.split():
date = date + relativedelta(months=+1)
print(Xref.strip(), Yref.strip(), date, Value)
return xref, yref, date, Value
这样, xref
, yref
,…是read_date
函数中的局部变量。 完成后,它将其值返回给调用方。 它还将文件路径作为参数,而不是将其绑定到全局变量。 您可以这样称呼它:
Xref, Yref, date, Value = read_date(f_path)
注意:从代码示例中尚不清楚实际有用的数据。 只需返回您关心的任何结果,并在调用函数时以相同顺序收集它们即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.