2017-02-25 10 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> 

の代わりに、TrueまたはFalse。

私も試してみました:

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

名前にラムダ(無名関数)を割り当てたい場合は、代わりに通常の 'def'を使用してください。 – skrx

答えて

3

あなたがラムダを必要としていないようです。そして、True if X else Falseと書く必要はありません。

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

とあなたが経由での結果を印刷することができます:あなたはちょうどあなたが後でこの条件を計算するためにself.start_onを使用できるようにあなたは、ラムダを使いたいならば、それは次のようになり

self.start_on = (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 

ラムダ関数を呼び出す括弧の後。

また、さらに一歩進み、ラムダを簡素化することができます。

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