[英]how to use get function to pass an argument/parameter to a lambda function which is a value in the dictionary in python?
[英]How to pass a parameter in a lambda function in python?
我想设置一个对象的颜色,并且不想为每种颜色创建10个函数。 因此,我只想声明颜色并创建10个按钮和一个函数。 错误消息是:
<lambda>() missing 1 required positional argument: 'green'
编码:
from tkinter import *
green=["#5bd575","#55c76d"]
#different colors should follow here
root=Tk()
Btn=Button(text="Trigger lambda", command=lambda green: printfunction(green))
Btn.pack()
def printfunction(colorset):
print(colorset)
它不必是lambda函数,问题只是,如何单击按钮printfunction
用参数调用printfunction
?
可调用command
不带任何参数。 如果要将green
列表传递给printfunction
,只需省略参数 ,则lambda不需要它:
Btn=Button(text="Trigger lambda", command=lambda: printfunction(green))
现在,λ内部的green
表示全局。
如果您要做的printfunction
使用预定义的参数调用printfunction
,则可以使用functools.partial()
函数 ; 您将其传递给要调用的函数以及需要传递的所有参数,然后在调用其返回值时将完全执行该操作; 使用您指定的参数调用函数:
from functools import partial
Btn=Button(text="Trigger lambda", command=partial(printfunction, green))
Python非常动态,您可以在定义类后修改类或创建局部函数。 例:
class X:
# generic print function
def print_color(self, color):
pass
# dictionary with colors to support
COLORS = {'green': ["#5bd575","#55c76d"]}
# attach various print functions to class X
for name, value in COLORS.items():
def print_color_x(self, value=value):
self.print_color(value)
setattr(X, 'print_color_{}'.format(name), print_color_x)
请注意value=value
默认参数。 要在每次迭代中绑定值,必须使用此值。 如果没有它,则将在调用该函数时进行value
查找,从而给您带来有关丢失的全局value
错误或选择一个碰巧发现的全局value
错误,但找不到所需的值。 如果允许创建适当的成员函数而不仅仅是静态函数,则使用functools.partial()
可能会更干净。 请注意,文档中提到的示例纯Python实现允许创建成员函数,因此可以选择将其替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.