Ich hasse es, dass Python nicht zwischen Deklaration und Verwendung einer Variablen unterscheiden kann. Sie brauchen keine statische Eingabe, um dies zu erreichen. Es wäre einfach schön zu sagen, dass dies eine Variable ist, die ich absichtlich deklariere, und ich beabsichtige , einen neuen Namen einzuführen, dies ist kein Tippfehler.
Darüber hinaus verwende ich Python-Variablen normalerweise in einem einmal beschreibbaren Stil, dh, ich behandle Variablen als unveränderlich und ändere sie nicht nach ihrer ersten Zuweisung. Dank Funktionen wie dem Listenverständnis ist dies eigentlich unglaublich einfach und der Codefluss ist leichter zu verfolgen.
Ich kann diese Tatsache jedoch nicht dokumentieren. Nichts in Python hindert mich daran, Variablen zu überschreiben oder wiederzuverwenden.
Zusammenfassend möchte ich zwei Schlüsselwörter in der Sprache haben: var
und let
. Wenn ich in eine Variable schreibe, die von keiner dieser Variablen deklariert wurde, sollte Python einen Fehler auslösen. Außerdem let
deklariert Variablen als schreibgeschützt, während var
Variablen "normal" sind.
Betrachten Sie dieses Beispiel:
x = 42 # Error: Variable `x` undeclared
var x = 1 # OK: Declares `x` and assigns a value.
x = 42 # OK: `x` is declared and mutable.
var x = 2 # Error: Redeclaration of existing variable `x`
let y # Error: Declaration of read-only variable `y` without value
let y = 5 # OK: Declares `y` as read-only and assigns a value.
y = 23 # Error: Variable `y` is read-only
Beachten Sie, dass die Typen immer noch implizit sind ( let
Variablen sind jedoch in jeder Hinsicht statisch typisiert, da sie nicht auf einen neuen Wert zurückgeführt werden können, während var
Variablen möglicherweise weiterhin dynamisch typisiert werden).
Schließlich sollten alle Methodenargumente automatisch let
, dh schreibgeschützt sein. Es gibt im Allgemeinen keinen guten Grund, einen Parameter zu ändern, mit Ausnahme der folgenden Redewendung:
def foo(bar = None):
if bar == None: bar = [1, 2, 3]
Dies könnte durch eine etwas andere Redewendung ersetzt werden:
def foo(bar = None):
let mybar = bar or [1, 2, 3]