Python Deklaration und Initialisierung/Zuweisung?

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" );
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Python kennt keine Deklaration. Es sind einfach nur Zuweisungen.


MrAmazing2  24.03.2021, 03:49
variable = None 

kommt einer Deklaration gleich. Dann hat man eine leere Variable. Aber im Grunde hast du recht.

0
KarlRanseierIII  24.03.2021, 10:51
@MrAmazing2

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.

0
MrAmazing2  24.03.2021, 12:01
@KarlRanseierIII

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.

0
KarlRanseierIII  24.03.2021, 12:17
@MrAmazing2
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 */
0