Czy w Pythonie można zadeklarować zmienną ?:
var
tak, że został zainicjowany na Brak? Wygląda na to, że Python na to pozwala, ale gdy tylko uzyskasz do niego dostęp, ulega awarii. czy to możliwe? Jeśli nie to dlaczego?
EDYCJA: Chcę to zrobić dla takich przypadków:
value
for index in sequence:
if value == None and conditionMet:
value = index
break
Duplikować
- Niezainicjowana wartość w pythonie (tego samego autora)
- Czy w Pythonie są jakieś słowa kluczowe dotyczące deklaracji? (tego samego autora)
Związane z
python
variable-assignment
variable-declaration
Joan Venge
źródło
źródło
Odpowiedzi:
Dlaczego po prostu tego nie zrobić:
Python jest dynamiczny, więc nie musisz deklarować rzeczy; istnieją automatycznie w pierwszym zakresie, do którego zostały przypisane. Wszystko, czego potrzebujesz, to zwykłe stare oświadczenie o przydziale, jak wyżej.
To miłe, ponieważ nigdy nie skończysz z niezainicjowaną zmienną. Ale bądź ostrożny - to nie znaczy, że nie skończysz z niepoprawnie zainicjowanymi zmiennymi. Jeśli coś zainicjujesz
None
, upewnij się, że tego naprawdę chcesz i przypisz coś bardziej znaczącego, jeśli możesz.źródło
Serdecznie polecam przeczytanie Inne języki mają „zmienne” (dodałem je jako powiązany link) - za dwie minuty dowiesz się, że Python ma „nazwy”, a nie „zmienne”.
źródło
val = val or any_object
aby go zainicjować.is
do testowania, czy wartość jestNone
.W Pythonie 3.6+ możesz użyć do tego Zmiennych Adnotacji:
https://www.python.org/dev/peps/pep-0526/#abstract
PEP 484 wprowadził podpowiedzi typu, czyli adnotacje typu. Chociaż głównym celem były adnotacje funkcyjne, wprowadzono również pojęcie komentarzy typu do adnotacji zmiennych:
PEP 526 ma na celu dodanie składni do Pythona w celu opisywania typów zmiennych (w tym zmiennych klas i zmiennych instancji), zamiast wyrażania ich poprzez komentarze:
Wydaje się, że jest to bardziej zgodne z tym, o co pytasz: „Czy można jedynie zadeklarować zmienną bez przypisywania żadnej wartości w Pythonie?”
źródło
Nie jestem pewien, co próbujesz zrobić. Python jest bardzo dynamicznym językiem; zwykle nie musisz deklarować zmiennych, dopóki nie zamierzasz ich przypisać lub użyć. Myślę, że to, co chcesz zrobić, jest po prostu
który przypisze wartość
None
do zmiennejfoo
.EDYCJA: Wydaje się, że naprawdę chcesz to zrobić:
Trochę trudno jest stwierdzić, czy to naprawdę odpowiedni styl do użycia z takiego krótkiego przykładu kodu, ale jest to bardziej „Pythoński” sposób pracy.
EDYCJA: poniżej jest komentarz JFS (opublikowany tutaj, aby pokazać kod)
Nie ma związku z pytaniem PO, ale powyższy kod można przepisać jako:
UWAGA: jeśli
some_condition()
podniesiony zostanie wyjątek, wówczas niefound
jest związany.UWAGA: jeśli len (sekwencja) == 0, to
item
jest niezwiązane.Powyższy kod nie jest wskazany. Jego celem jest zilustrowanie działania zmiennych lokalnych, a mianowicie, czy „zmienna” jest „zdefiniowana”, w tym przypadku można ją określić tylko w czasie wykonywania. Preferowany sposób:
Lub
źródło
Zazwyczaj inicjuję zmienną do czegoś, co oznacza typ
lub
Jeśli będzie to obiekt, nie inicjuj go, dopóki go nie utworzysz:
źródło
Cóż, jeśli chcesz sprawdzić, czy zmienna jest zdefiniowana, czy nie, to dlaczego nie sprawdzić, czy jest ona w tablicach locals () czy globals ()? Twój kod został przepisany:
Jeśli szukasz zmiennej lokalnej, zamień globals () na locals ().
źródło
Przede wszystkim moja odpowiedź na pierwotnie zadane pytanie
P: Jak mogę sprawdzić, czy zmienna jest zdefiniowana w pewnym punkcie mojego kodu?
Odp .: Czytaj w pliku źródłowym, aż zobaczysz linię, w której ta zmienna jest zdefiniowana.
Ale podałeś przykład kodu, że istnieją różne permutacje, które są dość pytoniczne. Poszukujesz sposobu na skanowanie sekwencji w poszukiwaniu elementów pasujących do warunków, więc oto kilka rozwiązań:
Najwyraźniej w tym przykładzie możesz zamienić na
raise
wreturn None
zależności od tego, co chcesz osiągnąć.Jeśli chcesz wszystkiego, co odpowiada warunkowi, możesz to zrobić:
Jest inny sposób na zrobienie tego z
yield
tym, że nie zawracam ci głowy pokazaniem, ponieważ jest to dość skomplikowane w działaniu.Ponadto istnieje jeden liniowy sposób osiągnięcia tego:
źródło
Jeśli dobrze rozumiem twój przykład, nie musisz odwoływać się do „wartości” w instrukcji if. Zrywasz się z pętli, gdy tylko można to ustawić na cokolwiek.
źródło
Wyglądasz, jakbyś próbował napisać C w Pythonie. Jeśli chcesz znaleźć coś w sekwencji, Python ma wbudowane funkcje, aby to zrobić, na przykład
źródło
To dobre pytanie i niestety złe odpowiedzi, ponieważ
var = None
już przypisuje wartość, a jeśli skrypt uruchamia się wiele razy, zaNone
każdym razem jest zastępowany .To nie to samo, co definiowanie bez przypisania. Wciąż próbuję wymyślić, jak obejść ten problem.
źródło
Czy można zadeklarować zmienną w Pythonie (var = None):
źródło
źródło
Jeśli
None
jest to poprawna wartość danych, musisz zmienić zmienną w inny sposób. Możesz użyć:Ten wartownik jest sugerowany przez Nicka Coghlana .
źródło
Za pomocą tego brzydkiego onelinera można oszukać interpretera.
if None: var = None
Nie robi on nic poza dodawaniem zmiennejvar
do lokalnego słownika zmiennych, a nie inicjowaniem jej. Interpreter zgłosi wyjątek UnboundLocalError, jeśli spróbujesz później użyć tej zmiennej w funkcji. Działa to również w przypadku bardzo starożytnych wersji Pythona. Nie jest to ani proste, ani piękne, ale nie oczekuj wiele od Pythona.źródło