2009-07-22 8 views
5

私自身のアミューズメントのためにツールを使用しています。ラムダを使用したいのは、私が気に入っているからです。この関数をラムダで置き換えることはできますか?ラムダでのブーリアン評価

def isodd(number): 
    if (number%2 == 0): 
     return False 
    else: 
     return True 

小学生、はい。しかし、私ははいすることができます...

答えて

12

そして、あなたは本当にあなたもラムダなしでそれを置き換えることができる機能を必要としない場合。 :)

(number % 2 != 0) 

それ自身がTrueまたはFalseと評価される式です。

if number % 2: 
    print "Odd!" 
else: 
    print "Even!" 

をしかし、それは読みやすいかどう見る人の目には、おそらくです:あるいは地味、

bool(number % 2) 

そうのように簡素化することができました。

+0

これは問題の核心だった。私は、両方ともintなので、0と1の両方がPythonではTrueであるという印象を受けました。 – SilentW

+3

http://docs.python.org/library/stdtypes.html - 「次の値はfalseとみなされます。...任意の数値型のゼロ、たとえば0です。」 – Ken

+0

私はまだそれを関数。モジュロ2では、偶数または奇数について真であるかどうかを判断するのに、常に2番目または2番目が必要です。 isodd(number)がより明確な場合このような細部はほんとうに違います。 –

7
lambda num: num % 2 != 0 
4
isodd = lambda number: number %2 != 0 
7

を知って興味:

isodd = lambda x: x % 2 != 0 
5

他はすでにあなたの特定のケースをカバーする返信をしました。しかし、実際にifが必要な場合は、条件式を使用できます。たとえば、あなたが文字列"False""True"ではなく、ブール値を返す必要があるだろう場合、あなたはこれを行うことができます:

lambda num: "False" if num%2==0 else "True" 
Python言語リファレンスでは、この式の

definitionは次のように:

x if C else yは、最初にCxではなく)です。 Cが真の場合、xが評価され、その値が返されます。それ以外の場合はyが評価され、その値が返されます。

3

そしてまた、あなたが「and」と「or」そのellementsの一部(最後に評価さ1)を返すことを利用して、簡単な短絡ロジックと複雑な条件文をエミュレートすることができますことを忘れないでください...例えば、この場合には、仮にあなたが別の何かを返したいと思いTrueまたはFalse

より
lambda x: x%2 and "Odd" or "Even" 
1

isodd = lambda number: (False, True)[number & 1]

0

自分自身を参照してくださいいつでも書き込み:

if (some condition): 
    return True 
else: 
    return False 

あなたは、単一の行に置き換える必要があります。

return (some condition) 

あなたの機能その後、次のようになります。

def isodd(number): 
    return number % 2 != 0 

あなたが他の人が提供したラムダ溶液に、そこから取得する方法を見ることができるはずです。

+2

'if(some condition):'や 'return(some condition)'と書いてみると、かっこは失われます。 –

+1

ええ、私は知っています。しかし、私は、いくつかの条件が有効な構文ではないとすれば、この例がより良くなると考えました。たぶん、角括弧を使用していたはずです。 –

+0

'some_condition'を試してください –