Hat Python etwas wie "State" Variablen von Perl 5.10?

8

In Perl 5.10 kann ich sagen:

%Vor%

... und es wird ausgedruckt:

%Vor%

Hat Python so etwas?

    
mike 03.03.2009, 00:17
quelle

11 Antworten

12

Die nächste Parallele ist wahrscheinlich, um Werte an die Funktion selbst anzuhängen.

%Vor%     
Triptych 03.03.2009, 00:30
quelle
17

Eine Klasse kann hier besser passen (und ist normalerweise besser für alles geeignet, was "Staat" betrifft):

%Vor%     
Ali Afshar 03.03.2009 00:27
quelle
9

Python hat Generatoren, die etwas ähnliches tun:

Was bewirkt das Keyword "yield" in Python?

    
Justus 03.03.2009 00:28
quelle
8

Nicht sicher, ob Sie das suchen, aber Python hat Generatorfunktionen, die keinen Wert per se zurückgeben, sondern ein Generatorobjekt, das jedes Mal einen neuen Wert erzeugt

%Vor%

Verwendung:

%Vor%

Hier finden Sie weitere Erläuterungen zu yield : < br> Was bewirkt das Schlüsselwort "yield" in Python?

    
hasen 03.03.2009 00:30
quelle
5

Hier ist eine Möglichkeit, eine Schließung in Python zu implementieren:

%Vor%

Ich habe dieses Beispiel wortwörtlich aus einem Python-Mailinglisten-Beitrag ausgeliehen.

    
popcnt 03.03.2009 03:04
quelle
2

Ja, obwohl Sie Ihre globale Variable zuerst deklarieren müssen, bevor sie in foo gefunden wird:

%Vor%

EDIT: Als Reaktion auf den Kommentar stimmt es, dass Python keine statischen Variablen innerhalb einer Funktion hat. Beachten Sie, dass x in diesem Beispiel nur für den Rest des Moduls als global verfügbar gemacht wird. Angenommen, der obige Code ist in test.py . Angenommen, Sie schreiben das folgende Modul:

%Vor%

Die Ausgabe ist nur 1 und 2 , nicht 101 und 102 .

    
Jarret Hardie 03.03.2009 00:23
quelle
2

Nicht dass ich das empfehle, aber nur zum Spaß:

%Vor%

Dies funktioniert wegen der Weg veränderlichen Standardargumente , die in Python funktionieren.

    
dF. 03.03.2009 01:03
quelle
2

Sie könnten auch etwas wie

verwenden %Vor%

um eine globale Var zu vermeiden. Diese Frage wurde von diesem Link gestellt.

    
Adriano Varoli Piazza 03.03.2009 00:29
quelle
2

Der beste Weg ist, Klasse oder Generator ( yield ).

Der Vollständigkeit halber ist hier eine Variante mit Closure in Python 3.x:

%Vor%     
jfs 03.03.2009 17:02
quelle
1
%Vor%     
riza 03.03.2009 00:45
quelle
0

Hier ist noch ein dreckiger billiger Weg, es ist eine Variation von Tryiptichs Antwort, aber Dekoratoren verwenden

%Vor%     
hasen 24.03.2009 01:19
quelle

Tags und Links