我正在编写一个涉及事件监听器的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
,但主要是针对小功能。
答案 0 :(得分:4)
是否可以以任何方式在python中使用无名函数。所以像这样:
handler.create_event( def(data): print('hello, this nameless event just got called') )
不幸的是没有。 Python只有一个用于定义匿名(或无名)函数的语法结构; lambda
关键字。根本没有其他方法可以创建匿名函数。
我从javascript获得了这种方法。这在python中是否可行。
我建议不要试图在语言之间绘制确切的特征相似之处。它们很少(如果有的话)存在。简而言之,如果您想要匿名函数,请使用lambda
。
如user2864740所述:
def可以嵌套在本地范围内,因此即使不是“内联”,如果处理程序是在隔离的上下文中设置的,它也不需要是“方法”或以其他方式暴露(即。初始化并返回处理程序)。 OTOH,也可能优选使用/绑定方法。