繁体   English   中英

如何在python中的lambda函数中传递参数?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM