387 Stimmen

Ist es in Python möglich, eine Variable nur zu deklarieren, ohne ihr einen Wert zuzuweisen?

Ist es möglich, eine Variable in Python zu deklarieren, etwa so?

var

so dass es auf Keine initialisiert? Es scheint, als ob Python dies erlaubt, 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

Duplizieren Sie

Verwandte Seiten

463voto

Todd Gamblin Punkte 56250

Warum nicht einfach so:

var = None

Python ist dynamisch, daher müssen Sie Dinge nicht deklarieren; sie existieren automatisch in dem ersten Bereich, in dem sie zugewiesen werden. Alles, was Sie also brauchen, ist eine normale alte Zuweisungsanweisung wie oben.

Das ist gut, weil Sie nie mit einer nicht initialisierten Variablen enden werden. Aber seien Sie vorsichtig - das bedeutet nicht, dass Sie nicht mit falsch initialisierte Variablen. Wenn Sie etwas in die None Vergewissern Sie sich, dass es das ist, was Sie wirklich wollen, und vergeben Sie etwas Sinnvolleres, wenn Sie können.

88voto

Tagar Punkte 12059

In Python 3.6+ können Sie dafür Variable Annotations verwenden:

https://www.python.org/dev/peps/pep-0526/#abstract

PEP 484 führte Typ-Hinweise, auch bekannt als Typ-Annotationen, ein. Der Schwerpunkt lag zwar auf Funktionskommentaren, aber es wurde auch der Begriff der Typkommentare zur Kommentierung von Variablen eingeführt:

# 'captain' is a string (Note: initial value is a problem)
captain = ...  # type: str

PEP 526 zielt darauf ab, Python eine Syntax hinzuzufügen, um die Typen von Variablen (einschließlich Klassenvariablen und Instanzvariablen) zu annotieren, anstatt sie durch Kommentare auszudrücken:

captain: str  # Note: no initial value!

Das scheint eher dem zu entsprechen, was du gefragt hast: "Ist es möglich, in Python eine Variable nur zu deklarieren, ohne ihr einen Wert zuzuweisen?"

60voto

jfs Punkte 370717

Ich empfehle Ihnen von Herzen die Lektüre von Andere Sprachen haben "Variablen" (Ich habe es als verwandten Link hinzugefügt) - in zwei Minuten werden Sie wissen, dass Python "Namen" hat, nicht "Variablen".

val = None
# ...
if val is None:
   val = any_object

16voto

kquinn Punkte 10083

Ich bin mir nicht sicher, was Sie vorhaben. Python ist eine sehr dynamische Sprache. Normalerweise müssen Sie Variablen erst deklarieren, wenn Sie sie tatsächlich zuweisen oder verwenden wollen. Ich denke, was Sie tun wollen, ist einfach

foo = None

der den Wert None auf die Variable foo .

EDIT: Was Sie wirklich zu wollen scheinen, ist genau dies:

#note how I don't do *anything* with value here
#we can just start using it right inside the loop

for index in sequence:
   if conditionMet:
       value = index
       break

try:
    doSomething(value)
except NameError:
    print "Didn't find anything"

Es ist ein bisschen schwierig zu sagen, ob das wirklich der richtige Stil ist, um ein so kurzes Codebeispiel zu verwenden, aber es es eine eher "pythonische" Arbeitsweise.

EDIT: unten ist ein Kommentar von JFS (hier gepostet, um den Code zu zeigen)

Unabhängig von der Frage des Auftraggebers kann der obige Code wie folgt umgeschrieben werden:

for item in sequence:
    if some_condition(item): 
       found = True
       break
else: # no break or len(sequence) == 0
    found = False

if found:
   do_something(item)

HINWEIS: Wenn some_condition() eine Ausnahme auslöst, dann found ist ungebunden.
HINWEIS: wenn len(sequence) == 0 dann item ist ungebunden.

Der obige Code ist nicht ratsam. Er dient dazu, die Funktionsweise lokaler Variablen zu veranschaulichen, d.h. ob eine "Variable" "definiert" ist, kann in diesem Fall erst zur Laufzeit festgestellt werden. Bevorzugter Weg:

for item in sequence:
    if some_condition(item):
       do_something(item)
       break

Oder

found = False
for item in sequence:
    if some_condition(item):
       found = True
       break

if found:
   do_something(item)

3voto

Johan Punkte 1188

Nun, wenn Sie prüfen wollen, ob eine Variable definiert ist oder nicht, warum nicht prüfen, ob sie in den Arrays locals() oder globals() enthalten ist? Ihr Code wurde umgeschrieben:

for index in sequence:
   if 'value' not in globals() and conditionMet:
       value = index
       break

Wenn Sie eine lokale Variable suchen, ersetzen Sie globals() durch locals().

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X