簡體   English   中英

Python循環變量名稱

[英]Python loop variable names

我不確定我要做什么,所以我發現很難找到以下答案...

我正在刪除許多tkinter條目小部件的內容。 我有四行看起來可以用循環替換為一行。 我試過了 ...

for x in range(1, 5):
    self.entryplot_valx.delete(0, tk.END)

但我不知道該如何輸入...下面是我的代碼-對於這個問題的愚蠢表示歉意

    self.entryplot_val1.delete(0, tk.END)
    self.entryplot_val2.delete(0, tk.END)
    self.entryplot_val3.delete(0, tk.END)
    self.entryplot_val4.delete(0, tk.END)

您可以通過將循環迭代更改為以下四個條目的元組來完成此工作:

entries = (self.entryplot_val1,
           self.entryplot_val2,
           self.entryplot_val3,
           self.entryplot_val4)
for x in entries:
    x.delete(0, tk.END)

由於您不想每次都創建此元組,因此將其移至對象初始化中:

def __init__(self):
    # assuming you have a setup like the following
    master = Tk()
    self.entryplot_val1 = Entry(master)
    self.entryplot_val2 = Entry(master)
    self.entryplot_val3 = Entry(master)
    self.entryplot_val4 = Entry(master)
    # initialize your tuple to use in your for loop
    self.entries = (self.entryplot_val1,
                    self.entryplot_val2,
                    self.entryplot_val3,
                    self.entryplot_val4)
    # some further setup for entries
    self.entryplot_val1.pack()
    self.entryplot_val2.pack()
    self.entryplot_val3.pack()
    self.entryplot_val4.pack()

然后,您可以進一步簡化為:

def __init__(self):
    # assuming you have a setup like the following
    master = Tk()
    self.entries = (Entry(master), Entry(master), Entry(master), Entry(master))
    # some further setup for entries
    for x in self.entries:
        x.pack()

然后,您可以在類代碼中其他地方使用最后一個示例形式的循環。

由於您刪除了條目的先前標識符,因此需要更改代碼以在使用新元組的任何地方使用它們。 即,改變的引用self.entryplot_val1self.entries[0] self.entryplot_val2self.entries[1]等。

可以解決此問題,將屬性名稱創建為字符串並使用getattr(obj, attrname) ,即:

for x in range(1, 5):
    attrname = "entryplot_val{}".format(x)
    getattr(self, attrname).delete(0, tk.END)

但是實際上,當您發現自己使用“ var1”,“ var2”(...)“ varX”命名方案時,您可能真的想要一個列表。

您可以像這樣使用get_attr()

for x in range(1, 5):
    get_attr(self, "entryplot_val{}".format(x)).delete(0, tk.END)

請參閱文檔的這一部分

您可以使用字符串獲取變量名稱。

for x in range(1, 5):
    attr_name = f'entryplot_val{x}'
    getattr(self, attr).delete(0, tk.END)

暫無
暫無

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

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