[英]Using the result from part of a python function and store in variable outside function
In my program I am calling a function that imports.csv data into a treeview
using tkinter
and csv
module. 僅在使用Import
按鈕時才調用 Function。 import
按鈕鏈接到 function select_input_file
。 function 按預期工作,csv 數據導入我的treeview
沒有任何問題。 從這里我想將一些 function 結果存儲到 function 之外的variables
中。 例如input_file_path
只有在調用 function 並導入文件時才會包含一個值。 還將數據導入Ro Number, Rego Number
列。 我曾嘗試使用return()
但它會阻止 function 繼續運行。 我也閱讀了yield
,但通過文檔我不確定這是否是我最好的選擇。 我認為一個解決方案可能是使用return()
然后for in rdr:
在每次返回之后select_input_file
function 繼續但我確定有更好的方法嗎? 我已經將代碼削減到我認為必要的程度。
import tkinter as tk
from tkinter import *
import tkinter.ttk as tkrttk
import csv
root = tk.Tk()
treetime = tkrttk.Treeview(root)
treetime['columns'] = ("Column2", "Column3", "Column4", "Column5",
"Column6", "Column7", "Column8", "Column9", "Column10", "Column11")
def select_input_file():
input_file_path = filedialog.askopenfilename(
filetypes=(("CSV files", "*.csv"),))
with open(input_file_path) as csv_file:
rdr = csv.DictReader(csv_file)
for row in rdr:
RoNumber = row['Ro Number']
DateIn = row['Date In']
TimeIn = row['Time In']
TimeOut = row['Time Out']
RegoNumber = row['Rego Number']
CustomerName = row['Customer Name']
VehicleMake = row['Vehicle Make']
VehicleModel = row['Vehicle Model']
JobDescription = row['Job Description']
CurrentStatus = row['Current Status']
treetime.insert("", 0, values=(RoNumber, DateIn, TimeIn, TimeOut, RegoNumber,
CustomerName, VehicleMake, VehicleModel, JobDescription, CurrentStatus))
menubar=Menu(root)
filemenu=Menu(menubar, tearoff=0)
filemenu.add_command(label="Import", command=select_input_file)
root.mainloop()
對於您的具體問題:您無法return
並繼續在 function 中執行。 您可以使用yield
來獲得這種效果,但我認為它會濫用語義,並且可能會讓您在未來感到頭疼。 您可以return
不止一件事:
def foo():
return "Spam", 42
def bar():
name, answer = foo()
這將允許您將(例如)從文件中選擇的文件名和數據返回給調用 function。
更一般的評論:函數通常應該做一件事。 這使得它們更容易測試(目的很明確)並且更容易修改(如果有副作用的話)。 現在您的 function 正在獲取用戶輸入(文件名),加載和解析文件內容,並更新控件。 您可能希望擁有單獨的函數來執行這些不同的操作,並且只需通過單擊“導入”時調用的簡短 function 將其組合在一起。 您最初的問題也可能更容易以這種方式解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.