簡體   English   中英

Python3如何為“ For”循環聲明全局變量

[英]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

這樣, xrefyref ,…是read_date函數中的局部變量。 完成后,它將其值返回給調用方。 它還將文件路徑作為參數,而不是將其綁定到全局變量。 您可以這樣稱呼它:

Xref, Yref, date, Value = read_date(f_path)

注意:從代碼示例中尚不清楚實際有用的數據。 只需返回您關心的任何結果,並在調用函數時以相同順序收集它們即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM