无名函数作为函数参数?

时间:2017-12-25 00:04:19

标签: python events

我正在编写一个涉及事件监听器的python脚本。基本思路是:

class Event:
    def __init__(self,callback):
        self.callback = callback

    def call(self,data):
        self.callback(data)

    def check(self,data);
        #Do some logic to see if this event should be called
        return True #Or false

class Event_Handler:
    def __init__(self):
        self.events = []

    def process_input(self,data):
        for event in self.events:
            if event.check(data):
                event.call(data)

    def create_event(self,callback):
        event = Event(callback)
        self.events.append(event)

handler = Event_Handler()

我现在可以通过以下方式添加事件:

def function_to_call(data):
    print('hello, this event just got called')
handler.create_event(function_to_call)

但是,这需要命名每个回调函数。这当然是可能的,但对我来说似乎没有必要。是否可以以任何方式在python中使用无名函数。所以像这样:

handler.create_event(
    def(data):
        print('hello, this nameless event just got called')
)

我从javascript获得了这种方法。这在python中是否可行。如果是这样,我有没有理由使用它?

P.S。我知道lambda,但主要是针对小功能。

1 个答案:

答案 0 :(得分:4)

  

是否可以以任何方式在python中使用无名函数。所以像这样:

handler.create_event(
    def(data):
        print('hello, this nameless event just got called')
)

不幸的是没有。 Python只有一个用于定义匿名(或无名)函数的语法结构; lambda关键字。根本没有其他方法可以创建匿名函数。

  

我从javascript获得了这种方法。这在python中是否可行。

我建议不要试图在语言之间绘制确切的特征相似之处。它们很少(如果有的话)存在。简而言之,如果您想要匿名函数,请使用lambda

如user2864740所述:

  

def可以嵌套在本地范围内,因此即使不是“内联”,如果处理程序是在隔离的上下文中设置的,它也不需要是“方法”或以其他方式暴露(即。初始化并返回处理程序)。 OTOH,也可能优选使用/绑定方法。