Einfache Funktion, die bei jedem Aufruf eine um 1 erhöhte Zahl zurückgibt, ohne globale Werte?

8

Ich versuche, eine Python-Funktion zu schreiben, die beim ersten Aufruf eine 1 zurückgibt. Beim zweiten Aufruf wird eine 2 zurückgegeben. Bei der dritten, einer 3. usw.

Gegenwärtig habe ich dies mit einer globalen Variable erreicht:

%Vor%

Beim dreimaligen Aufruf der Funktion:

%Vor%

Es gibt die erwarteten Werte zurück:

%Vor%

Aber ich habe gelesen, dass es eine schlechte Übung ist, globale Variablen zu verwenden. Also habe ich mich gefragt, ob das gleiche Ergebnis erreicht werden könnte, ohne Globals zu verwenden.

Irgendwelche Vorschläge?

Danke für Ihre Hilfe.

    
Baalinooo 19.07.2016, 10:03
quelle

6 Antworten

11

Verwenden eines Abschlusses:

%Vor%

Verwenden einer Klasse (die offensichtlichste Lösung in einer OOPL):

%Vor%

Unter Verwendung eines Generators (nicht direkt aufrufbar, müssen Sie die Methode .next() verwenden):

%Vor%     
bruno desthuilliers 19.07.2016 10:18
quelle
6

Sie können Funktionsattribute verwenden:

%Vor%

Oder Schließungen:

%Vor%     
Sergey Gornostaev 19.07.2016 10:08
quelle
4

Ich werde eine alternative Lösung für die Antwort von Sergey anbieten: Exploit veränderbare Vorgabe Argumente!

%Vor%

Dies hat den Nachteil, dass ein Benutzer die Funktion fälschlicherweise mit einem Argument aufrufen kann und keine Fehlermeldung erhalten wird.

    
Bakuriu 19.07.2016 10:20
quelle
2

Können Sie ein Objekt verwenden?

%Vor%

Dann können Sie es wie eine Funktion nach der Instanziierung nennen:

%Vor%     
p-robot 19.07.2016 10:21
quelle
1

Sie können auch den Generator verwenden.

%Vor%

Ausgabe:

%Vor%     
Dinesh Pundkar 19.07.2016 10:25
quelle
0

Sie können den Generator auch verbessern, ihn flexibler machen:

%Vor%     
Ivan Semochkin 19.07.2016 19:15
quelle

Tags und Links