Zanurkuj w Pythonie/Deklarowanie zmiennych: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
troche --> trochę
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
{{Podświetl|py}}
== Deklarowanie zmiennych ==
 
Wiemy już trochę o słownikach, krotkach czyi o listach, więc wrócimy do przykładowego kodu przedstawionego w [[../Twój pierwszy program|rozdziale drugim]], do <tt class="lang-none">{{Python/Src|odbchelper.py</tt>}}.
 
Podobnie jak większość języków programowania Python posiada zarówno zmienne lokalne 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, zostaniezostaje automatycznie usunięta.
 
{{Python/Przykład
''' Przykład |3.17. |Definiowanie zmiennej <ttcode>myParams</ttcode> '''
|tekst=
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 ("<tt>\</tt>") 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.
 
{{Infobox|Kiedy polecenie zostanie podzielone na kilka linii za pomocą znaku kontynuacji ("<tt>\</tt>"), następna linia może zostać wcięta w dowolny sposób. Python nie weźmie tego wcięcia pod uwagę.}}
Linia 22 ⟶ 24:
Ściśle mówiąc, wyrażenia w nawiasach okrągłych, kwadratowych i klamrowych (jak [[#Deklarowanie zmiennych|definiowanie słowników]]) można podzielić na wiele linii bez używania znaku kontynuacji ("<tt>\</tt>"). 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 <ttcode>myParams</ttcode>, ale właśnie przypisaliśmy do niej wartość. Zachowanie to przypomina trochę VBScript bez instrukcji <ttcode class="lang-nonevb">option explicit</ttcode>. 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 wyrzuci wyjątek.
 
=== Odwoływanie się do zmiennych ===
''' {{Python/Przykład
|3.18. |Odwoływanie się do niezdefiniowanej zmiennej '''
|tekst=
 
>>> x
{{sampErr|Traceback (innermostmost recent call last):
File "<interactive inputstdin>", line 1, in ?
NameError: Therename 'x' is nonot variable named 'x'defined}}
>>> x = 1
>>> x
{{samp|1}}
1
}}
 
Kiedyś będziesz za to dziękować...
 
==== Wielozmienne przypisania ====
==== Przypisywanie wielu wartości za jednym razem ====
 
Jednym z lepszych Pythonowych skrótów jest jednoczesne przypisywanie kilku wartości do kilku zmiennych.
 
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 3.19. Jednoczesne przypisywanie wielu wartości'''
 
{{Python/Przykład
==== |3.19|Przypisywanie wielu wartości za jednympomocą razemjednego ====wyrażenia
|tekst=
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v #(1)
>>> x
{{samp|'a'}}
>>> y
{{samp|'b'}}
>>> z
{{samp|'e'}}
 
# <ttcode>v</ttcode> jest trójelementową krotką trzech ''elementów'', a <ttcode>(x, y, z)</ttcode> jest krotką trzech ''zmiennych''. Przypisując jedną krotkę do drugiej, przypisaliśmy każdą z wartości <ttcode>v</ttcode> 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 <code>1</code> do <code>10</code>. W języku C możemy utworzyć typy wyliczeniowe (<ttcode class="lang-c">enum</ttcode>) 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ę <ttcode>range</ttcode> i możliwość jednoczesnego przypisywania wartości do wieluwielozmienne zmiennychprzypisanie. W ten sposób z łatwością przypiszemy kolejne wartości do wielu zmiennych.
 
''' {{Python/Przykład
|3.20. |Przypisywanie kolejnych wartości '''
|tekst=
>>> range(7) #(1)
{{samp|[0, 1, 2, 3, 4, 5, 6]}}
>>> (PONIEDZIALEK, WTOREK, SRODA, CZWARTEK, PIATEK, SOBOTA, NIEDZIELA) = range(7) #(2)
>>> PONIEDZIALEK #(3)
{{samp|0}}
0
>>> WTOREK
{{samp|1}}
1
>>> NIEDZIELA
{{samp|6}}
6
 
# Wbudowana funkcja <ttcode>range</ttcode> zwraca listę liczb całkowitych. W najprostszej formie funkcja ta bierze górną granicę i zwraca listę liczb od <code>0</code> do podanej granicy, wyłączając(ale już bez niej). (Ponadto możeszMożemy także ustawić początkową wartość na innąróżną niż <ttcode>0</ttcode>, a krok może być inny niż <ttcode>1</ttcode>. Aby otrzymać więcej szczegółów wykorzystaj instrukcję <ttcode>print range.__doc__</ttcode>.)
# <ttcode>PONIEDZIALEK</ttcode>, <ttcode>WTOREK</ttcode>, <ttcode>SRODA</ttcode>, <ttcode>CZWARTEK</ttcode>, <ttcode>PIATEK</ttcode>, <ttcode>SOBOTA</ttcode> i <ttcode>NIEDZIELA</ttcode> są zmiennymi, które zdefiniowaliśmy. (Ten przykład pochodzi z modułu <ttcode>calendar</ttcode>; nazwy zostały spolszczone. Moduł <code>calendar</code> ten umożliwia wyświetlanie kalendarzy, podobnie jak to robi Uniksowy program <tt class="lang-none">cal</tt>. Moduł <ttcode>calendar</ttcoe> przechowuje dla odpowiednich dni tygodnia odpowiednie stałe.)
# Teraz każda zmienna ma własną wartość: <ttcode>PONIEDZIALEK</ttcode> ma <ttcode>0</ttcode>, <ttcode>WTOREK</ttcode> ma <ttcode>1</ttcode> itd.
}}
 
Wielozmienne przypisania możemy wykorzystać przy tworzeniu funkcji zwracających wiele wartości w postaci krotki. Zwróconą wartość w takiej funkcji możemy potraktować jako normalną krotkę, czylub też przypisać wszystkie elementy tej krotki do osobnych zmiennych za pomocą wielozmiennego przypisania. Wiele standardowych bibliotek korzysta z tej możliwości, w tymnp. moduł <ttcode>os</ttcode>, który omówimy w [[Python/Wyjątki i operacje na plikach|rozdziale 6]].
 
===== Materiały dodatkowe =====
Linia 83 ⟶ 92:
[[Python/Formatowanie łańcucha znaków|Formatowanie łańcucha znaków]]|
}}
{{Podświetl|py}}
</noinclude>