2016-05-11 9 views
1

Der Code definiert:Nameerror: global Name '_' ist nicht

if (query_id, _) in hashtable[bucket]: 

ich diese like in a for loop arbeiten erwartet, aber stattdessen gibt es diesen Fehler:

NameError: global name '_' is not defined

hastable[bucket] ist eine Liste von Paaren wenn das zählt (was ich bezweifle). Irgendwelche Ideen?

+0

Überprüfen Sie nur 'query_id'? –

+0

Ich interessiere mich für Paare, die 'query_id' als erstes Mitglied haben und ich mache mir keine Sorgen um das zweite @PadraicCunningham. – gsamaras

+0

Dann das Entpacken in einer for-Schleife wie vorgeschlagen, was Sie wollen, dass oder Schleifen und mit 'if sub [0] == .. ' –

Antwort

7

Die x in y ist nicht magisch; Es ist im Grunde das gleiche wie y.__contains__(x). Daher kann in nicht mit Platzhaltern suchen; Das linke Argument wird vollständig ausgewertet. Stattdessen for-Schleife

if any(query_id == qid for (qid, _) in hashtable[bucket]): 
+0

OK, das hat funktioniert und ich habe verstanden, warum mein Code fehlgeschlagen ist. Kannst du mir bitte erklären, was du getan hast? :) Denkst du auch, dass meine Frage so schlecht ist, dass ich einen -1 Punkt habe? :/ – gsamaras

+0

'any' bewertet jedes Element seines Arguments. Der Generatorausdruck, der sein Argument bildet, liefert True, wenn das erste Item mit query_id übereinstimmt. – phihag

+0

Danke phihad und danke für die Verbesserung. – gsamaras

2

In einem verwenden (wie die, die Sie verknüpfen) die Variable namens _ definiert. Soweit ich das beurteilen kann, hast du es nirgends definiert. Was hast du von _ erwartet?

_ ist nur ein normaler Variablenname in Python, außer im interaktiven Interpreter (wo er die letzte Variablenausgabe darstellt).

+0

Das sollte ein Kommentar sein Matthias. Ich würde den dritten Punkt der Top-Antwort erwarten, mit der ich verlinkt bin. Außerdem würde ich erwarten, dass '[tag: Python]' es automatisch definiert. – gsamaras

+1

Es tut mir leid, ich habe es aktualisiert und hoffe, dass das besser als Antwort ist. –

1

In dem Konzept, in dem Sie es verwenden, speichert nur die letzte Ausgabevariable. Ich würde mit gehen:

if query_id in (x[0] for x in hashtable[bucket]): 
+0

Schöne Annäherung, danke! – gsamaras