Zanurkuj w Pythonie/Deklarowanie zmiennych

Z Wikibooks, biblioteki wolnych podręczników.

Deklarowanie zmiennych[edytuj]

Wiemy 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.

Przykład. Definiowanie zmiennej 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.

Ś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]

Przykład. Odwoływanie się do niezdefiniowanej zmiennej
>>> 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[edytuj]

Jednym 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.

Przykład. Przypisywanie wielu wartości za pomocą jednego wyrażenia
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v                    #(1)
>>> x
'a'
>>> y
'b'
>>> z
'e'
  1. 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ści v 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.

Przykład. Przypisywanie kolejnych wartości
>>> 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
  1. Wbudowana funkcja range zwraca listę liczb całkowitych. W najprostszej formie funkcja ta bierze górną granicę i zwraca listę liczb od 0 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__.)
  2. PONIEDZIALEK, WTOREK, SRODA, CZWARTEK, PIATEK, SOBOTA i NIEDZIELA są zmiennymi, które zdefiniowaliśmy. (Ten przykład pochodzi z modułu calendar; 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.)
  3. Teraz każda zmienna ma własną wartość: PONIEDZIALEK ma 0, WTOREK ma 1 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]