2017-02-25 103 views
2

我工作的一个项目Pygame的时候我遇到了这样的问题:经与拉姆达的麻烦在Python

# Note: pos is the tuple that stores mouse position 
self.start_on = lambda: True if pos[1] >= 100 and pos[1] <= 200 else False 
print(self.start_on) 

回报

<function Menu.mouseLogic.<locals>.<lambda> at 0x10346d1e0> 

,而不是真或假。

我也试过:

self.start_on = (lambda: True if pos[1] >= 100 and pos[1] <= 200 else False) 
print(self.start_on) 

但返回同样的事情。

如何让它返回True或False?

(注:这是关于Python 3.5)

+0

不相关,但是如果你想给一个名称分配一个lambda(一个匿名函数),只需要使用一个普通的'def'。 – skrx

回答

3

你似乎并不需要一个拉姆达。你永远不需要写True if X else False。你只需要

self.start_on = (100 <= pos[1] <= 200) 

如果你想使用lambda,所以你可以使用self.start_on这个条件后进行计算,这将是:

self.start_on = lambda: (100 <= pos[1] <= 200) 

,并可以打印通过它的结果print(self.start_on()),因为你总是需要括号来调用一个函数。

2

使用lambda你不需要。只需要做self.start_on = True if pos[1] >= 100 and pos[1] <= 200 else False。甚至更简单,self.start_on = pos[1] >= 100 and pos[1] <= 200

lambda创建一个匿名函数,但它看起来像只需要一个值。

2

你是差不多那里。只要确保实际运行拉姆达:

self.start_on = lambda: True if pos[1] >= 100 and pos[1] <= 200 else False 
print(self.start_on()) # <-- note the() after self.start_on 

lambda调用函数后的括号。

您还可以更进一步,并简化拉姆达:

self.start_on = lambda: (100 <= pos[1] <= 200) 
print(self.start_on())