Variablennamen an Objekte binden
In Python ist eine Variable ein Name, der an ein Objekt gebunden ist. Der Name ist keine typisierte Speicherbox: Eine Zuweisung kann ihn an ein anderes Objekt binden, während weitere Namen weiterhin auf das ursprüngliche Objekt verweisen können.
Wenn Python x = 2 ausführt, wertet es den Ausdruck aus und bindet den Namen x an das entstehende Integer-Objekt. Allokation, Wiederverwendung und physischer Speicherort des Objekts sind Implementierungsdetails, auf die sich ein Programm nicht verlassen darf.
Wie Variablen und Speicher funktionieren
Das Built-in id() liefert eine ganze Zahl, die ein Objekt während seiner Lebensdauer eindeutig identifiziert. CPython leitet sie häufig aus einer Speicheradresse ab, doch Python garantiert diese Deutung nicht für jede Implementierung.
# Variable x mit dem Wert 2 erstellen
x = 2
print(x) # Ausgabe: 2
print(id(x)) # Implementierungsabhängige Objektidentität
# Erstellen einer Variablen y, die auf die Variable x verweist
y = x
print(y) # Ausgabe: 2
print(y is x) # Ausgabe: True
# Variable z mit demselben Wert erstellen
z = 2
print(z) # Ausgabe: 2
print(z == x) # Ausgabe: True
# Verlasse dich nie auf z is x. Die Wiederverwendung von Objekten hängt von der Implementierung abDie Zuweisung y = x garantiert, dass beide Namen in diesem Moment auf dasselbe Objekt verweisen. Ein neu erstellter gleicher Wert besteht den Gleichheitsvergleich, kann aber in einem eigenen Objekt liegen. Manche Python-Implementierungen verwenden unveränderliche Objekte wieder, doch korrekter Code hängt nicht von dieser Optimierung ab.
Eigenschaften von Variablen in Python
Wenn du einem Namen einen Wert zuweist, merke dir zwei Dinge. Python bindet den Namen ohne separate Deklaration an ein Objekt. Später kannst du denselben Namen an ein Objekt eines anderen Typs binden.
Keine Variablendeklaration
Anders als Sprachen mit separater Variablendeklaration bindet Python einen Namen, sobald eine Zuweisung ausgeführt wird. Objekte besitzen Typen, und type(value) meldet den Typ des Objekts, das gerade an einen Namen gebunden ist.
# Für Python ist keine Variablendeklaration erforderlich
nama = "Budi" # String
umur = 25 # Integer
tinggi = 175.5 # Float
aktif = True # Boolean
# Python bestimmt den Datentyp automatisch
print(type(nama)) # Ausgabe: <class 'str'>
print(type(umur)) # Ausgabe: <class 'int'>
print(type(tinggi)) # Ausgabe: <class 'float'>
print(type(aktif)) # Ausgabe: <class 'bool'>Dynamische Datentypen
Python ist dynamisch typisiert: Jedes Objekt besitzt einen Typ, während derselbe Name im Programmverlauf an Objekte verschiedener Typen neu gebunden werden kann.
# Variable mit dynamischen Datentypen
data = 42 # Integer
print(f"Wert: {data}, Typ: {type(data)}")
data = "Hello World" # String
print(f"Wert: {data}, Typ: {type(data)}")
data = [1, 2, 3] # List
print(f"Wert: {data}, Typ: {type(data)}")
data = 3.14 # Float
print(f"Wert: {data}, Typ: {type(data)}")Variablenbenennungsregeln
Python hat feste Syntaxregeln für Identifier. Ein Name darf Buchstaben, Ziffern und Unterstriche enthalten, aber nicht mit einer Ziffer beginnen und nicht mit einem reservierten Schlüsselwort übereinstimmen.
Variablennamenskomponenten
Ein Identifier beginnt mit einem Unterstrich oder einem Unicode-Buchstaben. Danach dürfen Identifier-Buchstaben, Unterstriche und Ziffern wie folgen. Python akzeptiert viele Nicht-ASCII-Identifier, doch aussagekräftige ASCII-Namen in snake_case lassen sich meist leichter tippen, suchen und werkzeugübergreifend teilen.
# Gültige Variablennamen
student_name = "Ahmad" # Verwendung von Buchstaben und Unterstrichen
score1 = 85 # Verwendung von Buchstaben und Zahlen
_total = 100 # Beginnend mit Unterstrich
MAX_SIZE = 1000 # Alle Großbuchstaben
camelCase = "valid" # CamelCase-Stil
snake_case = "valid" # snake_case-Stil
print(student_name, score1, _total, MAX_SIZE, camelCase, snake_case)Pflichtregeln
Ein Variablenname darf nicht mit einer Ziffer beginnen und kein reserviertes Schlüsselwort sein. Ein ungültiger Identifier führt bereits beim Parsen zu einem SyntaxError.
# RICHTIGE Variablennamen
data1 = "valid"
data_2 = "valid"
_data3 = "valid"
# FALSCHE Variablennamen (verursacht Fehler)
# 1data = "invalid" # SyntaxError
# 2nilai = "invalid" # SyntaxError
# 9test = "invalid" # SyntaxError
print(data1, data_2, _data3)Großschreibung und Kleinschreibung
Python unterscheidet bei Variablennamen zwischen Groß- und Kleinbuchstaben. Das bedeutet, dass nama, Nama und NAMA drei verschiedene Variablen sind.
# Python unterscheidet Groß- und Kleinschreibung
nama = "budi"
Nama = "Siti"
NAMA = "Ahmad"
print(f"nama: {nama}") # Ausgabe: nama: budi
print(f"Nama: {Nama}") # Ausgabe: Nama: Siti
print(f"NAMA: {NAMA}") # Ausgabe: NAMA: Ahmad
# Diese drei Variablen unterscheiden sich voneinander
print(nama == Nama) # Ausgabe: False
print(Nama == NAMA) # Ausgabe: FalseFür Python reservierte Schlüsselwörter
Python reserviert bestimmte Wörter für seine Syntax. Deshalb können sie nicht als Variablennamen verwendet werden. Eine Zuweisung an eines dieser Wörter löst einen SyntaxError aus, noch bevor das Programm startet.
Liste der Schlüsselwörter in Python
Diese reservierten Schlüsselwörter können keine Identifier sein. Die Tabelle gruppiert sie nach ihrer Rolle in der Syntax.
| Rolle | Schlüsselwörter |
|---|---|
| Logik und Werte | and, or, not, True, False, None |
| Verzweigung und Iteration | if, elif, else, for, while, break, continue, pass |
| Definitionen und Gültigkeit | def, class, lambda, return, yield, global, nonlocal |
| Importe und Aliase | import, from, as |
| Fehler und Kontext | try, except, finally, raise, assert, with |
| Weitere Operationen | async, await, del, in, is |
Soft Keywords wie match, case, type und _ sind nur in bestimmten Syntaxkontexten speziell. keyword.iskeyword("match") ergibt False, keyword.issoftkeyword("match") dagegen True.
# Beispiele für FALSCHE Verwendung (verursacht Fehler)
# if = 10 # SyntaxError: invalid syntax
# for = "hello" # SyntaxError: invalid syntax
# def = 25 # SyntaxError: invalid syntax
# class = "test" # SyntaxError: invalid syntax
# RICHTIGER Weg für ähnliche Variablennamen
kondisi_if = 10
loop_for = "hello"
fungsi_def = 25
kelas_class = "test"
print(kondisi_if, loop_for, fungsi_def, kelas_class)Überprüfen von Schlüsselwörtern
Python stellt das Modul keyword zur Verfügung, um zu prüfen, ob ein Wort ein Schlüsselwort ist oder nicht.
import keyword
# Alle Python-Schlüsselwörter anzeigen
print("Anzahl der Schlüsselwörter:", len(keyword.kwlist))
print("Schlüsselwortliste:")
for i, kw in enumerate(keyword.kwlist, 1):
print(f"{i:2d}. {kw}")
# Prüfen, ob ein Wort ein Schlüsselwort ist
print(f"\nIst „if“ ein Schlüsselwort? {keyword.iskeyword('if')}")
print(f"Ist „nama“ ein Schlüsselwort? {keyword.iskeyword('nama')}")
print(f"Ist „class“ ein Schlüsselwort? {keyword.iskeyword('class')}")Bewährte Vorgehensweisen für Variablennamen
Python-Bezeichner müssen die oben beschriebenen Syntaxregeln erfüllen. Innerhalb dieser Regeln sollten die Namen angeben, wofür ein Wert steht. Ein Name wie gesamtpreis sagt der nächsten Leserin mehr als gp, und dieselbe Gewohnheit hält ein längeres Programm auch Monate später lesbar.
Bedeutungsvolle Namen
Wähle Variablennamen, die den gebundenen Wert oder seine Rolle im Programm erklären. Aussagekräftige Namen helfen dir und allen späteren Lesenden, den Code schneller zu verstehen.
# SCHLECHTE Variablennamen
h = 175
w = 70
a = 25
# GUTE Variablennamen
body_height = 175
body_weight = 70
age = 25
# BMI mit aussagekräftigen Variablennamen berechnen
bmi = body_weight / ((body_height / 100) ** 2)
print(f"BMI: {bmi:.2f}")
# Variablennamen nennen die Bedeutung jedes Werts
print(f"Höhe: {body_height} cm")
print(f"Gewicht: {body_weight} kg")
print(f"Alter: {age} Jahre")Angemessene Namenslänge
Ein Name sollte so kurz wie möglich und so konkret wie nötig sein. Zu lange Namen verdecken den Ausdruck, während ein einzelner Buchstabe außerhalb eines kleinen lokalen Kontexts kaum Bedeutung trägt.
# Name zu lang (SCHLECHT)
student_height_class_12_science_odd_semester = 175
# Name zu kurz (SCHLECHT)
h = 175
# Passender Name (GUT)
student_height = 175
height = 175 # Wenn der Kontext bereits klar ist
# Für Zählervariablen sind Kurznamen akzeptabel
for i in range(10):
print(f"Iteration {i}")
# Für komplexere Daten klare Namen verwenden
student_count = 30
average_score = 85.5Konsistenter Schreibstil
Die Python-Konvention empfiehlt den snake_case-Stil für Variablennamen, wobei Wörter durch Unterstriche getrennt werden und alle Buchstaben Kleinbuchstaben verwenden.
# snake_case-Stil (EMPFOHLEN für Python)
full_name = "Ahmad Budi"
birth_date = "1995-05-15"
home_address = "Jl. Merdeka No. 123"
# CamelCase-Stil (häufiger in JavaScript/Java)
fullName = "Ahmad Budi" # Nicht falsch, aber weniger Python-ähnlich
# PascalCase-Stil (normalerweise für Klassennamen)
FullName = "Ahmad Budi" # Für Variablen nicht empfohlen
# Konsistenz innerhalb eines Programms
math_score = 90
physics_score = 85
chemistry_score = 88
average_score = (math_score + physics_score + chemistry_score) / 3
print(f"Durchschnittliche Punktzahl: {average_score:.2f}")Verwechslungen vermeiden
Vermeide Zeichen, die leicht mit Ziffern verwechselt werden, wenn der kurze Name keinen etablierten mathematischen Kontext hat.
# Verwirrende Zeichen (VERMEIDEN)
# l = 1 # Der Buchstabe „l“ sieht aus wie die Zahl „1“.
# I = 1 # Der Buchstabe „I“ sieht aus wie die Zahl „1“.
# O = 0 # Der Buchstabe „O“ sieht aus wie die Zahl „0“.
# Klarere Alternativen
length = 1 # Klares Wort statt mehrdeutigem Zeichen
index = 1 # Oder aussagekräftigere Namen
empty = 0 # Namen, die die Bedeutung erklären
# Beispielhafte Verwendung im klaren Kontext
item_count = 10
for number in range(1, item_count + 1):
print(f"Elementnummer {number}")
# Boolesche Variablen mit eindeutigen Namen
is_active = True
has_permission = False
can_edit = TrueBeispiel für Variablen in einem Programm
Das folgende Programm verwendet Variablen, um Fläche und Umfang eines Rechtecks zu berechnen.
import math
# Programm zur Berechnung der Fläche und des Umfangs eines Rechtecks
print("=== Rechteckrechner ===")
# Benutzereingabe
length = float(input("Länge (cm) eingeben: "))
width = float(input("Breite (cm) eingeben: "))
if not (math.isfinite(length) and math.isfinite(width) and length > 0 and width > 0):
raise ValueError("Abmessungen müssen positiv und endlich sein")
# Berechnungen
area = length * width
perimeter = 2 * (length + width)
# Ergebnisse anzeigen
print(f"\nBerechnungsergebnisse:")
print(f"Länge: {length} cm")
print(f"Breite: {width} cm")
print(f"Fläche: {area} cm²")
print(f"Umfang: {perimeter} cm")In diesem Programm bezeichnen length und width die beiden Eingaben, während area und perimeter die berechneten Ergebnisse benennen. Die Prüfung weist nicht positive oder nicht endliche Abmessungen vor der Rechnung zurück. Länge 5 und Breite 3 ergeben die Fläche 15.0 cm² und den Umfang 16.0 cm. Nichtnumerischen Text lehnt float() ab.
Namensbindung, Identifier-Regeln und einheitliche Konventionen machen Python-Code leichter lesbar. Wer Gleichheit, Identität und Neuzuweisung unterscheidet, kann später auch Mutability, Funktionsargumente und Objektmodelle besser einordnen.