2012-04-05 8 views
0

eine kurze Frage: ist es möglich, das Ergebnis einer Berechnung innerhalb eines Generatorausdrucks einem Referrer zuzuordnen?Berechneten Wert der Variablen innerhalb des Generatorausdrucks zuweisen?

Nehmen wir an, ich habe einen Ausdruck wie folgt aus:

m = (float(i.dist) - float(base) for i in met_obj if str(i.code) != '90')

i.dist ist ein Attribut eines Objekts, das ich dem Zufall wollen. Ich habe versucht:

m = (float(i.dist) -= float(base) for i in met_obj if str(i.code) != '90')

Oder würde ich brauche stattdessen einen Generator zu benutzen?

Danke! LarsVegas

+2

Die Frage ist nicht sehr klar ... können Sie bitte einige Beispiel Eingabe und Ausgabe geben? – jamylak

+1

Was möchten die generierten Werte sein? Möchten Sie, dass sie den neuen Werten von "i.dist" entsprechen? Oder was? –

+0

Ich bin durch verschiedene Dateien, die im Grunde alle die gleiche Information enthalten (z. B. die Entfernung von einem Schnittpunkt). Aber einige sind in Metern andere in der realen Welt xy. Die Daten werden in einer Klasse gespeichert, i.dist ist beispielsweise ein Attribut der Zeile i. Also möchte ich das Attribut des Objekts "i" wie folgt ändern: "i.dist = i.dist - base", wenn eine bestimmte Bedingung erfüllt ist. Zur Verdeutlichung: jetzt sollte 'met_obj [0] .dist =' 126165.26 '' 'met_obj [0] .dist = -32.5' werden. Hoffe, das hilft zu verstehen ... Prost – LarsVegas

Antwort

0

Eine kurze Antwort: Nein, es ist nicht möglich.

+0

Ich bat um eine kurze Antwort. Vielen Dank. – LarsVegas

0

Ich denke, es ist ein Fehler in Ihrem Code.

Wie Sie sehen können, float() ist eine Funktion, und die Anweisung float(i.dist) -= float(base) Mittel zuweisen Aufruf funktionieren, so wird es ein Syntaxfehler sein :)

+0

Ich denke, er weiß, dass es einen Fehler gibt, weil er das versucht hat und es nicht funktioniert hat, also fragt er hier. Er sucht nach einer Lösung für das Problem, das die richtige Version seines Codes ist. – jamylak

+0

@jamylak: Wahr. – LarsVegas

+0

@wyk eigentlich 'float' ist eine Klasse (oder Typ), keine Funktion, initialisiere' float() 'erzeugt eine neue Instanz von' float', die es ihm im op nicht erlauben würde, das gewünschte Objekt zu bearbeiten. – Tcll

1

Wenn Sie Update-Objekte in einer Schleife destruktiv wollen, dann eine Schleife verwenden, keinen Generator Ausdruck:

for i in met_obj if str(i.code) != '90': 
    i.dist -= float(base) 

Generator Ausdrücke nützlich ist, wenn sie in einem functional Stil Programmierung, während Zuweisungen an vorhandenen Variablen zu tun/Mitglieder sind typischerweise ein Imperativkonstrukt.

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Wie ich schon sagte: Ich habe mich gefragt, ob :-) Aber ehrlich gesagt war es sowieso nicht der beste Weg. – LarsVegas

Verwandte Themen