Zanurkuj w Pythonie/Deklarowanie zmiennych
Deklarowanie zmiennych
edytujWiemy już trochę o słownikach, krotkach i o listach, więc wrócimy do przykładowego kodu przedstawionego w rozdziale drugim, do odbchelper.py.
Podobnie jak większość języków programowania Python posiada zarówno zmienne lokalne jak i globalne, choć nie deklarujemy ich w jakiś wyraźny sposób. Zmienne zostają utworzone, gdy przypisujemy im pewne wartości. Natomiast kiedy zmienna wychodzi poza zasięg, zostaje automatycznie usunięta.
myParams
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret" \
}
Zwróćmy uwagę na wcięcia. Instrukcje warunkowe jako bloki kodu są identyfikowane za pomocą wcięć, podobnie jak funkcje.
Zauważmy też, że dzięki wykorzystaniu backslasha ("\") mogliśmy przypisanie wartości do zmiennej podzielić na kilka linii. Backslashe w Pythonie są specjalnymi znakami, które umożliwiają kontynuację danej instrukcji w następnej linii.
Kiedy polecenie zostanie podzielone na kilka linii za pomocą znaku kontynuacji ("\"), następna linia może zostać wcięta w dowolny sposób. Python nie weźmie tego wcięcia pod uwagę. |
Ściśle mówiąc, wyrażenia w nawiasach okrągłych, kwadratowych i klamrowych (jak definiowanie słowników) można podzielić na wiele linii bez używania znaku kontynuacji ("\"). Niektórzy zalecają dodawać backslashe nawet wtedy, gdy nie jest to konieczne. Argumentują to tym, że kod staje się wtedy czytelniejszy. Jest to jednak wyłącznie kwestia gustu.
Wcześniej nigdy nie deklarowaliśmy żadnej zmiennej o nazwie myParams
, ale właśnie przypisaliśmy do niej wartość. Zachowanie to przypomina trochę VBScript bez instrukcji option explicit
. Na szczęście, w przeciwieństwie do VBScript, Python nie pozwala odwoływać się do zmiennych, do których nie zostały wcześniej przypisane żadne wartości. Jeśli spróbujemy to zrobić, Python rzuci wyjątek.
Odwoływanie się do zmiennych
edytuj>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'x' is not defined
>>> x = 1
>>> x
1
Kiedyś będziesz za to dziękować...
Wielozmienne przypisania
edytujJednym z lepszych Pythonowych skrótów jest wielozmienne przypisanie (ang. multi-variable assignment), czyli jednoczesne (za pomocą jednego wyrażenia) przypisywanie kilku wartości do kilku zmiennych.
>>> v = ('a', 'b', 'e') >>> (x, y, z) = v #(1) >>> x 'a' >>> y 'b' >>> z 'e'
v
jest krotką trzech elementów, a(x, y, z)
jest krotką trzech zmiennych. Przypisując jedną krotkę do drugiej, przypisaliśmy każdą z wartościv
do odpowiednich zmiennych (w odpowiedniej kolejności).
Może to zostać wykorzystane w wielu sytuacjach. Czasami chcemy przypisać pewnym zmiennym pewien zakres wartości np. od 1
do 10
. W języku C możemy utworzyć typy wyliczeniowe (enum
) poprzez ręczne utworzenie listy stałych i wartości jakie przechowują. Może to być trochę nudną i czasochłonną robotą, w szczególności gdy wartości są kolejnymi liczbami. W Pythonie możemy wykorzystać wbudowaną funkcję range
i wielozmienne przypisanie. W ten sposób z łatwością przypiszemy kolejne wartości do wielu zmiennych.
>>> range(7) #(1) [0, 1, 2, 3, 4, 5, 6] >>> (PONIEDZIALEK, WTOREK, SRODA, CZWARTEK, PIATEK, SOBOTA, NIEDZIELA) = range(7) #(2) >>> PONIEDZIALEK #(3) 0 >>> WTOREK 1 >>> NIEDZIELA 6
- Wbudowana funkcja
range
zwraca listę liczb całkowitych. W najprostszej formie funkcja ta bierze górną granicę i zwraca listę liczb od0
do podanej granicy (ale już bez niej). (Możemy także ustawić początkową wartość różną niż0
, a krok może być inny niż1
. Aby otrzymać więcej szczegółów wykorzystaj instrukcjęprint range.__doc__
.) PONIEDZIALEK
,WTOREK
,SRODA
,CZWARTEK
,PIATEK
,SOBOTA
iNIEDZIELA
są zmiennymi, które zdefiniowaliśmy. (Ten przykład pochodzi z modułucalendar
; nazwy zostały spolszczone. Modułcalendar
umożliwia wyświetlanie kalendarzy, podobnie jak to robi Uniksowy program cal. Modułcalendar
przechowuje dla odpowiednich dni tygodnia odpowiednie stałe.)- Teraz każda zmienna ma własną wartość:
PONIEDZIALEK
ma0
,WTOREK
ma1
itd.
Wielozmienne przypisania możemy wykorzystać przy tworzeniu funkcji zwracających wiele wartości w postaci krotki. Zwróconą wartość takiej funkcji możemy potraktować jako normalną krotkę lub też przypisać wszystkie elementy tej krotki do osobnych zmiennych za pomocą wielozmiennego przypisania. Wiele standardowych bibliotek korzysta z tej możliwości np. moduł os
, który omówimy w rozdziale 6.
Materiały dodatkowe
edytuj- Python Reference Manual pokazuje przykłady, kiedy można pominąć znak kontynuacji linii, a kiedy musisz go wykorzystać.
- How to Think Like a Computer Scientist wyjaśnia, jak za pomocą wielozmiennych przypisań zamienić wartości dwóch zmiennych.