2016-05-02 12 views
-1

Ich möchte eine Python-Zeichenfolge in eine Funktion verwandeln, die True zurückgibt, wenn das Argument dieser Zeichenfolge entspricht. Hier ist mein Code:Python-Variable zu einer statischen Zeichenfolge

In: x='foo' 
In: (lambda c: c==x)('foo') 
Out: True 
In: x=lambda c: c==x 
In: x('foo') 
Out: False 

Ich versuchte x zu verwenden, [:] und x .__ repr_(), aber sie scheiterte.

Ich würde mich über jeden Hinweis freuen.

+1

Was genau versuchen Sie zu erreichen? –

Antwort

1

Ihre Funktion ist in Ordnung. Aber nach

x=lambda c: c==x

haben Sie den Wert von x überschrieben, so x('foo') ausgewertet

'foo' == (lambda c: c==x)

, die offensichtlich falsch ist.

+0

Eine Lösung besteht darin, 'x = Lambda c, x = x: c == x 'zu setzen, um den Wert von x im Text der Funktion zu dem Zeitpunkt zu zwingen, an dem die Funktion * definiert ist *. – chepner

+0

Danke @mhsmith und @chepner! es hat perfekt funktioniert – mibarg

1

Sie ersetzen die x Variable, indem Sie sie einem Lambda zuweisen. Wenn Sie das testen möchten, nur print(x) und Sie werden das Problem sehen. Ändern Sie einfach den Variablennamen.

static_string = "foo" 
x = lambda c: c==static_string 
assert(x("foo")) 
assert(not x("bar")) 
Verwandte Themen