Почему функции из словаря на Python работают без их вызова
Я пишу программку для своих нужд на tkinter и питон. По нажатию на кнопку функция getParameters должна в цикле сравнить значение массива со словарем. И если какое-то значение массива, совпадет с ключём словаря, чтобы из словаря вызывалась функция по ключу. Но на деле программа работает так, что программа вызывает все функции какие есть в словаре без участия цикла. Подскажите, как исправить. Прошу не обращать внимания, что интерфейс программы куцый. Так сделано специально, чтобы суть проблемы было видно.
from tkinter import *
win2 = Tk()
def receive_of_word():
param = "55"
return param
def word(param):
x = 5
print(x)
return x
def word_2(param):
y = 10
print(y)
return y
def getParameters():
ex ={
"xx": word(receive_of_word()),
"yy": word_2(receive_of_word()),
}
a = ["xx", "zz"]
for i in a:
if i in ex:
ex[i]
win2.title('Программа')
win2.minsize(width = 600, height = 600)
win2.maxsize(width = 600, height = 600)
button2 = Button(win2, text = "Считать текст", command = getParameters, width = 20, height = 3, font = "Arial 8", bg = "#edf3fc", foreground = "#000000", activebackground = "#ffffff", relief = RAISED)
button2.place(relx = 0.35, rely = 0.56)
button2.bind()
mainloop()
Ответы (1 шт):
Так происходит потому, что в том месте, где вы объявляете словарь вы уже вызываете эти функции. Чтобы не вызывать функции, а куда-то передать, пишите их без скобок, просто названия. А там, где надо их вызывать - там уже пишите скобки. И ещё у вас аргумент param почему-то вообще не используется в функциях word и word_2, но в данном случае это не влияет на результат.
from tkinter import *
win2 = Tk()
def receive_of_word():
param = "55"
return param
def word(param):
x = 5
print(x)
return x
def word_2(param):
y = 10
print(y)
return y
def getParameters():
ex ={
"xx": (word,receive_of_word),
"yy": (word_2,receive_of_word),
}
a = ["xx", "zz"]
for i in a:
if i in ex:
f1,f2 = ex[i]
f1(f2())
win2.title('Программа')
win2.minsize(width = 600, height = 600)
win2.maxsize(width = 600, height = 600)
button2 = Button(win2, text = "Считать текст", command = getParameters, width = 20, height = 3, font = "Arial 8", bg = "#edf3fc", foreground = "#000000", activebackground = "#ffffff", relief = RAISED)
button2.place(relx = 0.35, rely = 0.56)
button2.bind()
mainloop()