Ist es möglich, eine Variable in Python so zu deklarieren?:
var
damit es auf None initialisiert wird? Es scheint, als ob Python dies zulässt, aber sobald Sie darauf zugreifen, stürzt es ab. Ist das möglich? Wenn nicht, warum?
EDIT: Ich möchte dies für Fälle wie diesen tun:
value
for index in sequence:
if value == None and conditionMet:
value = index
break
Duplikat
- Nicht initialisierter Wert in Python (vom selben Autor)
- Gibt es Deklarationsschlüsselwörter in Python? (vom selben Autor)
verbunden
python
variable-assignment
variable-declaration
Joan Venge
quelle
quelle
Antworten:
Warum nicht einfach so machen:
Python ist dynamisch, sodass Sie keine Dinge deklarieren müssen. Sie existieren automatisch in dem ersten Bereich, in dem sie zugewiesen sind. Alles, was Sie brauchen, ist eine reguläre alte Zuweisungsanweisung wie oben.
Das ist schön, weil Sie nie eine nicht initialisierte Variable haben werden. Aber seien Sie vorsichtig - dies bedeutet nicht, dass Sie nicht mit falsch initialisierten Variablen enden . Wenn Sie etwas
None
initiieren, stellen Sie sicher, dass es das ist, was Sie wirklich wollen, und weisen Sie etwas Bedeutenderes zu, wenn Sie können.quelle
Ich würde Ihnen wärmstens empfehlen, andere Sprachen mit "Variablen" zu lesen (ich habe sie als verwandten Link hinzugefügt) - in zwei Minuten wissen Sie, dass Python "Namen" und keine "Variablen" hat.
quelle
val = val or any_object
, um es zu initialisieren.is
diese Option , um zu testen, ob ein Wert vorliegtNone
.In Python 3.6+ können Sie hierfür variable Anmerkungen verwenden:
https://www.python.org/dev/peps/pep-0526/#abstract
In PEP 484 wurden Typhinweise, auch Typanmerkungen genannt, eingeführt. Während der Schwerpunkt auf Funktionsanmerkungen lag, wurde auch der Begriff der Typkommentare zum Annotieren von Variablen eingeführt:
PEP 526 zielt darauf ab, Python eine Syntax zum Kommentieren der Variablentypen (einschließlich Klassenvariablen und Instanzvariablen) hinzuzufügen, anstatt sie durch Kommentare auszudrücken:
Es scheint direkter mit Ihrer Frage übereinzustimmen: "Ist es nur möglich, eine Variable zu deklarieren, ohne in Python einen Wert zuzuweisen?"
quelle
Ich bin mir nicht sicher, was Sie versuchen zu tun. Python ist eine sehr dynamische Sprache. Normalerweise müssen Sie Variablen erst deklarieren, wenn Sie sie tatsächlich zuweisen oder verwenden. Ich denke, was Sie tun wollen, ist gerecht
Dadurch wird
None
der Variablen der Wert zugewiesenfoo
.EDIT: Was Sie wirklich zu wollen scheinen, ist genau das:
Es ist ein wenig schwierig zu sagen, ob dies wirklich der richtige Stil für ein so kurzes Codebeispiel ist, aber es ist eine eher "pythonische" Arbeitsweise.
BEARBEITEN: unten ist ein Kommentar von JFS (hier gepostet, um den Code zu zeigen)
Unabhängig von der Frage des OP, aber der obige Code kann wie folgt umgeschrieben werden:
HINWEIS: Wenn
some_condition()
eine Ausnahme ausgelöst wird,found
ist diese nicht gebunden.HINWEIS: Wenn len (Sequenz) == 0 ist,
item
ist es ungebunden.Der obige Code ist nicht ratsam. Sie soll veranschaulichen, wie lokale Variablen funktionieren, nämlich ob "Variable" "definiert" ist und in diesem Fall nur zur Laufzeit bestimmt werden kann. Bevorzugter Weg:
Oder
quelle
Normalerweise initialisiere ich die Variable mit etwas, das den Typ wie bezeichnet
oder
Wenn es sich um ein Objekt handelt, initialisieren Sie es erst, wenn Sie es instanziieren:
quelle
Wenn Sie überprüfen möchten, ob eine Variable definiert ist oder nicht, überprüfen Sie dann, ob sie in den Arrays local () oder globals () enthalten ist. Ihr Code wurde neu geschrieben:
Wenn es sich um eine lokale Variable handelt, nach der Sie suchen, ersetzen Sie globals () durch local ().
quelle
Zunächst meine Antwort auf die Frage, die Sie ursprünglich gestellt haben
F: Wie kann ich feststellen, ob an einem Punkt in meinem Code eine Variable definiert ist?
A: Lesen Sie in der Quelldatei nach, bis Sie eine Zeile sehen, in der diese Variable definiert ist.
Aber weiter haben Sie ein Codebeispiel gegeben, dass es verschiedene Permutationen gibt, die ziemlich pythonisch sind. Sie suchen nach einer Möglichkeit, eine Sequenz nach Elementen zu durchsuchen, die einer Bedingung entsprechen. Hier sind einige Lösungen:
In diesem Beispiel können Sie das natürlich
raise
durch ein ersetzen,return None
je nachdem, was Sie erreichen möchten.Wenn Sie alles wollten, was der Bedingung entspricht, können Sie dies tun:
Es gibt einen anderen Weg, dies zu tun
yield
, den ich Ihnen nicht zeigen werde, weil es in der Art und Weise, wie es funktioniert, ziemlich kompliziert ist.Darüber hinaus gibt es einen einzeiligen Weg, um dies zu erreichen:
quelle
Wenn ich Ihr Beispiel richtig verstehe, müssen Sie in der if-Anweisung sowieso nicht auf 'value' verweisen. Sie brechen aus der Schleife aus, sobald sie auf irgendetwas eingestellt werden kann.
quelle
Sie sehen aus, als würden Sie versuchen, C in Python zu schreiben. Wenn Sie etwas in einer Sequenz finden möchten, verfügt Python über integrierte Funktionen, um dies zu tun, wie z
quelle
Es ist eine gute Frage und leider eine schlechte Antwort, da
var = None
bereits ein Wert zugewiesen wird. Wenn Ihr Skript mehrmals ausgeführt wird, wird esNone
jedes Mal überschrieben .Es ist nicht dasselbe wie ohne Zuweisung zu definieren. Ich versuche immer noch herauszufinden, wie ich dieses Problem umgehen kann.
quelle
Ist es möglich, eine Variable in Python zu deklarieren (var = None):
quelle
quelle
Wenn
None
es sich um einen gültigen Datenwert handelt, müssen Sie die Variable auf andere Weise verwenden. Du könntest benutzen:Dieser Sentinel wird von Nick Coghlan vorgeschlagen .
quelle
Sie können einen Interpreter mit diesem hässlichen Oneliner austricksen.
if None: var = None
Er fügtvar
dem lokalen Variablenwörterbuch eine Variable hinzu und initialisiert sie nicht. Der Interpreter löst die UnboundLocalError-Ausnahme aus, wenn Sie versuchen, diese Variable anschließend in einer Funktion zu verwenden. Dies würde auch für sehr alte Python-Versionen funktionieren. Nicht einfach oder schön, aber erwarten Sie nicht viel von Python.quelle