Was ist die idiomatische Python-Entsprechung für diesen C/C++-Code?
void foo()
{
static int counter = 0;
counter++;
printf("counter is %d\n", counter);
}
Wie implementiert man das statische Mitglied auf der Funktionsebene, im Gegensatz zur Klassenebene? Und ändert sich etwas, wenn man die Funktion in eine Klasse einordnet?
33 Stimmen
Es gibt NO Gleichwertigkeit, fürchte ich. Selbst wenn man den Decorator-Hack mit Funktionsattributen durchführt, kann man auf die Variable von außen zugreifen, was den Sinn der Sache leider zunichte macht. Außerdem müssen Sie den Funktionsnamen in der Funktion hart codieren, was sehr ärgerlich ist. Ich würde vorschlagen, stattdessen globale Variablen einer Klasse oder eines Moduls zu verwenden, mit der konventionellen
_
Vorwahl.17 Stimmen
Für Nicht-C-Programmierer, [ [stackoverflow.com/questions/5033627/](https://stackoverflow.com/questions/5033627/static-variable-inside-of-a-function-in-c#5033656](a "static variable inside of a function in c%235033656%5d(a") statische Variable innerhalb einer Funktion ist nur innerhalb des Funktionsbereichs dieser Funktion sichtbar, aber ihre Lebensdauer ist die gesamte Lebensdauer des Programms, und sie wird nur einmal initialisiert). Im Grunde genommen handelt es sich um einen dauerhaften Zähler oder eine Speichervariable, die zwischen Funktionsaufrufen lebt.
2 Stimmen
@lpapp: Irgendwie schon, es ist ein Klassenmitglied . Sie haben Recht, dass wir nicht verhindern können, dass andere Codes sie anzeigen oder ändern.
0 Stimmen
Ich fand respuesta gegeben von Claudiu nützlich.