Python lambda-Rückkehr kein statt leerer string
Habe ich die folgenden lambda-Funktion:
f = lambda x: x == None and '' or x
Sollte es eine leere Zeichenfolge zurück, wenn es bekommt Keiner als argument oder das argument, wenn es nicht gar Keiner.
Beispiel:
>>> f(4)
4
>>> f(None)
>>>
Wenn ich rufe, f(None), anstatt einen leeren string bekomme ich Keine. Ich druckte die Art, wie die Funktion wieder und ich bekam NoneType. Ich hatte erwartet, string.
Typ () liefert string, also würde ich gerne wissen, warum die lambda nicht leere Zeichenfolge zurück, wenn ich den pass nicht als argument.
Ich bin Recht neu auf Lambda-Ausdrücke, also würde ich das missverstanden haben einige Dinge darüber, wie Sie arbeiten.
- Sie haben sich eines der Klassischen Fehler...
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie die if-else-Konstrukt
Das problem in Ihrem Fall " wird als boolean False. bool(") == False.
Sie können
Das problem ist, dass Python behandelt die leere Zeichenkette als False. Wenn Sie an Keine auf Ihre Funktion, es wertet auf:
welche (effektiv) wird zu:
dann:
und schließlich:
Eine Lösung wäre:
Wenn Sie wissen, x ist entweder ein string oder None, dann können Sie nutzen die Tatsache, dass Keines ist auch ein Falscher Wert in Python:
Python gibt
and
eine höhere Priorität alsor
, so dass die Klammern fallen hier:Wenn bestanden
None
wird(True and '') or None
. Python booleschen Operatoren arbeiten durch Rücksendung ein argument oder eine andere (Woher dieser kleine trick), so dass diese reduziert sich auf'' or None
, und schließlichNone
.Diesem kleinen trick stammt von früher zurück Python 2.5, die nicht über die bedingte operator. Die Einschränkung, die Sie gerade lief, ist, dass es sich nicht wie erwartet, wenn
True
Zweig hat eineFalse
Wert. Es sei denn, Sie sind besorgt mit Python - ≤ 2.4, nutzen Sie einfach das conditional-operator.Es ist nicht die lambdas das problem sind hier. Es ist die pythonic if/else expressiong Sie verwenden es.
(condition) and (expression1) or (expression2)
meisten der Zeit, bedeutet das(condition) ? (expression1) : (expression2)
Sie erwarten würde, außer, wennexpression1
zu False ausgewertet wird.Dies ist, weil die ganze Sache ist ausgewertet. Wenn
condition
ausfällt,expression1
ausgewertet wird. Wenn esTrue
, es wird zurückgegeben, wegen der short circuit evaluation, die damit zu erwartende Verhalten. Wenn nicht,expression2
zurückgegeben.''
zu False ausgewertet wird.Versuchen short-circuit-evaluation:
g(0)
gibt, was der OP will.