Python Deklaration und Initialisierung/Zuweisung?
a = 1
b = a
Ist b = a Deklaration und Initialisierung oder Deklaration und Zuweisung ?
Ich hätte gedacht: Initialisierung ist die "Erste Zuweisung". Sollte b nochmal verändert werden, dann Zuweisung...Liege ich richtig ?
2te Frage:
array = [1,2,3,4,5]
array.append(6) Wie schreibe ich das im Struktogrammer ?
2 Antworten
In Python gibt es weder Deklaration noch Initialisierung. Es gibt nur Zuweisungen.
In anderen Sprachen hättest du recht, ja. Dort wäre
<typ> b = a
Deklaration, Initialisierung und Zuweisung.
Bei der Deklaration sagt man dem Compiler/Interpeter den Typ und Namen der Variable. Gibt‘s in Python natürlich nicht. Zum Beispiel
String str;
Eine Initialisierung ist einfach die erste Zuweisung, das hast du richtig verstanden. Man kann Deklaration und Initialisierung auch in einem Schritt machen, auch das hast du richtig verstanden.
String str = "abc";
In manchen Sprachen kann man aber auch ohne Zuweisung, sondern stattdessen per Konstruktor, eine Variable initialisieren, z.B. in C++ so:
std::string s( "abc" );
Python kennt keine Deklaration. Es sind einfach nur Zuweisungen.
Ne, weil durch das dynamische Typing bei jeder Zuweisung der Typ verändert und generell der Name nur wiederverwendet wird.
>>> a=3
>>> b=4
>>> id(a)
140459611996512 <= #########
>>> id(b)
140459611996544
>>> b-=1
>>> id(b)
140459611996512 <= #########
Nach dem Dekrementieren von b zeigt b auf das gleiche immutable wie a. b wird als Name wiederverwendet, auf den bestehenden int(3) gesetzt und anschließend der int(4) der GC überlassen.
Das stimmt natürlich.
Ich meinte verglichen mit anderen Sprachen kommt das einer Deklaration gleich.
Wenn ich Beispielsweise ein Programm von JavaScript nach Python übersetze:
var a; //Deklaration
if (x<10) a=2; //Bedingte Initialisierung
if (a) {//Überprüfen ob a initialisiert wurde
...
}
In Python dann:
a = None #‘Entspricht‘ obiger Deklaration
if x<10:
a=2
if a:
Das meinte ich. Was in anderen Sprachen per Deklaration gemacht wird, kann in Python per neueVariable = None gemacht werden. Das es natürlich nur eine Zuweisung bzw. Benennung ist, und keine wirkliche Deklaration, das ist klar.
var a;
Ich kenne die Internals von JS nicht, aber sicher, daß das nur Deklaration ist und keine Definition?
In C:
extern int a; /* Deklaration */
int a; /*Definition */
kommt einer Deklaration gleich. Dann hat man eine leere Variable. Aber im Grunde hast du recht.