SlideShare a Scribd company logo
1 of 45
Download to read offline
Python. Rozmówki
                           Autor: Brad Dayley
                           T³umaczenie: Anna Trojan
                           ISBN: 978-83-246-0950-5
                           Tytu³ orygina³u: Python Phrasebook
                           Format: B6, stron: 296




                                      Podrêczny zbiór najbardziej przydatnych konstrukcji jêzyka Python
                               • Poznaj sk³adniê jêzyka Pyton
                               • Naucz siê wykonywaæ najczêœciej u¿ywane operacje
                               • U¿ywaj gotowych elementów do szybkiego tworzenia rozwi¹zañ w Pythonie
                           Prawdopodobnie s³ysza³eœ ju¿ o zaletach Pythona. Jest przenoœny i dzia³a w niemal
                           wszystkich systemach operacyjnych. Ma niezwykle czyteln¹ i prost¹ sk³adniê, a jego
                           odmiany mog¹ wspó³pracowaæ z innymi jêzykami programowania. Mówi siê tak¿e, ¿e
                           pozwala skróciæ czas pisania kodu kilka razy w porównaniu z jêzykiem C++. To jeszcze
                           nie wszystkie atuty Pythona, o czym wkrótce siê przekonasz, pisz¹c swoje pierwsze
                           programy w tym jêzyku.
                           Dziêki ksi¹¿ce „Python. Rozmówki” b³yskawicznie poznasz najwa¿niejsze zwroty
                           i konstrukcje oraz podstawy sk³adni tego jêzyka programowania. Nauczysz siê miêdzy
                           innymi wykonywaæ w aplikacjach operacje na ³añcuchach i pracowaæ z typami danych,
                           a tak¿e pisaæ programy wielow¹tkowe i sieciowe. Dowiesz siê, jak zarz¹dzaæ plikami
                           i przetwarzaæ je oraz jak obs³ugiwaæ bazy danych.
                               • Sk³adnia jêzyka Python
                               • Przetwarzanie ³añcuchów danych
                               • Korzystanie z typów danych
                               • Praca z plikami
                               • Tworzenie aplikacji wielow¹tkowych
                               • Komunikacja z bazami danych
                               • Obs³uga komunikacji sieciowej
                               • Tworzenie us³ug sieciowych
                               • Przetwarzanie danych w formatach XML i HTML
Wydawnictwo Helion
                             Wykorzystaj gotowe fragmenty kodu — zacznij pisaæ niezawodne programy w Pythonie
ul. Koœciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
O autorze ........................................................................... 9

    Wprowadzenie ................................................................ 11

1   Podstawy Pythona ........................................................... 13
    Przyczyny popularności Pythona ........................................... 14
    Wywoływanie interpretera ................................................... 15
    Wbudowane typy ................................................................ 16
    Podstawy składni Pythona ................................................... 22
    Obiekty, moduły, klasy i funkcje Pythona ............................. 30
    Obsługa błędów .................................................................. 43
    Wykorzystywanie narzędzi systemowych ............................. 45

2   Przetwarzanie łańcuchów znaków .................................. 53
    Porównywanie łańcuchów znaków ...................................... 54
    Łączenie łańcuchów znaków ................................................ 55
    Dzielenie łańcuchów znaków ............................................... 57
    Wyszukiwanie podłańcuchów w łańcuchu znaków ............... 58
    Wyszukiwanie i zastępowanie w łańcuchach znaków ........... 60
    Wyszukiwanie łańcuchów znaków
     z konkretnym początkiem lub końcem ................................ 61
Spis treści


        Przycinanie łańcuchów znaków ............................................ 62
        Wyrównanie i formatowanie łańcuchów znaków .................. 64
        Wykonywanie kodu zawartego w łańcuchach znaków ......... 66
        Zastępowanie zmiennych wewnątrz łańcuchów znaków ...... 67
        Konwersja Unicode do lokalnych łańcuchów znaków ........... 69

    3   Zarządzanie typami danych .............................................73
        Definiowanie listy ................................................................ 74
        Dostęp do listy ..................................................................... 76
        Wycinek listy ........................................................................ 77
        Dodawanie i usuwanie elementów listy ............................... 79
        Sortowanie listy ................................................................... 82
        Wykorzystywanie krotek ....................................................... 84
        Tworzenie słownika ............................................................. 87
        Dodawanie wartości do słownika ......................................... 88
        Pobieranie wartości ze słownika ........................................... 91
        Wycinek słownika ................................................................ 93
        Zamiana kluczy na wartości w słowniku ............................... 95

    4   Praca z plikami .................................................................97
        Otwieranie i zamykanie pliku ............................................... 98
        Odczytywanie całego pliku ................................................. 100
        Odczytywanie pojedynczego wiersza z pliku ....................... 103
        Dostęp do każdego słowa z pliku ....................................... 104
        Zapisywanie do pliku ......................................................... 105
        Ustalenie liczby wierszy w pliku ......................................... 107
        Przechodzenie drzewa katalogów ....................................... 108
        Zmiana nazwy pliku ........................................................... 109
        Rekurencyjne kasowanie plików i podkatalogów ................ 111
        Wyszukiwanie plików w oparciu o rozszerzenie .................. 113
        Tworzenie archiwum TAR ................................................... 115

4
Spis treści


    Wyodrębnianie pliku z archiwum TAR ................................ 117
    Dodawanie plików do archiwum ZIP .................................. 119
    Wyodrębnianie plików z archiwum ZIP ............................... 121

5   Zarządzanie wątkami .................................................... 123
    Rozpoczynanie nowego wątku ........................................... 124
    Tworzenie i wychodzenie z wątków ................................... 126
    Synchronizacja wątków ...................................................... 128
    Implementacja wielowątkowej kolejki priorytetowej .......... 130
    Inicjalizacja wątku z przerwaniem zegarowym ................... 133

6   Praca z bazami danych .................................................. 137
    Dodawanie wpisów do pliku DBM ..................................... 138
    Pobieranie wpisów z pliku DBM ......................................... 140
    Uaktualnianie wpisów w pliku DBM ................................... 142
    Serializacja obiektów do pliku ............................................ 144
    Deserializacja obiektów z pliku .......................................... 147
    Przechowywanie obiektów w pliku shelve ......................... 149
    Pobieranie obiektów z pliku shelve .................................... 152
    Zmiana obiektów w pliku shelve ........................................ 154
    Łączenie się z serwerem bazy danych MySQL ..................... 156
    Tworzenie bazy danych MySQL .......................................... 159
    Dodawanie wpisów do bazy danych MySQL ...................... 161
    Pobieranie wpisów z bazy danych MySQL .......................... 163

7   Implementacja komunikacji internetowej ..................... 167
    Otwieranie gniazda po stronie serwera
     dla otrzymywania danych ................................................ 168
    Otwieranie gniazda po stronie klienta
     do przesyłania danych ...................................................... 171
    Otrzymywanie danych strumieniowych
     za pomocą modułu ServerSocket ...................................... 173
                                                                                        5
Spis treści


        Przesyłanie danych strumieniowych ................................... 175
        Wysyłanie e-maili za pośrednictwem SMTP ........................ 177
        Pobieranie poczty elektronicznej z serwera POP3 ................ 179
        Wykorzystywanie Pythona do pobierania
         plików z serwera FTP .......................................................... 182

    8   Przetwarzanie HTML ......................................................187
        Przetwarzanie adresów URL ............................................... 188
        Otwieranie dokumentów HTML .......................................... 191
        Pobieranie łączy z dokumentów HTML ............................... 194
        Pobieranie obrazków z dokumentów HTML ........................ 196
        Pobieranie tekstu z dokumentów HTML .............................. 199
        Pobieranie plików cookie ................................................... 201
        Dodawanie cudzysłowów do wartości
         atrybutów w dokumentach HTML ..................................... 204

    9   Przetwarzanie XML ........................................................209
        Ładowanie dokumentu XML ............................................... 210
        Sprawdzanie poprawności składniowej
         dokumentów XML ............................................................ 212
        Dostęp do węzłów potomnych ........................................... 214
        Dostęp do atrybutów elementów ....................................... 219
        Dodanie węzła do drzewa DOM ......................................... 221
        Usuwanie węzła z drzewa DOM ......................................... 224
        Przeszukiwanie dokumentów XML ..................................... 227
        Ekstrakcja tekstu z dokumentów XML ................................. 231
        Przetwarzanie znaczników XML .......................................... 234




6
Spis treści


10 Programowanie usług sieciowych ................................. 237
   Tworzenie stron internetowych w HTML
    za pomocą skryptów CGI .................................................. 238
   Przetwarzanie parametrów przekazywanych
    do skryptów CGI .............................................................. 241
   Tworzenie skryptów CGI, które przesyłają
    informacje same do siebie ................................................ 244
   Pozwalanie użytkownikom na przesyłanie
    plików za pomocą skryptów CGI ...................................... 248
   Tworzenie serwera HTTP do obsługi żądań GET ................. 252
   Tworzenie serwera HTTP do obsługi żądań POST ................ 256
   Tworzenie serwera HTTP obsługującego skrypty CGI .......... 261
   Wysyłanie żądania HTTP GET ze skryptu Pythona ............... 263
   Wysyłanie żądania HTTP POST ze skryptu Pythona ............. 266
   Tworzenie serwera XML-RPC .............................................. 269
   Tworzenie klienta XML-RPC ............................................... 271
   Wykorzystywanie SOAPpy w dostępie do usług
    sieciowych SOAP za pośrednictwem pliku WSDL .............. 273

     Skorowidz ...................................................................... 279




                                                                                            7
ython jest zorientowanym obiektowo językiem progra-
mowania o wyjątkowych możliwościach i elastyczności.
Widać w nim podobieństwa do języków skryptowych ta-
kich jak Perl, Scheme i TCL oraz do innych języków pro-
gramowania, takich jak Java oraz C.

Niniejszy rozdział ma na celu ramowe przedstawienie tego
języka programowania, co powinno pomóc w zrozumieniu
kolejnych rozdziałów książki. Nie będzie on jednak wy-
czerpujący; powinien dać ogólny obraz języka oraz pomóc
zrozumieć jego podstawy, tak by w celu uzyskania dokład-
niejszych informacji wystarczyło sięgnięcie do dokumentacji
Pythona.
ROZDZIAŁ 1         Przyczyny popularności Pythona



                   Przyczyny
                   popularności Pythona
                   Istnieje kilka przyczyn popularności Pythona. Jest on jed-
                   nym z łatwiejszych języków, dzięki którym można rozpo-
                   cząć swoją przygodę z programowaniem, a mimo to posiada
                   ogromne możliwości, nadające się do zastosowania w więk-
                   szych aplikacjach. Poniższe punkty opisują tylko niektóre
                   przydatne cechy Pythona:
                     n   Przenośność: Python działa na prawie każdym syste-
PODSTAWY PYTHONA




                         mie operacyjnym, w tym na Linuksie/Uniksie, Win-
                         dows, Mac, OS/2 i innych.
                     n   Integracja: Python może zostać zintegrowany z obiek-
                         tami COM, .NET oraz CORBA. Istnieje implemen-
                         tacja Jython, która pozwala na używanie Pythona na
                         dowolnej platformie Javy. IronPython jest implemen-
                         tacją, która umożliwia programistom Pythona do-
                         stęp do bibliotek .NET. Python może także zawierać
                         opakowany kod w językach C czy C++.
                     n   Prostota: Łatwo jest rozpocząć pisanie programów
                         w Pythonie. Jasna, czytelna składnia sprawia, że two-
                         rzenie aplikacji i usuwanie z nich błędów jest naprawdę
                         proste.
                     n   Możliwości: Cały czas powstają rozszerzenia do Py-
                         thona, które służą funkcjom takim jak dostęp do bazy
                         danych, edycja materiałów audio i video, GUI, two-
                         rzenie stron internetowych i tak dalej.


     14
Wywoływanie interpretera




                                                              ROZDZIAŁ 1
 n   Elastyczność: Python jest jednym z najbardziej ela-
     stycznych języków. Łatwo jest zacząć szybko tworzyć
     kod, który będzie rozwiązywał problemy związane
     z projektowaniem i programowaniem.
 n   Open-source: Python jest językiem o otwartym kodzie
     źródłowym, co oznacza, że można go swobodnie i za
     darmo używać i dystrybuować.



Wywoływanie interpretera




                                                              PODSTAWY PYTHONA
Skrypty w Pythonie są wykonywane przez interpreter Py-
thona. W większości systemów operacyjnych można uru-
chomić interpreter Pythona, wykonując polecenie python
w wierszu poleceń. Może to jednak wyglądać inaczej w za-
leżności od systemu operacyjnego i środowiska, w którym
się pracuje. Niniejszy podrozdział omawia standardowe
metody wywoływania interpretera, by wykonywał on in-
strukcje Pythona oraz pliki ze skryptami.

Wywoływanie interpretera bez przekazania mu pliku ze
skryptem w charakterze parametru powoduje wyświetle-
nie następujących wierszy:

 bwd-linux:/book # python
 Python 2.4.2 (#1, Apr 9 2006, 19:25:19)
 [GCC 4.1.0 (SUSE Linux)] on linux2
 Type "help", "copyright", "credits" or "license" for
 more information.
 >>>




                                                              15
ROZDZIAŁ 1         Wbudowane typy


                   Wiersz poleceń Pythona wyświetla >>>. Jeśli wykona się
                   polecenie, które wymaga więcej danych wejściowych, zo-
                   stanie wyświetlony znak zachęty .... Z wiersza poleceń
                   interpretera można wykonywać pojedyncze instrukcje Py-
                   thona, jak poniżej:

                    >>> print "Drukowanie łańcucha znaków"
                    Drukowanie łańcucha znaków


                   Wywołanie interpretera wraz ze skryptem jako parame-
                   trem, co zaprezentowano poniżej, rozpoczyna wykonywa-
                   nie skryptu i kontynuuje aż do zakończenia skryptu. Kiedy
PODSTAWY PYTHONA




                   skrypt zostaje zakończony, interpreter przestaje być aktywny.

                    bwd-linux:/book # python script.py
                    Wykonywanie skryptu
                    bwd-linux:/book #


                   Skrypty mogą także być uruchamiane z interpretera po-
                   przez wykorzystanie wbudowanej w Pythona funkcji
                   execfile(script), gdzie script jest uruchamianym
                   skryptem Pythona. Poniższy przykład prezentuje skrypt
                   wykonywany za pomocą funkcji execfile():

                    >>> execfile("script.py")
                    Wykonywanie skryptu
                    >>>




                   Wbudowane typy
                   Najczęściej wykorzystywane typy Pythona, wbudowane
                   w ten język, można pogrupować w kategorie wymienione
                   w tabeli 1.1. Kolumna „Nazwa typu” pokazuje nazwę po-
     16
Wbudowane typy




                                                                 ROZDZIAŁ 1
wiązaną z każdym z wbudowanych typów i może być wy-
korzystywana w celu ustalenia, czy obiekt jest określonego
typu, za pomocą funkcji isinstance(object, typename),
gdzie object to sprawdzany obiekt, natomiast typename
jest nazwą typu, jak poniżej:

 >>> s = "Prosty łańcuch znaków"
 >>> print isinstance(s, basestring)
 True
 >>> print isinstance(s, dict)
 False
 >>>


Tabela 1.1. Popularne wbudowane typy Pythona




                                                                 PODSTAWY PYTHONA
 Kategoria typu   Nazwa typu        Opis
 None             types.NoneType    Obiekt None (obiekt null)
 Liczby           bool              True lub False   (Boolean)
                  int               Liczba całkowita
                  long              Długa liczba całkowita
                  float             Liczba
                                    zmiennoprzecinkowa
                  complex           Liczba zespolona
 Zbiory           set               Zbiór zmienny
                  frozenset         Zbiór niezmienny
 Sekwencje        str               Łańcuch znaków
                  unicode           Łańcuch znaków Unicode
                  basestring        Typ bazowy dla
                                    wszystkich łańcuchów
                                    znaków
                  list              Lista
                  tuple             Krotka
                  xrange            Sekwencja niezmienna
                                                                 17
ROZDZIAŁ 1         Wbudowane typy


                   Tabela 1.1. Popularne wbudowane typy Pythona — ciąg dalszy
                    Kategoria typu   Nazwa typu        Opis
                    Odwzorowania     dict              Słownik
                    Pliki            file              Plik
                    Wywoływalne      type              Typ dla wszystkich
                    (Callable)                         wbudowanych typów
                                     object            Rodzic wszystkich
                                                       typów i klas
                                     types.Builtin-    Wbudowana funkcja
                                     FunctionType
                                     types.Builtin-    Wbudowana metoda
PODSTAWY PYTHONA




                                     MethodType
                                     types.            Funkcja zdefiniowana
                                     FunctionType      przez użytkownika
                                     types.            Obiekt klasy
                                     InstanceType
                                     types.            Metoda związana
                                     MethodType
                                     types.Unboun-     Metoda niezwiązana
                                     dedMethodType
                    Moduły           types.            Moduł
                                     ModuleType
                    Klasy            object            Rodzic wszystkich klas
                    Typy             type              Typ dla wszystkich
                                                       wbudowanych typów


                    UWAGA
                    By możliwe było korzystanie z dowolnych obiektów typów
                    takich jak type oraz types.ModuleType, moduł typów musi
                    być zaimportowany.




     18
Wbudowane typy




                                                           ROZDZIAŁ 1
None
Typ None odpowiada obiektowi pustemu (ang. null), który
nie posiada żadnej wartości. Typ None jest w Pythonie
jedynym obiektem, który może być obiektem pustym.
Składnia wykorzystywana w celu użycia tego typu w pro-
gramach to po prostu None.


Liczby
Typy liczbowe w Pythonie są bardzo proste. Typ bool




                                                           PODSTAWY PYTHONA
posiada dwie możliwe wartości: True oraz False. Typ int
przechowuje wewnętrznie 32-bitowe liczby całkowite. Typ
long może przechowywać liczby ograniczone jedynie przez
dostępną pamięć maszyny. Typ float wykorzystuje wbu-
dowane liczby podwójnej precyzji do przechowywania 64-
bitowych liczb zmiennoprzecinkowych. Typ complex
przechowuje liczby jako pary liczb zmiennoprzecinkowych.
Wartości te są dostępne za pomocą atrybutów z.real
i z.imag obiektu complex.


Zbiór
Typ zbioru reprezentuje nieuporządkowany zbiór unikal-
nych elementów. Istnieją dwa podstawowe typy zbiorów:
zmienny (ang. mutable) set oraz niezmienny (ang. immu-
table) frozenset. Zbiory zmienne mogą być modyfikowane
(można do nich dodawać i odejmować od nich elementy).
Zbiory niezmienne nie mogą być modyfikowane po utwo-
rzeniu.

                                                           19
ROZDZIAŁ 1         Wbudowane typy



                    UWAGA
                    Wszystkie elementy umieszczone w zbiorze muszą być typu
                    niezmiennego, dlatego też zbiory nie mogą zawierać ele-
                    mentów takich jak listy czy słowniki. Mogą jednak obejmo-
                    wać łańcuchy znaków oraz krotki.


                   Sekwencje
                   W Pythonie istnieje kilka typów sekwencji. Sekwencje są
                   uporządkowane i mogą być indeksowane przez liczby nie-
PODSTAWY PYTHONA




                   ujemne. Sekwencje można łatwo przetwarzać i mogą one
                   składać się z prawie każdego obiektu Pythona.

                   Dwa najczęściej dotychczas spotykane typy sekwencji to
                   łańcuchy znaków oraz listy. W rozdziale 2., „Przetwarzanie
                   łańcuchów znaków”, omówione jest tworzenie i wyko-
                   rzystywanie łańcuchów znaków. W rozdziale 3., „Zarzą-
                   dzanie typami danych”, omówione zostały najpopularniejsze
                   rodzaje sekwencji wraz z operacjami ich tworzenia i prze-
                   twarzania.


                   Odwzorowania
                   Typ odwzorowań reprezentuje dwie grupy obiektów. Pierw-
                   szą z nich jest zbiór kluczy, które indeksują drugą grupę,
                   zawierającą zbiór wartości. Każdy klucz indeksuje kon-
                   kretną wartość z odpowiadającego mu zbioru. Klucz musi
                   być typem niezmiennym. Wartością może być prawie każdy
                   obiekt Pythona.


     20
Wbudowane typy




                                                               ROZDZIAŁ 1
Słownik jest jedynym typem odwzorowania wbudowanym
obecnie w Pythonie. W rozdziale 3. omówiono słowniki,
ich tworzenie oraz przetwarzanie.


Pliki
Typ pliku jest w Pythonie obiektem, który reprezentuje
otwarty plik. Obiekty tego typu mogą być wykorzystywane
do odczytywania danych z systemu plików i zapisywania
ich do niego. W rozdziale 4., „Praca z plikami”, omówiono
obiekty plików, a także zaprezentowano niektóre z najczę-




                                                               PODSTAWY PYTHONA
ściej wykorzystywanych sposobów związanych z używa-
niem plików w Pythonie.


Wywoływalne
Obiekty typu wywoływalnego (ang. callable) obsługują
operacje wywoływania funkcji w Pythonie, co oznacza,
że mogą być wywoływane jako funkcje programu. Do
kategorii tej zalicza się kilka typów wywoływalnych. Naj-
częściej spotykane są funkcje wbudowane w Pythona, funk-
cje zdefiniowane przez użytkownika, klasy oraz obiekty
metod.

 UWAGA
 Klasy są uznawane za typy wywoływalne, ponieważ klasa
 wywoływana jest w celu utworzenia nowego obiektu tej klasy.
 Kiedy powoła się nowy obiekt klasy, obiekty metod tej klasy
 także stają się wywoływalne.

                                                               21
ROZDZIAŁ 1         Podstawy składni Pythona



                   Moduły
                   Typ modułu reprezentuje moduły Pythona, które zostały
                   załadowane za pomocą instrukcji import. Instrukcja import
                   tworzy obiekt typu modułu o tej samej nazwie co moduł
                   Pythona. Następnie wszystkie obiekty wewnątrz modułu
                   są dodawane do atrybutu __dict__ nowoutworzonego
                   obiektu typu modułu.

                   Dostęp do obiektów modułu można uzyskać bezpośred-
                   nio za pomocą składni z kropkami, ponieważ jest on tłuma-
PODSTAWY PYTHONA




                   czony na wyszukiwanie w słowniku. W ten sposób można
                   użyć module.object zamiast dostępu do atrybutu poprzez
                   module.__dict__("object") w celu uzyskania dostępu
                   do obiektów modułu.

                   Przykładowo, moduł math zawiera obiekt liczbowy pi;
                   poniższy kod ładuje moduł math i wywołuje obiekt pi:

                    >>> import math
                    >>> print math.pi
                    3.14159265359




                   Podstawy składni Pythona
                   Język Python posiada wiele cech wspólnych z Perlem, ję-
                   zykiem C oraz Javą. Istnieją jednak pomiędzy nimi także
                   pewne zdecydowane różnice. Niniejszy podrozdział po-
                   święcony jest krótkiemu opisowi składni, z którą można
                   się spotkać w Pythonie.


     22
Podstawy składni Pythona




                                                               ROZDZIAŁ 1
Używanie wcięć kodu
Jedną z pierwszych trudności, jakie napotykają programiści
uczący się Pythona, jest brak nawiasów klamrowych do
oznaczania bloków kodu dla definicji klas i funkcji czy do
sterowania przepływem. Bloki kodu są oznaczane przez
wcięcia wierszy, co jest surowo wymuszane.

Liczba spacji we wcięciu może być różna, jednak wszystkie
instrukcje wewnątrz bloku muszą być wcięte o tyle samo.
Oba bloki w poniższym przykładzie są poprawne:




                                                               PODSTAWY PYTHONA
 if True:
     print "Prawda"
 else:
   print "Fałsz"


Jednak drugi blok w kolejnym przykładzie wygeneruje błąd:

 if True:
    print "Odpowiedź"
    print "Prawda"
 else:
    print "Odpowiedź"
  print "Fałsz"



Tworzenie wielowierszowych instrukcji
Instrukcje w Pythonie zazwyczaj kończą się znakiem końca
wiersza. Python pozwala jednak na używanie znaku konty-
nuacji wiersza () do oznaczenia, że wiersz ma swój ciąg
dalszy. Przykładowo:


                                                               23
ROZDZIAŁ 1         Podstawy składni Pythona


                    total_sum = sum_item_one + 
                                sum_item_two + 
                                sum_item_three


                   Instrukcje zawarte wewnątrz nawiasów [], {} czy () nie
                   wymagają użycia znaku kontynuacji wiersza. Przykładowo:

                    week_list = ['Poniedziałek', 'Wtorek', 'Środa',
                                 'Czwartek', 'Piątek']



                   Cudzysłów
PODSTAWY PYTHONA




                   Python zezwala na używanie apostrofów (') i cudzysło-
                   wu (") bądź też trzech apostrofów ('''), lub trzech cu-
                   dzysłowów (""") do oznaczenia literałów łańcuchów
                   znaków, pod warunkiem, że ten sam typ znaku rozpo-
                   czyna i kończy łańcuch. Potrójne cudzysłowy mogą być
                   wykorzystywane do rozciągnięcia łańcucha znaków na
                   wiele wierszy. Przykładowo, wszystkie poniższe przykła-
                   dy są poprawne:

                    word = 'słowo'
                    sentence = "To jest zdanie."
                    paragraph = """To jest akapit. Składa się
                    z kilku wierszy i zdań."""



                   Formatowanie łańcuchów znaków
                   Python pozwala, by łańcuchy znaków były formatowane
                   z użyciem predefiniowanego formatującego łańcucha zna-
                   ków z listą zmiennych. Poniżej znajduje się przykład uży-
                   wania wielu formatujących łańcuchów znaków do wyświe-
                   tlenia tych samych danych:

     24
Podstawy składni Pythona




                                                                ROZDZIAŁ 1
 >>> list = ['Brad', 'Dayley', '"Python. Rozmówki"',
 2007]

 >>>   letter = """
 ...   Szanowny Panie %s,n
 ...   Dziękujemy za przesłanie nam Pańskiej książki, %s.
 ...   Skontaktujemy się z Panem w %d roku."""

 >>>   display = """
 ...   Tytuł: %s
 ...   Autor: %s, %s
 ...   Data: %d"""

 >>> record = "%s|%s|%s|%08d"

 >>> print letter % (list[1], list[2], list[3])




                                                                PODSTAWY PYTHONA
 Szanowny Panie Dayley,
 Dziękujemy za przesłanie nam Pańskiej książki,
 "Python. Rozmówki".
 Skontaktujemy się z Panem w 2007 roku.

 >>> print display % (list[2], list[1], list[0],
 list[3])
 Tytuł: "Python. Rozmówki"
 Autor: Dayley, Brad
 Data: 2007

 >>> print record % (list[0], list[1], list[2], list[3])
 Brad|Dayley|"Python. Rozmówki"|00002007



Wykorzystywanie instrukcji sterujących
Python obsługuje instrukcje if, else oraz elif dla warun-
kowego wykonywania kodu. Składnia jest następująca:
if expression: block, gdzie expression to wyrażenie,
a block — blok kodu, definiujący zachowanie warunkowe.
Jeśli wyrażenie zwraca True, blok kodu jest wykonywany.
Poniższy kod prezentuje przykład prostej serii bloków if:

                                                                25
ROZDZIAŁ 1         Podstawy składni Pythona


                    if x == True:
                       print "x jest prawdą"
                    elif y == True:
                       print "y jest prawdą"
                    else:
                       print "oba są fałszem"


                   Python obsługuje pętle warunkowe za pomocą instrukcji
                   while. Składnia jest następująca: while expression:
                   block, gdzie expression to wyrażenie, a block — blok
                   kodu, definiujący zachowanie pętli. Dopóki wyrażenie
                   zwraca True, blok jest wykonywany w pętli. Poniższy
                   kod prezentuje przykład pętli warunkowej while:
PODSTAWY PYTHONA




                    x = 1
                    while x < 10:
                       x += 1


                   Python obsługuje także instrukcję for dla pętli operują-
                   cych na sekwencjach. Składnia jest następująca: for item
                   in sequence: block, gdzie item to element sekwencji
                   sequence, a block jest blokiem kodu definiującym za-
                   chowanie pętli. Po każdej pętli wybierany jest kolejny
                   element z sekwencji i blok kodu jest wykonywany. Pętla
                   for jest kontynuowana, dopóki w sekwencji nie skończą
                   się elementy. Poniższe kody prezentują kilka różnych przy-
                   kładów pętli sekwencyjnych for.

                   Pierwszy przykład wykorzystuje łańcuch znaków jako se-
                   kwencję, z której utworzy się listę kolejnych znaków z łań-
                   cucha:
                    >>> word = "Python"
                    >>> list = []
                    >>> for ch in word:

     26
Podstawy składni Pythona




                                                               ROZDZIAŁ 1
 ...    list.append(ch)
 ...
 >>> print list
 ['P', 'y', 't', 'h', 'o', 'n']


Poniższy przykład wykorzystuje funkcję range() do utwo-
rzenia tymczasowej sekwencji liczb całkowitych rozmiaru
listy, tak by elementy listy mogły być dodawane do łań-
cucha znaków w kolejności:

 >>> string = ""
 >>> for i in range(len(list)):
 ...    string += list[i]
 ...




                                                               PODSTAWY PYTHONA
 >>> print string
 Python


Kolejny przykład wykorzystuje funkcję enumerate(string)
do utworzenia tymczasowej sekwencji. Funkcja enumerate
zwraca wyliczenie w formie (0, s[0]), (1, s[1]) i tak
dalej, aż do końca sekwencji string, tak by pętla for
mogła przypisać zarówno wartości i, jak i ch dla każdej
iteracji w celu utworzenia słownika:

 >>>   dict = {}
 >>>   for i,ch in enumerate(string):
 ...      dict[i] = ch
 ...
 >>>   print dict
 {0:   'P', 1: 'y', 2: 't', 3: 'h', 4: 'o', 5: 'n'}


Poniższy przykład wykorzystuje słownik jako sekwencję
w celu wyświetlenia zawartości słownika:

 >>> for key in dict:
 ...    print key, '=', dict[key]
 ...
                                                               27
ROZDZIAŁ 1         Podstawy składni Pythona


                    0   =   P
                    1   =   y
                    2   =   t
                    3   =   h
                    4   =   o
                    5   =   n


                   Python udostępnia instrukcję break w celu przerwania
                   wykonywania i wyjścia z bieżącej pętli. Zawiera także in-
                   strukcję continue, która przerywa wykonywanie bieżą-
                   cej iteracji i rozpoczyna kolejną iterację bieżącej pętli.
                   Poniższy przykład pokazuje użycie instrukcji break oraz
                   continue:
PODSTAWY PYTHONA




                    >>> word = "Pithon. Rozmówki"
                    >>> string = ""
                    >>> for ch in word:
                    ...     if ch == 'i':
                    ...        string +='y'
                    ...        continue
                    ...     if ch == ' ':
                    ...        break
                    ...     string += ch
                    ...
                    >>> print string
                    Python.


                    UWAGA
                    Po pętlach for i while można dodać instrukcję else, tak
                    samo jak w przypadku instrukcji if. Instrukcja else jest wy-
                    konywana po tym, jak pętla z powodzeniem zakończy wszyst-
                    kie iteracje. Jeśli napotykana jest instrukcja break, else nie
                    jest wykonywane.




     28
Podstawy składni Pythona




                                                                      ROZDZIAŁ 1
Obecnie nie ma w Pythonie instrukcji przełączającej (ang.
switch). Najczęściej nie jest to problemem i można sobie
poradzić dzięki serii instrukcji if-elif-else. Istnieje jed-
nak wiele innych sposobów radzenia sobie z tym brakiem.
Poniższy przykład pokazuje, jak można utworzyć prostą
instrukcję przełączającą w Pythonie1:

    >>> def a(s):
    ...    print s
    ...
    >>> def switch(ch):
    ...    try:
    ...       {'1': lambda : a("jeden"),




                                                                      PODSTAWY PYTHONA
    ...         '2': lambda : a("dwa"),
    ...         '3': lambda : a("trzy"),
    ...         'a': lambda : a("Litera a")
    ...       }[ch]()
    ...    except KeyError:
    ...       a("Nie znaleziono klucza")
    ...
    >>> switch('1')
    jeden
    >>> switch('a')
    Litera a
    >>> switch('b')
    Nie znaleziono klucza




1
    Warto zauważyć, że od dawna rozważano usunięcie notacji
    lambda z Pythona począwszy od przyszłej wersji 3.0;
    aktualnie nie zapowiada się, by miało się tak stać (PEP 3099)
    — przyp. tłum.
                                                                      29
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona



                   Obiekty, moduły,
                   klasy i funkcje Pythona
                   Niniejszy podrozdział poświęcony jest omówieniu pod-
                   stawowych koncepcji związanych z obiektami, modułami,
                   klasami oraz funkcjami języka Python. Podrozdział ten
                   zakłada, że Czytelnik posiada podstawowe zrozumienie
                   języków zorientowanych obiektowo, i ma dostarczyć wy-
                   starczającą ilość informacji, by możliwe było rozpoczęcie
                   pracy z Pythonem oraz wykorzystywanie i tworzenie skom-
PODSTAWY PYTHONA




                   plikowanych modułów i klas.


                   Wykorzystywanie obiektów
                   Python jest zbudowany wokół koncepcji „obiektu”. Każdy
                   fragment danych przechowywany i wykorzystywany przez
                   Pythona jest obiektem. Listy, łańcuchy znaków, słowniki,
                   liczby, klasy, pliki, moduły i funkcje — wszystkie one są
                   obiektami.

                   Każdy obiekt w Pythonie posiada swoją tożsamość, typ
                   oraz wartość. Tożsamość (ang. identity) wskazuje na lo-
                   kalizację obiektu w pamięci. Typ (ang. type) opisuje re-
                   prezentację obiektu dla Pythona (więcej w tabeli 1.1).
                   Wartość (ang. value) obiektu to po prostu dane w nim prze-
                   chowywane.

                   Poniższy przykład pokazuje, w jaki sposób można uzyskać
                   dostęp do tożsamości, typu i wartości obiektu w sposób
                   programowy za pomocą odpowiednio: id(object), type
                   (object) oraz nazwy zmiennej:
     30
Obiekty, moduły, klasy i funkcje Pythona




                                                                    ROZDZIAŁ 1
 >>> l = [1,2,3]
 >>> print id(l)
 9267480
 >>> print type(l)
 <type 'list'>
 >>> print l
 [1, 2, 3]


Po utworzeniu obiektu, tożsamość i typ nie mogą być
zmienione. Jeśli wartość obiektu się zmienia, jest on
uważany za obiekt zmienny (ang. mutable). Jeśli wartość
obiektu nie może być modyfikowana, jest uznawany za
obiekt niezmienny (ang. immutable).




                                                                    PODSTAWY PYTHONA
Niektóre obiekty posiadają także atrybuty i metody. Atry-
buty są wartościami powiązanymi z obiektem. Metody to
wywoływalne funkcje, które wykonują operacje na obiekcie.
Dostęp do atrybutów i metod obiektu uzyskuje się po-
przez wykorzystanie składni z kropkami (.):

 >>>   class test(object):
 ...      def printNum(self):
 ...         print self.num
 ...
 >>>   t = test()
 >>>   t.num = 4
 >>>   t.printNum()
 4



Wykorzystywanie modułów
Cały Python zbudowany jest z modułów. Moduły są pli-
kami Pythona, które pochodzą z podstawowych bibliotek
dostarczanych wraz z tym językiem, a także modułów

                                                                    31
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona


                   tworzonych przez inne organizacje, tworzące rozszerzenia
                   do Pythona oraz modułów napisanych samodzielnie przez
                   programistę. Większe aplikacje lub biblioteki, które za-
                   wierają więcej modułów, zazwyczaj połączone są w pa-
                   kiety. Pakiety pozwalają na połączenie kilku modułów pod
                   jedną nazwą.

                   Moduły ładowane są do programu w Pythonie za pomocą
                   instrukcji import. Po zaimportowaniu modułu tworzona
                   jest dla niego i dla wszystkich zawartych w nim obiektów
                   przestrzeń nazw. Następnie wykonywany jest kod z pliku
PODSTAWY PYTHONA




                   źródłowego i tworzony jest obiekt modułu o takiej samej
                   nazwie co plik źródłowy, dzięki czemu możliwy jest do-
                   stęp do przestrzeni nazw.

                   Istnieje kilka różnych sposobów importowania modu-
                   łów. Poniższe przykłady obrazują niektóre z tych metod.

                   Moduły mogą być importowane bezpośrednio za pomocą
                   nazwy pakietu bądź modułu. Dostęp do elementów z pod-
                   modułów musi odbywać się w sposób jawny, poprzez poda-
                   nie pełnej nazwy pakietu:

                    >>> import os
                    >>> os.path.abspath(".")
                    'C:bookspython'


                   Moduły mogą być importowane bezpośrednio za pomocą
                   nazwy modułu, jednak przestrzeń nazw może być nazwana
                   inaczej. Dostęp do elementów z podmodułów musi od-
                   bywać się w sposób jawny, poprzez podanie pełnej nazwy
                   pakietu:

     32
Obiekty, moduły, klasy i funkcje Pythona




                                                                     ROZDZIAŁ 1
 >>> import os as computer
 >>> computer.path.abspath(".")
 'C:bookspython'


Moduły mogą być importowane za pomocą nazwy modułu
wewnątrz pakietu. Dostęp do elementów z podmodułów
musi odbywać się w sposób jawny, poprzez podanie peł-
nej nazwy pakietu:

 >>> import os.path
 >>> os.path.abspath(".")
 'C:bookspython'




                                                                     PODSTAWY PYTHONA
Moduły mogą być importowane poprzez wybranie konkret-
nych modułów z pakietu. Dostęp do elementów z podmo-
dułów może odbywać się w sposób niejawny, bez podania
pełnej nazwy pakietu:

 >>> from os import path
 >>> path.abspath(".")
 'C:bookspython'


 UWAGA
 Python zawiera funkcję reload(module), która przeładowuje
 moduł określony jako module. Jest ona wyjątkowo przydatna
 w czasie tworzenia programów, kiedy istnieje potrzeba uak-
 tualnienia modułu i przeładowania go bez kończenia pro-
 gramu. Obiekty utworzone przed przeładowaniem modułu nie
 zostaną uaktualnione, dlatego należy bardzo uważać w przy-
 padku wykonywania na nich jakichś operacji.




                                                                     33
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona



                   Podstawy klas Pythona
                   Klasy Pythona są generalnie zbiorem atrybutów oraz metod.
                   Klasy zazwyczaj służą jednemu z dwóch celów: tworze-
                   niu nowego typu danych zdefiniowanego przez użytkow-
                   nika lub rozszerzeniu możliwości istniejącego typu danych.
                   Niniejszy podrozdział zakłada, że Czytelnik rozumie, czym
                   są klasy, na bazie języka C, Javy czy innego języka zorien-
                   towanego obiektowo.

                   W Pythonie klasy są wyjątkowo łatwe do zdefiniowania;
PODSTAWY PYTHONA




                   łatwo również utworzyć nowe obiekty klasy (ang. instan-
                   tiation). Do zdefiniowania nowej klasy służy instrukcja
                   class name(object):, gdzie name jest nazwą własnego
                   typu obiektu, zdefiniowaną przez użytkownika, natomiast
                   object określa obiekt Pythona, po którym się dziedziczy.


                    UWAGA
                    Dziedziczenie klas w Pythonie jest podobne do dziedziczenia
                    z Javy, języka C i innych języków zorientowanych obiektowo.
                    Metody i atrybuty klasy rodzica będą dostępne dla klasy po-
                    tomnej, natomiast metody i atrybuty o tej samej nazwie w klasie
                    potomnej nadpiszą te z klasy rodzica.

                   Cały kod zawarty w bloku następującym po instrukcji class
                   wykonywany będzie za każdym razem, kiedy tworzony
                   jest obiekt klasy. Próbka kodu o nazwie testClass.py ilu-
                   struje sposób tworzenia prostej klasy w Pythonie. Instruk-
                   cja class ustala nazwę typu klasy i dziedziczy po bazowej
                   klasie object.


     34
Obiekty, moduły, klasy i funkcje Pythona




                                                                        ROZDZIAŁ 1
  UWAGA
  Instrukcja class definiuje jedynie typ obiektu klasy; nie tworzy
  samego obiektu klasy. Obiekt klasy nadal musi być utworzony
  poprzez bezpośrednie wywołanie klasy.

Funkcja __init__ nadpisuje metodę odziedziczoną po
klasie object i będzie wywoływana, kiedy tworzony bę-
dzie obiekt klasy. Obiekt klasy tworzony jest przez bez-
pośrednie wywołanie: tc = testClass("Pięć"). Po
bezpośrednim wywołaniu klasy, zwracany jest obiekt tej
klasy.




                                                                        PODSTAWY PYTHONA
  UWAGA
  Możliwe jest określenie niezbędnych parametrów funkcji
  __init__() pod warunkiem, że parametry te dostarczy się
  w momencie wywoływania klasy w celu utworzenia obiektu
  klasy.

  class testClass(object):
     print "Tworzenie nowej klasyn====================="
     number=5
     def __init__(self, string):
        self.string = string
     def printClass(self):
        print "Liczba = %d"% self.number
        print "Łańcuch znaków = %s"% self.string

  tc = testClass("Pięć")
  tc.printClass()
  tc.number = 10
  tc.string = "Dziesięć"
  tc.printClass()

Plik testClass.py


                                                                        35
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona


                    Tworzenie nowej klasy
                    =====================
                    Liczba = 5
                    Łańcuch znaków = Pięć
                    Liczba = 10
                    Łańcuch znaków = Dziesięć

                   Dane wyjściowe dla kodu z pliku testClass.py


                    UWAGA
                    Wewnątrz klasy konieczne jest stosowanie prefiksu self.,
                    kiedy odnosi się do atrybutów i metod tej klasy. Choć self
                    jest także wymieniane jako pierwszy argument we wszyst-
PODSTAWY PYTHONA




                    kich metodach klasy, w rzeczywistości nie musi jednak być
                    jawnie określane, kiedy wywołuje się metodę.


                   Wykorzystywanie funkcji
                   Definiowanie i wywoływanie funkcji w Pythonie jest za-
                   zwyczaj stosunkowo łatwe, może jednak także stać się moc-
                   no zagmatwane. Najważniejsze, co należy zapamiętać, to
                   że funkcje są obiektami języka Python i że przekazywane
                   parametry są w rzeczywistości „stosowane” do obiektu
                   funkcji.

                   By utworzyć funkcję, należy skorzystać z instrukcji def
                   functionname(parameters):, gdzie functionname to na-
                   zwa funkcji, a parameters — jej parametry, a później zde-
                   finiować funkcję w następującym po niej bloku kodu. Po
                   zdefiniowaniu funkcji można ją wywoływać poprzez okre-
                   ślenie nazwy funkcji oraz przekazanie jej odpowiednich
                   parametrów.

     36
Obiekty, moduły, klasy i funkcje Pythona




                                                                    ROZDZIAŁ 1
Poniższe akapity pokazują niektóre z różnych sposobów
wykonania pewnego zadania dla funkcji przedstawionej
poniżej:

 def fun(name, location, year=2006):
    print "%s/%s/%d" % (name, location, year)

 n   Pierwszy przykład prezentuje funkcję wywoływaną
     poprzez przekazanie wartości parametrów w kolej-
     ności. Warto zwrócić uwagę na fakt, iż parametr z ro-
     kiem posiada wartość domyślną, ustawioną w definicji
     funkcji, co oznacza, że ten parametr może zostać po-
     minięty, a wtedy wykorzystana zostanie wartość do-




                                                                    PODSTAWY PYTHONA
     myślna.
     >>> fun("Robert", "Katowice")
     Robert/Katowice/2006

 n   Kolejny przykład pokazuje przekazywanie parametrów
     przez nazwę. Zaleta przekazywania parametrów przez
     nazwę polega na tym, że kolejność, w jakiej ukazują
     się one na liście parametrów, nie ma znaczenia.
     >>> fun(location="Berlin", year=2004,
     name="Aleksander" )
     Aleksander/Berlin/2004

 n   Poniższy przykład ilustruje możliwość łączenia róż-
     nych metod przekazywania parametrów. W przykła-
     dzie tym pierwszy parametr jest przekazany jako
     wartość, natomiast drugi i trzeci są przekazane przez
     nazwę.
     >>> fun("Amadeusz", year=2005, location="Wiedeń")
     Amadeusz/Wiedeń/2005



                                                                    37
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona


                     n   Parametry mogą także być przekazane jako krotka
                         (ang. tuple) za pomocą składni z *, jak pokazano na
                         kolejnym przykładzie. Elementy krotki muszą od-
                         powiadać parametrom, które są oczekiwane przez
                         funkcję.
                         >>> tuple = ("Edward", "Kolonia", 2003)
                         >>> fun(*tuple)
                         Edward/Kolonia/2003

                     n   Parametry mogą również być przekazywane jako słow-
                         nik za pomocą składni z **, jak pokazano na poniższym
                         przykładzie. Wpisy w słowniku muszą odpowiadać pa-
PODSTAWY PYTHONA




                         rametrom, które są oczekiwane przez funkcję.
                         >>> dictionary = {'name':'Franciszek',
                         'location':'Skierniewice', 'year':1999}
                         >>> fun(**dictionary)
                         Franciszek/Skierniewice/1999

                     n   Wartości mogą być zwracane z funkcji za pomocą in-
                         strukcji return. Jeśli funkcja nie posiada instrukcji
                         return, zwracany jest obiekt None. Poniższy przykład
                         pokazuje prostą funkcję potęgowania, która przyjmuje
                         liczbę i zwraca kwadrat tej liczby:
                         >>> def square(x):
                         ...    return x*x
                         ...
                         >>> print square(3)
                         9


                    UWAGA
                    Funkcje mogą być traktowane tak samo, jak wszystkie inne
                    obiekty Pythona. Oprócz wywoływania, można je między in-
                    nymi przypisywać jako wartość do listy bądź słownika, prze-
                    kazywać jako argument, zwracać jako wartość i tak dalej.
     38
Obiekty, moduły, klasy i funkcje Pythona




                                                                    ROZDZIAŁ 1
 n   Operator lambda wbudowany w Pythona udostępnia
     metodę tworzenia funkcji anonimowych. Ułatwia to
     przekazanie prostych funkcji jako parametrów bądź
     przypisanie ich do nazw zmiennych. Operator lambda
     wykorzystuje następującą składnię w celu zdefinio-
     wania funkcji:
     lambda <args> : <expression>


     Termin args odnosi się do listy argumentów, które są
     przekazywane do funkcji. Termin expression może
     być dowolnym poprawnym wyrażeniem Pythona.
     Poniższy kod prezentuje przykład zastosowania ope-




                                                                    PODSTAWY PYTHONA
     ratora lambda w celu przypisania anonimowej funkcji
     do zmiennej:
     >>> bigger = lambda a, b : a > b
     >>> print bigger(1,2)
     False
     >>> print bigger(2,1)
     True



Przestrzenie nazw i zasięg
Zasięg w Pythonie powiązany jest z koncepcją przestrzeni
nazw. Przestrzenie nazw (ang. namespaces) to generalnie
słowniki, zawierające nazwy i wartości obiektów znajdują-
cych się wewnątrz danego zakresu. Istnieją cztery główne
typy przestrzeni nazw, z którymi można się spotkać:
przestrzenie nazw globalne, lokalne, modułów oraz klas.

Globalne przestrzenie nazw są tworzone, kiedy program
rozpoczyna wykonywanie. Globalna przestrzeń nazw po-
czątkowo zawiera wbudowane informacje o wykonywanym
                                                                    39
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona


                   module. Nowe obiekty są stopniowo dodawane do global-
                   nej przestrzeni nazw w miarę definiowania ich w zakresie
                   tej przestrzeni nazw. Globalna przestrzeń nazw jest dostęp-
                   na ze wszystkich zakresów, jak pokazano na przykładzie,
                   w którym globalna wartość x jest odczytywana za pomocą
                   funkcji globals()["x"].

                    UWAGA
                    Do globalnej przestrzeni nazw można zajrzeć poprzez wyko-
                    rzystanie funkcji globals(), która zwraca obiekt słownika,
                    zawierający wszystkie wpisy z tej przestrzeni nazw.
PODSTAWY PYTHONA




                   Lokalne przestrzenie nazw są tworzone, kiedy wywoływana
                   jest funkcja. Lokalne przestrzenie nazw są zagnieżdżone
                   wraz z funkcjami w miarę ich zagnieżdżania. Wyszukiwanie
                   nazwy rozpoczyna się w najbardziej zagnieżdżonej prze-
                   strzeni nazw i postępuje stopniowo aż do globalnej prze-
                   strzeni nazw.

                   Instrukcja global zmusza nazwy do połączenia ich z glo-
                   balną przestrzenią nazw zamiast z lokalną. W przykładowym
                   kodzie wykorzystano instrukcję global do zmuszenia na-
                   zwy x, by wskazywała ona na globalną przestrzeń nazw.
                   Kiedy x się zmienia, zmodyfikowany zostaje obiekt globalny.

                    UWAGA
                    Choć obiekty w zewnętrznie zagnieżdżonych przestrzeniach
                    nazw mogą być widziane, modyfikowane mogą być jedynie
                    najbardziej lokalne i globalne przestrzenie nazw. W przykła-
                    dowym kodzie do zmiennej b z funkcji fun można odwoły-
                    wać się z funkcji sub, jednak modyfikacja jej wartości w sub
                    nie zmieni wartości w fun.
     40
Obiekty, moduły, klasy i funkcje Pythona




                                                                    ROZDZIAŁ 1
 x = 1
 def fun(a):
    b=3
    x=4
    def sub(c):
        d=b
        global x
        x = 7
        print ("Zagnieżdżona
 funkcjan====================")
        print locals()

      sub(5)
      print ("nFunkcjan====================")
      print locals()




                                                                    PODSTAWY PYTHONA
      print locals()["x"]
      print globals()["x"]

 print ("nZmienne globalnen====================")
 print globals()

 fun(2)

Plik scope.py

 Zmienne globalne
 ====================
 {'x': 1,
  '__file__':
 'C:bookspythonCH1codescope.py',
  'fun': <function fun at 0x008D7570>,
  't': <class '__main__.t'>,
  'time': <module 'time' (built-in)>,. . .}

 Zagnieżdżona funkcja
 ====================
 {'c': 5, 'b': 3, 'd': 3}

 Funkcja
 =================
 {'a': 2, 'x': 4, 'b': 3, 'sub':


                                                                    41
ROZDZIAŁ 1         Obiekty, moduły, klasy i funkcje Pythona


                         <function sub at 0x008D75F0>}
                    4
                    7

                   Dane wyjściowe dla kodu z pliku scope.py

                   Przestrzeń nazw modułu jest tworzona, gdy moduł jest
                   importowany, a obiekty wewnątrz modułu odczytywane.
                   Dostęp do przestrzeni nazw modułu odbywa się za po-
                   mocą atrybutu .__dict__ obiektu modułu. Dostęp do
                   obiektów w przestrzeni nazw modułu można uzyskać bez-
                   pośrednio poprzez wykorzystanie nazwy modułu oraz
                   składni z kropkami (.). Poniższy przykład pokazuje to
PODSTAWY PYTHONA




                   na bazie wywołania funkcji localtime() modułu time:

                    >>> import time
                    >>> print time.__dict__
                    {'ctime': <built-in function ctime>,
                     'clock': <built-in function clock>,
                     ... 'localtime': <built-in function localtime>}
                    >>> print time.localtime()
                    (2006, 8, 10, 14, 32, 39, 3, 222, 1)


                   Przestrzeń nazw klasy jest podobna do przestrzeni nazw
                   modułu, jest jednak tworzona w dwóch częściach. Pierwsza
                   część jest tworzona, gdy klasa jest definiowana, natomiast
                   druga część powstaje, kiedy tworzony jest obiekt klasy.
                   Dostęp do przestrzeni nazw klasy może także odbywać się
                   poprzez wykorzystanie atrybutu .__dict__ obiektu klasy.

                    UWAGA
                    W poniższym kodzie warto zwrócić uwagę na fakt, iż x znaj-
                    duje się w t.__dict__, natomiast double znajduje się
                    w tClass.__dict__. Mimo to oba są dostępne za pomocą
                    składni z kropkami obiektu klasy.
     42
Obsługa błędów




                                                              ROZDZIAŁ 1
Dostęp do obiektów w przestrzeni nazw klasy może się
odbywać w sposób bezpośredni za pomocą nazwy modułu
oraz składni z kropkami. Na poniższym przykładzie widać
to w przypadku instrukcji print t.x oraz t.double():

 >>> class tClass(object):
 ...    def __init__(self, x):
 ...       self.x = x
 ...    def double(self):
 ...       self.x += self.x
 ...
 >>> t = tClass (5)
 >>> print t.__dict__
 {'x': 5}




                                                              PODSTAWY PYTHONA
 >>> print tClass.__dict__
 {'__module__': '__main__',
  'double': <function double at 0x008D7570>, . . . }
 >>> print t.x
 5
 >>> t.double()
 >>> print t.x
 10




Obsługa błędów
Obsługa błędów w Pythonie jest wykonywana poprzez
wykorzystanie wyjątków, które są ujmowane w bloki try
i obsługiwane w blokach except. Jeśli napotykany jest błąd,
wykonanie kodu z bloku try jest zatrzymywane i przeno-
szone do bloku except, jak pokazano w poniższej składni:

 try:
    f = open("test.txt")
 except IOError:
    print "Nie można otworzyć pliku."


                                                              43
ROZDZIAŁ 1         Obsługa błędów


                   Wartość typu exception odnosi się albo do wyjątków
                   wbudowanych w Pythona, albo do samodzielnie zdefinio-
                   wanego obiektu wyjątku. Wartość error jest zmienną, która
                   przechwytuje dane zwracane przez wyjątek.

                       UWAGA
                       Blok try obsługuje także wykorzystywanie bloku else po
                       ostatnim bloku except. Blok else jest wykonywany, jeśli
                       blok try zakończy działanie bez otrzymania wyjątku.

                   Oprócz używania bloku except po bloku try, możliwe
PODSTAWY PYTHONA




                   jest także wykorzystanie bloku finally. Kod z bloku
                   finally będzie wykonany bez względu na to, czy wystąpi
                   wyjątek. Jeśli wyjątek się nie pojawi, blok finally zo-
                   stanie wykonany po bloku try. Jeśli wyjątek wystąpi,
                   wykonanie jest natychmiast przenoszone do bloku finally,
                   a następnie obsługa wyjątku jest kontynuowana, dopóki
                   nie będzie on obsłużony2. Poniższy kod pokazuje przy-
                   kład wykorzystania bloku finally w celu zmuszenia pliku
                   do zamknięcia, nawet jeśli wystąpi wyjątek:

                       f = open("test.txt")
                       try:
                          f.write(data)
                          . . .
                       finally:
                          f.close()




                   2
                       Od wersji 2.5 Pythona możliwe jest już łączenie ze sobą
                       dotychczas wzajemnie wykluczających się bloków except
                       i finally w jeden blok try-except-finally — przyp. tłum.

     44
Wykorzystywanie narzędzi systemowych




                                                                  ROZDZIAŁ 1
Możliwe jest zgłoszenie wyjątku przez własny program
poprzez użycie instrukcji raise exception [, value].
Wartość exception jest jednym z wbudowanych w Py-
thona wyjątków bądź też samodzielnie zdefiniowanym
obiektem wyjątku. Wartością value jest obiekt Pythona,
który tworzy się w celu podania szczegółów wyjątku.
Zgłoszenie wyjątku przerywa bieżące wykonywanie ko-
du i zgłasza wyjątek. Poniższy przykład pokazuje, w jaki
sposób można zgłosić ogólny wyjątek RuntimeError za
pomocą prostej wartości komunikatu:

 raise RuntimeError, "Błąd wykonania skryptu"




                                                                  PODSTAWY PYTHONA
 UWAGA
 Jeśli wyjątek nie jest obsługiwany, program kończy się, a śle-
 dzenie wyjątku jest przesyłane do sys.stderr.



Wykorzystywanie
narzędzi systemowych
Jedną z najbardziej użytecznych cech Pythona jest zbiór
modułów, które zapewniają dostęp do lokalnego systemu
komputera. Moduły te umożliwiają dostęp do takich ele-
mentów jak system plików, system operacyjny oraz po-
włoka systemowa, a także do wielu funkcji systemowych.

Niniejszy podrozdział omawia wykorzystywanie modułów
os, sys, platform oraz time w celu uzyskania dostępu do
niektórych z najczęściej używanych informacji systemowych.
                                                                  45
ROZDZIAŁ 1         Wykorzystywanie narzędzi systemowych



                   Moduł os
                   Moduł os udostępnia przenośny, niezależny od platformy
                   interfejs dla dostępu do popularnych usług operacyjnych,
                   co pozwala na dodanie do programów obsługi na pozio-
                   mie systemu operacyjnego. Poniższe przykłady ilustrują
                   niektóre z najczęściej spotykanych zastosowań modułu os.

                   Funkcja os.path.abspath(path) modułu os zwraca bez-
                   względną ścieżkę (path) w formie łańcucha znaków. Po-
                   nieważ abspath bierze pod uwagę obecny bieżący katalog,
PODSTAWY PYTHONA




                   elementy ścieżek takie jak . oraz .. będą działały w nastę-
                   pujący sposób:

                    >>> import os
                    >>> print os.path.abspath(".")
                    C:bookspythonch1
                    >>> print os.path.abspath("..")
                    C:bookspython


                   Moduł os.path udostępnia funkcje exists(path), isdir
                   (path) oraz isfile(path) w celu sprawdzania istnienia
                   plików oraz katalogów, jak zaprezentowano poniżej:

                    >>> print os.path.exists("/books/python/ch1")
                    True
                    >>> print os.path.isdir("/books/python/ch1")
                    True
                    >>> print
                    os.path.isfile("/books/python/ch1/ch1.doc")
                    True


                   Funkcja os.chdir(path) umożliwia prosty sposób zmiany
                   bieżącego katalogu roboczego dla programu, na przykład:


     46
Wykorzystywanie narzędzi systemowych




                                                               ROZDZIAŁ 1
 >>> os.chdir("/books/python/ch1/code")
 >>> print os.path.abspath(".")
 C:bookspythonCH1code


Atrybut os.environ zawiera słownik zmiennych środowi-
skowych. Można z tego słownika korzystać w pokazany
poniżej sposób w celu uzyskania dostępu do zmiennych
środowiskowych systemu:

 >>> print os.environ['PATH']
 C:WINNTsystem32;C:WINNT;C:Python24


Funkcja os.system(command) wykona funkcję systemową




                                                               PODSTAWY PYTHONA
command tak, jakby znajdowała się ona w podpowłoce,
jak pokazano w przypadku poniższego polecenia dir:

 >>> os.system("dir")
 Numer seryjny woluminu: 98F3-A875
 Katalog: C:bookspythonch1code
 2006-08-11 14:10       <DIR>          .
 2006-08-11 14:10       <DIR>          ..
 2006-08-10 16:00                  405 format.py
 2006-08-10 10:27                  546 function.py
 2006-08-10 15:07                  737 scope.py
 2006-08-11 14:58                  791 sys_tools.py
                4 plik(ów)          3 717 bajtów
                2 katalog(ów)   7 880 230 400 bajtów
                åwolnych


Python udostępnia kilka funkcji typu exec, które służą do
wykonywania aplikacji w rdzennym systemie. Poniższy
przykład ilustruje wykorzystanie funkcji os.execvp(path,
args) w celu wykonania aplikacji update.exe z parametrem
wiersza poleceń -verbose:

 >>> os.execvp("update.exe", ["-verbose"])

                                                               47
ROZDZIAŁ 1         Wykorzystywanie narzędzi systemowych



                   Moduł sys
                   Moduł sys udostępnia interfejs dostępu do środowiska in-
                   terpretera Pythona. Poniższe przykłady ilustrują niektóre
                   z najczęstszych zastosowań modułu sys.

                   Atrybut argv modułu sys jest listą. Pierwszy element na
                   liście argv jest ścieżką do modułu; reszta listy składa się
                   z argumentów, które zostały przekazane do modułu na
                   początku wykonania. Przykładowy kod pokazuje, w jaki
                   sposób można wykorzystać listę argv dla dostępu do pa-
                   rametrów wiersza poleceń przekazanych do modułu Py-
PODSTAWY PYTHONA




                   thona:

                    >>> import sys
                    >>> print sys.argv
                    ['C:bookspythonCH1codeprint_it.py',
                    'text']
                    >>> print sys.argv[1]
                    text


                   Atrybut stdin modułu sys jest obiektem pliku, który zo-
                   staje utworzony na początku wykonywania kodu. W poniż-
                   szym przykładowym kodzie text jest odczytywany z stdin
                   (w tym przypadku z klawiatury, co jest wartością domyślną)
                   za pomocą funkcji readline():

                    >>> text = sys.stdin.readline()
                    Dane wejściowe
                    >>> print text
                    Dane wejściowe


                   Moduł sys posiada także atrybuty stdout oraz stderr,
                   które wskazują na pliki używane jako standardowe wyjście
                   oraz standardowe wyjście błędów. Pliki te domyślnie zwią-
     48
Wykorzystywanie narzędzi systemowych




                                                                ROZDZIAŁ 1
zane są z ekranem. Poniższy fragment kodu pokazuje, w jaki
sposób przekierować standardowe wyjście oraz standar-
dowe komunikaty błędów do pliku w miejsce wyświetlania
ich na ekranie:

 >>>   sOUT = sys.stdout
 >>>   sERR = sys.stderr
 >>>   sys.stdout = open("ouput.txt", "w")
 >>>   sys.stderr = sys.stdout
 >>>   sys.stdout = sOUT
 >>>   sys.stderr = sERR



Moduł platform




                                                                PODSTAWY PYTHONA
Moduł platform udostępnia przenośny interfejs do infor-
macji o platformie, na której uruchamiany jest program.
Poniższe przykłady ilustrują niektóre z najczęstszych za-
stosowań modułu platform.

Funkcja platform.architecture() zwraca krotkę (bits,
linkage), gdzie bits to liczba bitów wielkości słowa w sys-
temie, natomiast linkage to powiązane informacje o pliku
wykonywalnym Pythona:

 >>> import platform
 >>> print platform.architecture()
 ('32bit', '')


Funkcja platform.python_version() zwraca wersję pliku
wykonywalnego Pythona dla celów zgodności:

 >>> print platform.python_version()
 2.4.2



                                                                49
ROZDZIAŁ 1         Wykorzystywanie narzędzi systemowych


                   Funkcja platform.uname() zwraca krotkę w formie
                   (system, node, release, version, machine, proces-
                   sor). W krotce tej system odnosi się do aktualnie dzia-
                   łającego systemu operacyjnego, node do nazwy hosta danej
                   maszyny, release do głównej wersji systemu operacyj-
                   nego, version do informacji o wydaniu systemu opera-
                   cyjnego w formie łańcucha znaków, natomiast machine
                   oraz processor odnoszą się do informacji sprzętowych
                   danej platformy.

                    >>> print platform.uname()
                    ('Linux', 'bwd-linux', '2.6.16-20-smp',
PODSTAWY PYTHONA




                     '#1 SMP Mon Apr 10 04:51:13 UTC 2006',
                     'i686', 'i686')



                   Moduł time
                   Moduł time udostępnia przenośny interfejs do funkcji
                   związanych z czasem w systemie, na którym program jest
                   wykonywany. Poniższe przykłady ilustrują niektóre z naj-
                   częstszych zastosowań modułu time.

                   Funkcja time.time() zwraca bieżący czas systemowy jako
                   liczbę sekund, które upłynęły od 1 stycznia 1970 roku
                   zgodnie z UTC (Coordinated Universal Time). Wartość ta
                   jest zazwyczaj zbierana w kilku punktach programu i jest
                   wykorzystywana w operacjach odejmowania w celu usta-
                   lenia czasu, który upłynął od jakiegoś zdarzenia.

                    >>> import time
                    >>> print time.time()
                    1155333864.11



     50
Wykorzystywanie narzędzi systemowych




                                                                ROZDZIAŁ 1
Funkcja time.localtime(secs) zwraca czas, określany
w sekundach, od 1 stycznia 1970 roku, w formie krotki
(year, month, day, hour, second, day of week, day
of year, daylight savings), zawierający rok, miesiąc,
dzień, godzinę, sekundę, dzień tygodnia, dzień roku oraz
przesunięcie związane z czasem letnim bądź zimowym.
Jeśli czas nie jest podany, wykorzystywany jest czas bie-
żący, jak poniżej:

 >>> print time.localtime()
 (2006, 8, 11, 16, 4, 24, 4, 223, 1)




                                                                PODSTAWY PYTHONA
Funkcja time.ctime(secs) zwraca czas, określony w se-
kundach, od 1 stycznia 1970 w formie sformatowanego
łańcucha znaków, nadającego się do wydrukowania. Jeśli
czas nie został określony, wykorzystywany jest czas bie-
żący, jak poniżej:

 >>> print time.ctime()
 Fri Aug 11 16:04:24 2006


Funkcja time.clock() zwraca aktualny czas procesora
w postaci liczby zmiennoprzecinkowej, która może być wy-
korzystywana do różnych funkcji mierzących czas:

 >>>print time.clock()
 5.02857206712e-006


Funkcja time.sleep(secs) zmusza bieżący proces do
uśpienia na liczbę sekund określoną przez liczbę zmien-
noprzecinkową secs:

 >>>time.sleep(.5)


                                                                51

More Related Content

What's hot

Perl. Zaawansowane programowanie. Wydanie II
Perl. Zaawansowane programowanie. Wydanie IIPerl. Zaawansowane programowanie. Wydanie II
Perl. Zaawansowane programowanie. Wydanie IIWydawnictwo Helion
 
Serwery internetowe Red Hat Linux
Serwery internetowe Red Hat LinuxSerwery internetowe Red Hat Linux
Serwery internetowe Red Hat LinuxWydawnictwo Helion
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuWydawnictwo Helion
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowyWydawnictwo Helion
 

What's hot (6)

Perl. Zaawansowane programowanie. Wydanie II
Perl. Zaawansowane programowanie. Wydanie IIPerl. Zaawansowane programowanie. Wydanie II
Perl. Zaawansowane programowanie. Wydanie II
 
Serwery internetowe Red Hat Linux
Serwery internetowe Red Hat LinuxSerwery internetowe Red Hat Linux
Serwery internetowe Red Hat Linux
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładu
 
TCP/IP. Szkoła programowania
TCP/IP. Szkoła programowaniaTCP/IP. Szkoła programowania
TCP/IP. Szkoła programowania
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowy
 
Po prostu Red Hat Linux 9
Po prostu Red Hat Linux 9Po prostu Red Hat Linux 9
Po prostu Red Hat Linux 9
 

Similar to Python. Rozmówki

Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowaneWydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaWydawnictwo Helion
 
Java. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIJava. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIWydawnictwo Helion
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
Linux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. RecepturyLinux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. RecepturyWydawnictwo Helion
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIWydawnictwo Helion
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 

Similar to Python. Rozmówki (20)

Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 
Python io
Python ioPython io
Python io
 
Linux. Leksykon kieszonkowy
Linux. Leksykon kieszonkowyLinux. Leksykon kieszonkowy
Linux. Leksykon kieszonkowy
 
Perl
PerlPerl
Perl
 
Java. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIJava. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIII
 
PHP w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki start
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
 
Po prostu sieci komputerowe
Po prostu sieci komputerowePo prostu sieci komputerowe
Po prostu sieci komputerowe
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
Linux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. RecepturyLinux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. Receptury
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie III
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
Fedora 7. Księga eksperta
Fedora 7. Księga ekspertaFedora 7. Księga eksperta
Fedora 7. Księga eksperta
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Python. Rozmówki

  • 1. Python. Rozmówki Autor: Brad Dayley T³umaczenie: Anna Trojan ISBN: 978-83-246-0950-5 Tytu³ orygina³u: Python Phrasebook Format: B6, stron: 296 Podrêczny zbiór najbardziej przydatnych konstrukcji jêzyka Python • Poznaj sk³adniê jêzyka Pyton • Naucz siê wykonywaæ najczêœciej u¿ywane operacje • U¿ywaj gotowych elementów do szybkiego tworzenia rozwi¹zañ w Pythonie Prawdopodobnie s³ysza³eœ ju¿ o zaletach Pythona. Jest przenoœny i dzia³a w niemal wszystkich systemach operacyjnych. Ma niezwykle czyteln¹ i prost¹ sk³adniê, a jego odmiany mog¹ wspó³pracowaæ z innymi jêzykami programowania. Mówi siê tak¿e, ¿e pozwala skróciæ czas pisania kodu kilka razy w porównaniu z jêzykiem C++. To jeszcze nie wszystkie atuty Pythona, o czym wkrótce siê przekonasz, pisz¹c swoje pierwsze programy w tym jêzyku. Dziêki ksi¹¿ce „Python. Rozmówki” b³yskawicznie poznasz najwa¿niejsze zwroty i konstrukcje oraz podstawy sk³adni tego jêzyka programowania. Nauczysz siê miêdzy innymi wykonywaæ w aplikacjach operacje na ³añcuchach i pracowaæ z typami danych, a tak¿e pisaæ programy wielow¹tkowe i sieciowe. Dowiesz siê, jak zarz¹dzaæ plikami i przetwarzaæ je oraz jak obs³ugiwaæ bazy danych. • Sk³adnia jêzyka Python • Przetwarzanie ³añcuchów danych • Korzystanie z typów danych • Praca z plikami • Tworzenie aplikacji wielow¹tkowych • Komunikacja z bazami danych • Obs³uga komunikacji sieciowej • Tworzenie us³ug sieciowych • Przetwarzanie danych w formatach XML i HTML Wydawnictwo Helion Wykorzystaj gotowe fragmenty kodu — zacznij pisaæ niezawodne programy w Pythonie ul. Koœciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl
  • 2. O autorze ........................................................................... 9 Wprowadzenie ................................................................ 11 1 Podstawy Pythona ........................................................... 13 Przyczyny popularności Pythona ........................................... 14 Wywoływanie interpretera ................................................... 15 Wbudowane typy ................................................................ 16 Podstawy składni Pythona ................................................... 22 Obiekty, moduły, klasy i funkcje Pythona ............................. 30 Obsługa błędów .................................................................. 43 Wykorzystywanie narzędzi systemowych ............................. 45 2 Przetwarzanie łańcuchów znaków .................................. 53 Porównywanie łańcuchów znaków ...................................... 54 Łączenie łańcuchów znaków ................................................ 55 Dzielenie łańcuchów znaków ............................................... 57 Wyszukiwanie podłańcuchów w łańcuchu znaków ............... 58 Wyszukiwanie i zastępowanie w łańcuchach znaków ........... 60 Wyszukiwanie łańcuchów znaków z konkretnym początkiem lub końcem ................................ 61
  • 3. Spis treści Przycinanie łańcuchów znaków ............................................ 62 Wyrównanie i formatowanie łańcuchów znaków .................. 64 Wykonywanie kodu zawartego w łańcuchach znaków ......... 66 Zastępowanie zmiennych wewnątrz łańcuchów znaków ...... 67 Konwersja Unicode do lokalnych łańcuchów znaków ........... 69 3 Zarządzanie typami danych .............................................73 Definiowanie listy ................................................................ 74 Dostęp do listy ..................................................................... 76 Wycinek listy ........................................................................ 77 Dodawanie i usuwanie elementów listy ............................... 79 Sortowanie listy ................................................................... 82 Wykorzystywanie krotek ....................................................... 84 Tworzenie słownika ............................................................. 87 Dodawanie wartości do słownika ......................................... 88 Pobieranie wartości ze słownika ........................................... 91 Wycinek słownika ................................................................ 93 Zamiana kluczy na wartości w słowniku ............................... 95 4 Praca z plikami .................................................................97 Otwieranie i zamykanie pliku ............................................... 98 Odczytywanie całego pliku ................................................. 100 Odczytywanie pojedynczego wiersza z pliku ....................... 103 Dostęp do każdego słowa z pliku ....................................... 104 Zapisywanie do pliku ......................................................... 105 Ustalenie liczby wierszy w pliku ......................................... 107 Przechodzenie drzewa katalogów ....................................... 108 Zmiana nazwy pliku ........................................................... 109 Rekurencyjne kasowanie plików i podkatalogów ................ 111 Wyszukiwanie plików w oparciu o rozszerzenie .................. 113 Tworzenie archiwum TAR ................................................... 115 4
  • 4. Spis treści Wyodrębnianie pliku z archiwum TAR ................................ 117 Dodawanie plików do archiwum ZIP .................................. 119 Wyodrębnianie plików z archiwum ZIP ............................... 121 5 Zarządzanie wątkami .................................................... 123 Rozpoczynanie nowego wątku ........................................... 124 Tworzenie i wychodzenie z wątków ................................... 126 Synchronizacja wątków ...................................................... 128 Implementacja wielowątkowej kolejki priorytetowej .......... 130 Inicjalizacja wątku z przerwaniem zegarowym ................... 133 6 Praca z bazami danych .................................................. 137 Dodawanie wpisów do pliku DBM ..................................... 138 Pobieranie wpisów z pliku DBM ......................................... 140 Uaktualnianie wpisów w pliku DBM ................................... 142 Serializacja obiektów do pliku ............................................ 144 Deserializacja obiektów z pliku .......................................... 147 Przechowywanie obiektów w pliku shelve ......................... 149 Pobieranie obiektów z pliku shelve .................................... 152 Zmiana obiektów w pliku shelve ........................................ 154 Łączenie się z serwerem bazy danych MySQL ..................... 156 Tworzenie bazy danych MySQL .......................................... 159 Dodawanie wpisów do bazy danych MySQL ...................... 161 Pobieranie wpisów z bazy danych MySQL .......................... 163 7 Implementacja komunikacji internetowej ..................... 167 Otwieranie gniazda po stronie serwera dla otrzymywania danych ................................................ 168 Otwieranie gniazda po stronie klienta do przesyłania danych ...................................................... 171 Otrzymywanie danych strumieniowych za pomocą modułu ServerSocket ...................................... 173 5
  • 5. Spis treści Przesyłanie danych strumieniowych ................................... 175 Wysyłanie e-maili za pośrednictwem SMTP ........................ 177 Pobieranie poczty elektronicznej z serwera POP3 ................ 179 Wykorzystywanie Pythona do pobierania plików z serwera FTP .......................................................... 182 8 Przetwarzanie HTML ......................................................187 Przetwarzanie adresów URL ............................................... 188 Otwieranie dokumentów HTML .......................................... 191 Pobieranie łączy z dokumentów HTML ............................... 194 Pobieranie obrazków z dokumentów HTML ........................ 196 Pobieranie tekstu z dokumentów HTML .............................. 199 Pobieranie plików cookie ................................................... 201 Dodawanie cudzysłowów do wartości atrybutów w dokumentach HTML ..................................... 204 9 Przetwarzanie XML ........................................................209 Ładowanie dokumentu XML ............................................... 210 Sprawdzanie poprawności składniowej dokumentów XML ............................................................ 212 Dostęp do węzłów potomnych ........................................... 214 Dostęp do atrybutów elementów ....................................... 219 Dodanie węzła do drzewa DOM ......................................... 221 Usuwanie węzła z drzewa DOM ......................................... 224 Przeszukiwanie dokumentów XML ..................................... 227 Ekstrakcja tekstu z dokumentów XML ................................. 231 Przetwarzanie znaczników XML .......................................... 234 6
  • 6. Spis treści 10 Programowanie usług sieciowych ................................. 237 Tworzenie stron internetowych w HTML za pomocą skryptów CGI .................................................. 238 Przetwarzanie parametrów przekazywanych do skryptów CGI .............................................................. 241 Tworzenie skryptów CGI, które przesyłają informacje same do siebie ................................................ 244 Pozwalanie użytkownikom na przesyłanie plików za pomocą skryptów CGI ...................................... 248 Tworzenie serwera HTTP do obsługi żądań GET ................. 252 Tworzenie serwera HTTP do obsługi żądań POST ................ 256 Tworzenie serwera HTTP obsługującego skrypty CGI .......... 261 Wysyłanie żądania HTTP GET ze skryptu Pythona ............... 263 Wysyłanie żądania HTTP POST ze skryptu Pythona ............. 266 Tworzenie serwera XML-RPC .............................................. 269 Tworzenie klienta XML-RPC ............................................... 271 Wykorzystywanie SOAPpy w dostępie do usług sieciowych SOAP za pośrednictwem pliku WSDL .............. 273 Skorowidz ...................................................................... 279 7
  • 7. ython jest zorientowanym obiektowo językiem progra- mowania o wyjątkowych możliwościach i elastyczności. Widać w nim podobieństwa do języków skryptowych ta- kich jak Perl, Scheme i TCL oraz do innych języków pro- gramowania, takich jak Java oraz C. Niniejszy rozdział ma na celu ramowe przedstawienie tego języka programowania, co powinno pomóc w zrozumieniu kolejnych rozdziałów książki. Nie będzie on jednak wy- czerpujący; powinien dać ogólny obraz języka oraz pomóc zrozumieć jego podstawy, tak by w celu uzyskania dokład- niejszych informacji wystarczyło sięgnięcie do dokumentacji Pythona.
  • 8. ROZDZIAŁ 1 Przyczyny popularności Pythona Przyczyny popularności Pythona Istnieje kilka przyczyn popularności Pythona. Jest on jed- nym z łatwiejszych języków, dzięki którym można rozpo- cząć swoją przygodę z programowaniem, a mimo to posiada ogromne możliwości, nadające się do zastosowania w więk- szych aplikacjach. Poniższe punkty opisują tylko niektóre przydatne cechy Pythona: n Przenośność: Python działa na prawie każdym syste- PODSTAWY PYTHONA mie operacyjnym, w tym na Linuksie/Uniksie, Win- dows, Mac, OS/2 i innych. n Integracja: Python może zostać zintegrowany z obiek- tami COM, .NET oraz CORBA. Istnieje implemen- tacja Jython, która pozwala na używanie Pythona na dowolnej platformie Javy. IronPython jest implemen- tacją, która umożliwia programistom Pythona do- stęp do bibliotek .NET. Python może także zawierać opakowany kod w językach C czy C++. n Prostota: Łatwo jest rozpocząć pisanie programów w Pythonie. Jasna, czytelna składnia sprawia, że two- rzenie aplikacji i usuwanie z nich błędów jest naprawdę proste. n Możliwości: Cały czas powstają rozszerzenia do Py- thona, które służą funkcjom takim jak dostęp do bazy danych, edycja materiałów audio i video, GUI, two- rzenie stron internetowych i tak dalej. 14
  • 9. Wywoływanie interpretera ROZDZIAŁ 1 n Elastyczność: Python jest jednym z najbardziej ela- stycznych języków. Łatwo jest zacząć szybko tworzyć kod, który będzie rozwiązywał problemy związane z projektowaniem i programowaniem. n Open-source: Python jest językiem o otwartym kodzie źródłowym, co oznacza, że można go swobodnie i za darmo używać i dystrybuować. Wywoływanie interpretera PODSTAWY PYTHONA Skrypty w Pythonie są wykonywane przez interpreter Py- thona. W większości systemów operacyjnych można uru- chomić interpreter Pythona, wykonując polecenie python w wierszu poleceń. Może to jednak wyglądać inaczej w za- leżności od systemu operacyjnego i środowiska, w którym się pracuje. Niniejszy podrozdział omawia standardowe metody wywoływania interpretera, by wykonywał on in- strukcje Pythona oraz pliki ze skryptami. Wywoływanie interpretera bez przekazania mu pliku ze skryptem w charakterze parametru powoduje wyświetle- nie następujących wierszy: bwd-linux:/book # python Python 2.4.2 (#1, Apr 9 2006, 19:25:19) [GCC 4.1.0 (SUSE Linux)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 15
  • 10. ROZDZIAŁ 1 Wbudowane typy Wiersz poleceń Pythona wyświetla >>>. Jeśli wykona się polecenie, które wymaga więcej danych wejściowych, zo- stanie wyświetlony znak zachęty .... Z wiersza poleceń interpretera można wykonywać pojedyncze instrukcje Py- thona, jak poniżej: >>> print "Drukowanie łańcucha znaków" Drukowanie łańcucha znaków Wywołanie interpretera wraz ze skryptem jako parame- trem, co zaprezentowano poniżej, rozpoczyna wykonywa- nie skryptu i kontynuuje aż do zakończenia skryptu. Kiedy PODSTAWY PYTHONA skrypt zostaje zakończony, interpreter przestaje być aktywny. bwd-linux:/book # python script.py Wykonywanie skryptu bwd-linux:/book # Skrypty mogą także być uruchamiane z interpretera po- przez wykorzystanie wbudowanej w Pythona funkcji execfile(script), gdzie script jest uruchamianym skryptem Pythona. Poniższy przykład prezentuje skrypt wykonywany za pomocą funkcji execfile(): >>> execfile("script.py") Wykonywanie skryptu >>> Wbudowane typy Najczęściej wykorzystywane typy Pythona, wbudowane w ten język, można pogrupować w kategorie wymienione w tabeli 1.1. Kolumna „Nazwa typu” pokazuje nazwę po- 16
  • 11. Wbudowane typy ROZDZIAŁ 1 wiązaną z każdym z wbudowanych typów i może być wy- korzystywana w celu ustalenia, czy obiekt jest określonego typu, za pomocą funkcji isinstance(object, typename), gdzie object to sprawdzany obiekt, natomiast typename jest nazwą typu, jak poniżej: >>> s = "Prosty łańcuch znaków" >>> print isinstance(s, basestring) True >>> print isinstance(s, dict) False >>> Tabela 1.1. Popularne wbudowane typy Pythona PODSTAWY PYTHONA Kategoria typu Nazwa typu Opis None types.NoneType Obiekt None (obiekt null) Liczby bool True lub False (Boolean) int Liczba całkowita long Długa liczba całkowita float Liczba zmiennoprzecinkowa complex Liczba zespolona Zbiory set Zbiór zmienny frozenset Zbiór niezmienny Sekwencje str Łańcuch znaków unicode Łańcuch znaków Unicode basestring Typ bazowy dla wszystkich łańcuchów znaków list Lista tuple Krotka xrange Sekwencja niezmienna 17
  • 12. ROZDZIAŁ 1 Wbudowane typy Tabela 1.1. Popularne wbudowane typy Pythona — ciąg dalszy Kategoria typu Nazwa typu Opis Odwzorowania dict Słownik Pliki file Plik Wywoływalne type Typ dla wszystkich (Callable) wbudowanych typów object Rodzic wszystkich typów i klas types.Builtin- Wbudowana funkcja FunctionType types.Builtin- Wbudowana metoda PODSTAWY PYTHONA MethodType types. Funkcja zdefiniowana FunctionType przez użytkownika types. Obiekt klasy InstanceType types. Metoda związana MethodType types.Unboun- Metoda niezwiązana dedMethodType Moduły types. Moduł ModuleType Klasy object Rodzic wszystkich klas Typy type Typ dla wszystkich wbudowanych typów UWAGA By możliwe było korzystanie z dowolnych obiektów typów takich jak type oraz types.ModuleType, moduł typów musi być zaimportowany. 18
  • 13. Wbudowane typy ROZDZIAŁ 1 None Typ None odpowiada obiektowi pustemu (ang. null), który nie posiada żadnej wartości. Typ None jest w Pythonie jedynym obiektem, który może być obiektem pustym. Składnia wykorzystywana w celu użycia tego typu w pro- gramach to po prostu None. Liczby Typy liczbowe w Pythonie są bardzo proste. Typ bool PODSTAWY PYTHONA posiada dwie możliwe wartości: True oraz False. Typ int przechowuje wewnętrznie 32-bitowe liczby całkowite. Typ long może przechowywać liczby ograniczone jedynie przez dostępną pamięć maszyny. Typ float wykorzystuje wbu- dowane liczby podwójnej precyzji do przechowywania 64- bitowych liczb zmiennoprzecinkowych. Typ complex przechowuje liczby jako pary liczb zmiennoprzecinkowych. Wartości te są dostępne za pomocą atrybutów z.real i z.imag obiektu complex. Zbiór Typ zbioru reprezentuje nieuporządkowany zbiór unikal- nych elementów. Istnieją dwa podstawowe typy zbiorów: zmienny (ang. mutable) set oraz niezmienny (ang. immu- table) frozenset. Zbiory zmienne mogą być modyfikowane (można do nich dodawać i odejmować od nich elementy). Zbiory niezmienne nie mogą być modyfikowane po utwo- rzeniu. 19
  • 14. ROZDZIAŁ 1 Wbudowane typy UWAGA Wszystkie elementy umieszczone w zbiorze muszą być typu niezmiennego, dlatego też zbiory nie mogą zawierać ele- mentów takich jak listy czy słowniki. Mogą jednak obejmo- wać łańcuchy znaków oraz krotki. Sekwencje W Pythonie istnieje kilka typów sekwencji. Sekwencje są uporządkowane i mogą być indeksowane przez liczby nie- PODSTAWY PYTHONA ujemne. Sekwencje można łatwo przetwarzać i mogą one składać się z prawie każdego obiektu Pythona. Dwa najczęściej dotychczas spotykane typy sekwencji to łańcuchy znaków oraz listy. W rozdziale 2., „Przetwarzanie łańcuchów znaków”, omówione jest tworzenie i wyko- rzystywanie łańcuchów znaków. W rozdziale 3., „Zarzą- dzanie typami danych”, omówione zostały najpopularniejsze rodzaje sekwencji wraz z operacjami ich tworzenia i prze- twarzania. Odwzorowania Typ odwzorowań reprezentuje dwie grupy obiektów. Pierw- szą z nich jest zbiór kluczy, które indeksują drugą grupę, zawierającą zbiór wartości. Każdy klucz indeksuje kon- kretną wartość z odpowiadającego mu zbioru. Klucz musi być typem niezmiennym. Wartością może być prawie każdy obiekt Pythona. 20
  • 15. Wbudowane typy ROZDZIAŁ 1 Słownik jest jedynym typem odwzorowania wbudowanym obecnie w Pythonie. W rozdziale 3. omówiono słowniki, ich tworzenie oraz przetwarzanie. Pliki Typ pliku jest w Pythonie obiektem, który reprezentuje otwarty plik. Obiekty tego typu mogą być wykorzystywane do odczytywania danych z systemu plików i zapisywania ich do niego. W rozdziale 4., „Praca z plikami”, omówiono obiekty plików, a także zaprezentowano niektóre z najczę- PODSTAWY PYTHONA ściej wykorzystywanych sposobów związanych z używa- niem plików w Pythonie. Wywoływalne Obiekty typu wywoływalnego (ang. callable) obsługują operacje wywoływania funkcji w Pythonie, co oznacza, że mogą być wywoływane jako funkcje programu. Do kategorii tej zalicza się kilka typów wywoływalnych. Naj- częściej spotykane są funkcje wbudowane w Pythona, funk- cje zdefiniowane przez użytkownika, klasy oraz obiekty metod. UWAGA Klasy są uznawane za typy wywoływalne, ponieważ klasa wywoływana jest w celu utworzenia nowego obiektu tej klasy. Kiedy powoła się nowy obiekt klasy, obiekty metod tej klasy także stają się wywoływalne. 21
  • 16. ROZDZIAŁ 1 Podstawy składni Pythona Moduły Typ modułu reprezentuje moduły Pythona, które zostały załadowane za pomocą instrukcji import. Instrukcja import tworzy obiekt typu modułu o tej samej nazwie co moduł Pythona. Następnie wszystkie obiekty wewnątrz modułu są dodawane do atrybutu __dict__ nowoutworzonego obiektu typu modułu. Dostęp do obiektów modułu można uzyskać bezpośred- nio za pomocą składni z kropkami, ponieważ jest on tłuma- PODSTAWY PYTHONA czony na wyszukiwanie w słowniku. W ten sposób można użyć module.object zamiast dostępu do atrybutu poprzez module.__dict__("object") w celu uzyskania dostępu do obiektów modułu. Przykładowo, moduł math zawiera obiekt liczbowy pi; poniższy kod ładuje moduł math i wywołuje obiekt pi: >>> import math >>> print math.pi 3.14159265359 Podstawy składni Pythona Język Python posiada wiele cech wspólnych z Perlem, ję- zykiem C oraz Javą. Istnieją jednak pomiędzy nimi także pewne zdecydowane różnice. Niniejszy podrozdział po- święcony jest krótkiemu opisowi składni, z którą można się spotkać w Pythonie. 22
  • 17. Podstawy składni Pythona ROZDZIAŁ 1 Używanie wcięć kodu Jedną z pierwszych trudności, jakie napotykają programiści uczący się Pythona, jest brak nawiasów klamrowych do oznaczania bloków kodu dla definicji klas i funkcji czy do sterowania przepływem. Bloki kodu są oznaczane przez wcięcia wierszy, co jest surowo wymuszane. Liczba spacji we wcięciu może być różna, jednak wszystkie instrukcje wewnątrz bloku muszą być wcięte o tyle samo. Oba bloki w poniższym przykładzie są poprawne: PODSTAWY PYTHONA if True: print "Prawda" else: print "Fałsz" Jednak drugi blok w kolejnym przykładzie wygeneruje błąd: if True: print "Odpowiedź" print "Prawda" else: print "Odpowiedź" print "Fałsz" Tworzenie wielowierszowych instrukcji Instrukcje w Pythonie zazwyczaj kończą się znakiem końca wiersza. Python pozwala jednak na używanie znaku konty- nuacji wiersza () do oznaczenia, że wiersz ma swój ciąg dalszy. Przykładowo: 23
  • 18. ROZDZIAŁ 1 Podstawy składni Pythona total_sum = sum_item_one + sum_item_two + sum_item_three Instrukcje zawarte wewnątrz nawiasów [], {} czy () nie wymagają użycia znaku kontynuacji wiersza. Przykładowo: week_list = ['Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek'] Cudzysłów PODSTAWY PYTHONA Python zezwala na używanie apostrofów (') i cudzysło- wu (") bądź też trzech apostrofów ('''), lub trzech cu- dzysłowów (""") do oznaczenia literałów łańcuchów znaków, pod warunkiem, że ten sam typ znaku rozpo- czyna i kończy łańcuch. Potrójne cudzysłowy mogą być wykorzystywane do rozciągnięcia łańcucha znaków na wiele wierszy. Przykładowo, wszystkie poniższe przykła- dy są poprawne: word = 'słowo' sentence = "To jest zdanie." paragraph = """To jest akapit. Składa się z kilku wierszy i zdań.""" Formatowanie łańcuchów znaków Python pozwala, by łańcuchy znaków były formatowane z użyciem predefiniowanego formatującego łańcucha zna- ków z listą zmiennych. Poniżej znajduje się przykład uży- wania wielu formatujących łańcuchów znaków do wyświe- tlenia tych samych danych: 24
  • 19. Podstawy składni Pythona ROZDZIAŁ 1 >>> list = ['Brad', 'Dayley', '"Python. Rozmówki"', 2007] >>> letter = """ ... Szanowny Panie %s,n ... Dziękujemy za przesłanie nam Pańskiej książki, %s. ... Skontaktujemy się z Panem w %d roku.""" >>> display = """ ... Tytuł: %s ... Autor: %s, %s ... Data: %d""" >>> record = "%s|%s|%s|%08d" >>> print letter % (list[1], list[2], list[3]) PODSTAWY PYTHONA Szanowny Panie Dayley, Dziękujemy za przesłanie nam Pańskiej książki, "Python. Rozmówki". Skontaktujemy się z Panem w 2007 roku. >>> print display % (list[2], list[1], list[0], list[3]) Tytuł: "Python. Rozmówki" Autor: Dayley, Brad Data: 2007 >>> print record % (list[0], list[1], list[2], list[3]) Brad|Dayley|"Python. Rozmówki"|00002007 Wykorzystywanie instrukcji sterujących Python obsługuje instrukcje if, else oraz elif dla warun- kowego wykonywania kodu. Składnia jest następująca: if expression: block, gdzie expression to wyrażenie, a block — blok kodu, definiujący zachowanie warunkowe. Jeśli wyrażenie zwraca True, blok kodu jest wykonywany. Poniższy kod prezentuje przykład prostej serii bloków if: 25
  • 20. ROZDZIAŁ 1 Podstawy składni Pythona if x == True: print "x jest prawdą" elif y == True: print "y jest prawdą" else: print "oba są fałszem" Python obsługuje pętle warunkowe za pomocą instrukcji while. Składnia jest następująca: while expression: block, gdzie expression to wyrażenie, a block — blok kodu, definiujący zachowanie pętli. Dopóki wyrażenie zwraca True, blok jest wykonywany w pętli. Poniższy kod prezentuje przykład pętli warunkowej while: PODSTAWY PYTHONA x = 1 while x < 10: x += 1 Python obsługuje także instrukcję for dla pętli operują- cych na sekwencjach. Składnia jest następująca: for item in sequence: block, gdzie item to element sekwencji sequence, a block jest blokiem kodu definiującym za- chowanie pętli. Po każdej pętli wybierany jest kolejny element z sekwencji i blok kodu jest wykonywany. Pętla for jest kontynuowana, dopóki w sekwencji nie skończą się elementy. Poniższe kody prezentują kilka różnych przy- kładów pętli sekwencyjnych for. Pierwszy przykład wykorzystuje łańcuch znaków jako se- kwencję, z której utworzy się listę kolejnych znaków z łań- cucha: >>> word = "Python" >>> list = [] >>> for ch in word: 26
  • 21. Podstawy składni Pythona ROZDZIAŁ 1 ... list.append(ch) ... >>> print list ['P', 'y', 't', 'h', 'o', 'n'] Poniższy przykład wykorzystuje funkcję range() do utwo- rzenia tymczasowej sekwencji liczb całkowitych rozmiaru listy, tak by elementy listy mogły być dodawane do łań- cucha znaków w kolejności: >>> string = "" >>> for i in range(len(list)): ... string += list[i] ... PODSTAWY PYTHONA >>> print string Python Kolejny przykład wykorzystuje funkcję enumerate(string) do utworzenia tymczasowej sekwencji. Funkcja enumerate zwraca wyliczenie w formie (0, s[0]), (1, s[1]) i tak dalej, aż do końca sekwencji string, tak by pętla for mogła przypisać zarówno wartości i, jak i ch dla każdej iteracji w celu utworzenia słownika: >>> dict = {} >>> for i,ch in enumerate(string): ... dict[i] = ch ... >>> print dict {0: 'P', 1: 'y', 2: 't', 3: 'h', 4: 'o', 5: 'n'} Poniższy przykład wykorzystuje słownik jako sekwencję w celu wyświetlenia zawartości słownika: >>> for key in dict: ... print key, '=', dict[key] ... 27
  • 22. ROZDZIAŁ 1 Podstawy składni Pythona 0 = P 1 = y 2 = t 3 = h 4 = o 5 = n Python udostępnia instrukcję break w celu przerwania wykonywania i wyjścia z bieżącej pętli. Zawiera także in- strukcję continue, która przerywa wykonywanie bieżą- cej iteracji i rozpoczyna kolejną iterację bieżącej pętli. Poniższy przykład pokazuje użycie instrukcji break oraz continue: PODSTAWY PYTHONA >>> word = "Pithon. Rozmówki" >>> string = "" >>> for ch in word: ... if ch == 'i': ... string +='y' ... continue ... if ch == ' ': ... break ... string += ch ... >>> print string Python. UWAGA Po pętlach for i while można dodać instrukcję else, tak samo jak w przypadku instrukcji if. Instrukcja else jest wy- konywana po tym, jak pętla z powodzeniem zakończy wszyst- kie iteracje. Jeśli napotykana jest instrukcja break, else nie jest wykonywane. 28
  • 23. Podstawy składni Pythona ROZDZIAŁ 1 Obecnie nie ma w Pythonie instrukcji przełączającej (ang. switch). Najczęściej nie jest to problemem i można sobie poradzić dzięki serii instrukcji if-elif-else. Istnieje jed- nak wiele innych sposobów radzenia sobie z tym brakiem. Poniższy przykład pokazuje, jak można utworzyć prostą instrukcję przełączającą w Pythonie1: >>> def a(s): ... print s ... >>> def switch(ch): ... try: ... {'1': lambda : a("jeden"), PODSTAWY PYTHONA ... '2': lambda : a("dwa"), ... '3': lambda : a("trzy"), ... 'a': lambda : a("Litera a") ... }[ch]() ... except KeyError: ... a("Nie znaleziono klucza") ... >>> switch('1') jeden >>> switch('a') Litera a >>> switch('b') Nie znaleziono klucza 1 Warto zauważyć, że od dawna rozważano usunięcie notacji lambda z Pythona począwszy od przyszłej wersji 3.0; aktualnie nie zapowiada się, by miało się tak stać (PEP 3099) — przyp. tłum. 29
  • 24. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona Obiekty, moduły, klasy i funkcje Pythona Niniejszy podrozdział poświęcony jest omówieniu pod- stawowych koncepcji związanych z obiektami, modułami, klasami oraz funkcjami języka Python. Podrozdział ten zakłada, że Czytelnik posiada podstawowe zrozumienie języków zorientowanych obiektowo, i ma dostarczyć wy- starczającą ilość informacji, by możliwe było rozpoczęcie pracy z Pythonem oraz wykorzystywanie i tworzenie skom- PODSTAWY PYTHONA plikowanych modułów i klas. Wykorzystywanie obiektów Python jest zbudowany wokół koncepcji „obiektu”. Każdy fragment danych przechowywany i wykorzystywany przez Pythona jest obiektem. Listy, łańcuchy znaków, słowniki, liczby, klasy, pliki, moduły i funkcje — wszystkie one są obiektami. Każdy obiekt w Pythonie posiada swoją tożsamość, typ oraz wartość. Tożsamość (ang. identity) wskazuje na lo- kalizację obiektu w pamięci. Typ (ang. type) opisuje re- prezentację obiektu dla Pythona (więcej w tabeli 1.1). Wartość (ang. value) obiektu to po prostu dane w nim prze- chowywane. Poniższy przykład pokazuje, w jaki sposób można uzyskać dostęp do tożsamości, typu i wartości obiektu w sposób programowy za pomocą odpowiednio: id(object), type (object) oraz nazwy zmiennej: 30
  • 25. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 >>> l = [1,2,3] >>> print id(l) 9267480 >>> print type(l) <type 'list'> >>> print l [1, 2, 3] Po utworzeniu obiektu, tożsamość i typ nie mogą być zmienione. Jeśli wartość obiektu się zmienia, jest on uważany za obiekt zmienny (ang. mutable). Jeśli wartość obiektu nie może być modyfikowana, jest uznawany za obiekt niezmienny (ang. immutable). PODSTAWY PYTHONA Niektóre obiekty posiadają także atrybuty i metody. Atry- buty są wartościami powiązanymi z obiektem. Metody to wywoływalne funkcje, które wykonują operacje na obiekcie. Dostęp do atrybutów i metod obiektu uzyskuje się po- przez wykorzystanie składni z kropkami (.): >>> class test(object): ... def printNum(self): ... print self.num ... >>> t = test() >>> t.num = 4 >>> t.printNum() 4 Wykorzystywanie modułów Cały Python zbudowany jest z modułów. Moduły są pli- kami Pythona, które pochodzą z podstawowych bibliotek dostarczanych wraz z tym językiem, a także modułów 31
  • 26. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona tworzonych przez inne organizacje, tworzące rozszerzenia do Pythona oraz modułów napisanych samodzielnie przez programistę. Większe aplikacje lub biblioteki, które za- wierają więcej modułów, zazwyczaj połączone są w pa- kiety. Pakiety pozwalają na połączenie kilku modułów pod jedną nazwą. Moduły ładowane są do programu w Pythonie za pomocą instrukcji import. Po zaimportowaniu modułu tworzona jest dla niego i dla wszystkich zawartych w nim obiektów przestrzeń nazw. Następnie wykonywany jest kod z pliku PODSTAWY PYTHONA źródłowego i tworzony jest obiekt modułu o takiej samej nazwie co plik źródłowy, dzięki czemu możliwy jest do- stęp do przestrzeni nazw. Istnieje kilka różnych sposobów importowania modu- łów. Poniższe przykłady obrazują niektóre z tych metod. Moduły mogą być importowane bezpośrednio za pomocą nazwy pakietu bądź modułu. Dostęp do elementów z pod- modułów musi odbywać się w sposób jawny, poprzez poda- nie pełnej nazwy pakietu: >>> import os >>> os.path.abspath(".") 'C:bookspython' Moduły mogą być importowane bezpośrednio za pomocą nazwy modułu, jednak przestrzeń nazw może być nazwana inaczej. Dostęp do elementów z podmodułów musi od- bywać się w sposób jawny, poprzez podanie pełnej nazwy pakietu: 32
  • 27. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 >>> import os as computer >>> computer.path.abspath(".") 'C:bookspython' Moduły mogą być importowane za pomocą nazwy modułu wewnątrz pakietu. Dostęp do elementów z podmodułów musi odbywać się w sposób jawny, poprzez podanie peł- nej nazwy pakietu: >>> import os.path >>> os.path.abspath(".") 'C:bookspython' PODSTAWY PYTHONA Moduły mogą być importowane poprzez wybranie konkret- nych modułów z pakietu. Dostęp do elementów z podmo- dułów może odbywać się w sposób niejawny, bez podania pełnej nazwy pakietu: >>> from os import path >>> path.abspath(".") 'C:bookspython' UWAGA Python zawiera funkcję reload(module), która przeładowuje moduł określony jako module. Jest ona wyjątkowo przydatna w czasie tworzenia programów, kiedy istnieje potrzeba uak- tualnienia modułu i przeładowania go bez kończenia pro- gramu. Obiekty utworzone przed przeładowaniem modułu nie zostaną uaktualnione, dlatego należy bardzo uważać w przy- padku wykonywania na nich jakichś operacji. 33
  • 28. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona Podstawy klas Pythona Klasy Pythona są generalnie zbiorem atrybutów oraz metod. Klasy zazwyczaj służą jednemu z dwóch celów: tworze- niu nowego typu danych zdefiniowanego przez użytkow- nika lub rozszerzeniu możliwości istniejącego typu danych. Niniejszy podrozdział zakłada, że Czytelnik rozumie, czym są klasy, na bazie języka C, Javy czy innego języka zorien- towanego obiektowo. W Pythonie klasy są wyjątkowo łatwe do zdefiniowania; PODSTAWY PYTHONA łatwo również utworzyć nowe obiekty klasy (ang. instan- tiation). Do zdefiniowania nowej klasy służy instrukcja class name(object):, gdzie name jest nazwą własnego typu obiektu, zdefiniowaną przez użytkownika, natomiast object określa obiekt Pythona, po którym się dziedziczy. UWAGA Dziedziczenie klas w Pythonie jest podobne do dziedziczenia z Javy, języka C i innych języków zorientowanych obiektowo. Metody i atrybuty klasy rodzica będą dostępne dla klasy po- tomnej, natomiast metody i atrybuty o tej samej nazwie w klasie potomnej nadpiszą te z klasy rodzica. Cały kod zawarty w bloku następującym po instrukcji class wykonywany będzie za każdym razem, kiedy tworzony jest obiekt klasy. Próbka kodu o nazwie testClass.py ilu- struje sposób tworzenia prostej klasy w Pythonie. Instruk- cja class ustala nazwę typu klasy i dziedziczy po bazowej klasie object. 34
  • 29. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 UWAGA Instrukcja class definiuje jedynie typ obiektu klasy; nie tworzy samego obiektu klasy. Obiekt klasy nadal musi być utworzony poprzez bezpośrednie wywołanie klasy. Funkcja __init__ nadpisuje metodę odziedziczoną po klasie object i będzie wywoływana, kiedy tworzony bę- dzie obiekt klasy. Obiekt klasy tworzony jest przez bez- pośrednie wywołanie: tc = testClass("Pięć"). Po bezpośrednim wywołaniu klasy, zwracany jest obiekt tej klasy. PODSTAWY PYTHONA UWAGA Możliwe jest określenie niezbędnych parametrów funkcji __init__() pod warunkiem, że parametry te dostarczy się w momencie wywoływania klasy w celu utworzenia obiektu klasy. class testClass(object): print "Tworzenie nowej klasyn=====================" number=5 def __init__(self, string): self.string = string def printClass(self): print "Liczba = %d"% self.number print "Łańcuch znaków = %s"% self.string tc = testClass("Pięć") tc.printClass() tc.number = 10 tc.string = "Dziesięć" tc.printClass() Plik testClass.py 35
  • 30. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona Tworzenie nowej klasy ===================== Liczba = 5 Łańcuch znaków = Pięć Liczba = 10 Łańcuch znaków = Dziesięć Dane wyjściowe dla kodu z pliku testClass.py UWAGA Wewnątrz klasy konieczne jest stosowanie prefiksu self., kiedy odnosi się do atrybutów i metod tej klasy. Choć self jest także wymieniane jako pierwszy argument we wszyst- PODSTAWY PYTHONA kich metodach klasy, w rzeczywistości nie musi jednak być jawnie określane, kiedy wywołuje się metodę. Wykorzystywanie funkcji Definiowanie i wywoływanie funkcji w Pythonie jest za- zwyczaj stosunkowo łatwe, może jednak także stać się moc- no zagmatwane. Najważniejsze, co należy zapamiętać, to że funkcje są obiektami języka Python i że przekazywane parametry są w rzeczywistości „stosowane” do obiektu funkcji. By utworzyć funkcję, należy skorzystać z instrukcji def functionname(parameters):, gdzie functionname to na- zwa funkcji, a parameters — jej parametry, a później zde- finiować funkcję w następującym po niej bloku kodu. Po zdefiniowaniu funkcji można ją wywoływać poprzez okre- ślenie nazwy funkcji oraz przekazanie jej odpowiednich parametrów. 36
  • 31. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 Poniższe akapity pokazują niektóre z różnych sposobów wykonania pewnego zadania dla funkcji przedstawionej poniżej: def fun(name, location, year=2006): print "%s/%s/%d" % (name, location, year) n Pierwszy przykład prezentuje funkcję wywoływaną poprzez przekazanie wartości parametrów w kolej- ności. Warto zwrócić uwagę na fakt, iż parametr z ro- kiem posiada wartość domyślną, ustawioną w definicji funkcji, co oznacza, że ten parametr może zostać po- minięty, a wtedy wykorzystana zostanie wartość do- PODSTAWY PYTHONA myślna. >>> fun("Robert", "Katowice") Robert/Katowice/2006 n Kolejny przykład pokazuje przekazywanie parametrów przez nazwę. Zaleta przekazywania parametrów przez nazwę polega na tym, że kolejność, w jakiej ukazują się one na liście parametrów, nie ma znaczenia. >>> fun(location="Berlin", year=2004, name="Aleksander" ) Aleksander/Berlin/2004 n Poniższy przykład ilustruje możliwość łączenia róż- nych metod przekazywania parametrów. W przykła- dzie tym pierwszy parametr jest przekazany jako wartość, natomiast drugi i trzeci są przekazane przez nazwę. >>> fun("Amadeusz", year=2005, location="Wiedeń") Amadeusz/Wiedeń/2005 37
  • 32. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona n Parametry mogą także być przekazane jako krotka (ang. tuple) za pomocą składni z *, jak pokazano na kolejnym przykładzie. Elementy krotki muszą od- powiadać parametrom, które są oczekiwane przez funkcję. >>> tuple = ("Edward", "Kolonia", 2003) >>> fun(*tuple) Edward/Kolonia/2003 n Parametry mogą również być przekazywane jako słow- nik za pomocą składni z **, jak pokazano na poniższym przykładzie. Wpisy w słowniku muszą odpowiadać pa- PODSTAWY PYTHONA rametrom, które są oczekiwane przez funkcję. >>> dictionary = {'name':'Franciszek', 'location':'Skierniewice', 'year':1999} >>> fun(**dictionary) Franciszek/Skierniewice/1999 n Wartości mogą być zwracane z funkcji za pomocą in- strukcji return. Jeśli funkcja nie posiada instrukcji return, zwracany jest obiekt None. Poniższy przykład pokazuje prostą funkcję potęgowania, która przyjmuje liczbę i zwraca kwadrat tej liczby: >>> def square(x): ... return x*x ... >>> print square(3) 9 UWAGA Funkcje mogą być traktowane tak samo, jak wszystkie inne obiekty Pythona. Oprócz wywoływania, można je między in- nymi przypisywać jako wartość do listy bądź słownika, prze- kazywać jako argument, zwracać jako wartość i tak dalej. 38
  • 33. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 n Operator lambda wbudowany w Pythona udostępnia metodę tworzenia funkcji anonimowych. Ułatwia to przekazanie prostych funkcji jako parametrów bądź przypisanie ich do nazw zmiennych. Operator lambda wykorzystuje następującą składnię w celu zdefinio- wania funkcji: lambda <args> : <expression> Termin args odnosi się do listy argumentów, które są przekazywane do funkcji. Termin expression może być dowolnym poprawnym wyrażeniem Pythona. Poniższy kod prezentuje przykład zastosowania ope- PODSTAWY PYTHONA ratora lambda w celu przypisania anonimowej funkcji do zmiennej: >>> bigger = lambda a, b : a > b >>> print bigger(1,2) False >>> print bigger(2,1) True Przestrzenie nazw i zasięg Zasięg w Pythonie powiązany jest z koncepcją przestrzeni nazw. Przestrzenie nazw (ang. namespaces) to generalnie słowniki, zawierające nazwy i wartości obiektów znajdują- cych się wewnątrz danego zakresu. Istnieją cztery główne typy przestrzeni nazw, z którymi można się spotkać: przestrzenie nazw globalne, lokalne, modułów oraz klas. Globalne przestrzenie nazw są tworzone, kiedy program rozpoczyna wykonywanie. Globalna przestrzeń nazw po- czątkowo zawiera wbudowane informacje o wykonywanym 39
  • 34. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona module. Nowe obiekty są stopniowo dodawane do global- nej przestrzeni nazw w miarę definiowania ich w zakresie tej przestrzeni nazw. Globalna przestrzeń nazw jest dostęp- na ze wszystkich zakresów, jak pokazano na przykładzie, w którym globalna wartość x jest odczytywana za pomocą funkcji globals()["x"]. UWAGA Do globalnej przestrzeni nazw można zajrzeć poprzez wyko- rzystanie funkcji globals(), która zwraca obiekt słownika, zawierający wszystkie wpisy z tej przestrzeni nazw. PODSTAWY PYTHONA Lokalne przestrzenie nazw są tworzone, kiedy wywoływana jest funkcja. Lokalne przestrzenie nazw są zagnieżdżone wraz z funkcjami w miarę ich zagnieżdżania. Wyszukiwanie nazwy rozpoczyna się w najbardziej zagnieżdżonej prze- strzeni nazw i postępuje stopniowo aż do globalnej prze- strzeni nazw. Instrukcja global zmusza nazwy do połączenia ich z glo- balną przestrzenią nazw zamiast z lokalną. W przykładowym kodzie wykorzystano instrukcję global do zmuszenia na- zwy x, by wskazywała ona na globalną przestrzeń nazw. Kiedy x się zmienia, zmodyfikowany zostaje obiekt globalny. UWAGA Choć obiekty w zewnętrznie zagnieżdżonych przestrzeniach nazw mogą być widziane, modyfikowane mogą być jedynie najbardziej lokalne i globalne przestrzenie nazw. W przykła- dowym kodzie do zmiennej b z funkcji fun można odwoły- wać się z funkcji sub, jednak modyfikacja jej wartości w sub nie zmieni wartości w fun. 40
  • 35. Obiekty, moduły, klasy i funkcje Pythona ROZDZIAŁ 1 x = 1 def fun(a): b=3 x=4 def sub(c): d=b global x x = 7 print ("Zagnieżdżona funkcjan====================") print locals() sub(5) print ("nFunkcjan====================") print locals() PODSTAWY PYTHONA print locals()["x"] print globals()["x"] print ("nZmienne globalnen====================") print globals() fun(2) Plik scope.py Zmienne globalne ==================== {'x': 1, '__file__': 'C:bookspythonCH1codescope.py', 'fun': <function fun at 0x008D7570>, 't': <class '__main__.t'>, 'time': <module 'time' (built-in)>,. . .} Zagnieżdżona funkcja ==================== {'c': 5, 'b': 3, 'd': 3} Funkcja ================= {'a': 2, 'x': 4, 'b': 3, 'sub': 41
  • 36. ROZDZIAŁ 1 Obiekty, moduły, klasy i funkcje Pythona <function sub at 0x008D75F0>} 4 7 Dane wyjściowe dla kodu z pliku scope.py Przestrzeń nazw modułu jest tworzona, gdy moduł jest importowany, a obiekty wewnątrz modułu odczytywane. Dostęp do przestrzeni nazw modułu odbywa się za po- mocą atrybutu .__dict__ obiektu modułu. Dostęp do obiektów w przestrzeni nazw modułu można uzyskać bez- pośrednio poprzez wykorzystanie nazwy modułu oraz składni z kropkami (.). Poniższy przykład pokazuje to PODSTAWY PYTHONA na bazie wywołania funkcji localtime() modułu time: >>> import time >>> print time.__dict__ {'ctime': <built-in function ctime>, 'clock': <built-in function clock>, ... 'localtime': <built-in function localtime>} >>> print time.localtime() (2006, 8, 10, 14, 32, 39, 3, 222, 1) Przestrzeń nazw klasy jest podobna do przestrzeni nazw modułu, jest jednak tworzona w dwóch częściach. Pierwsza część jest tworzona, gdy klasa jest definiowana, natomiast druga część powstaje, kiedy tworzony jest obiekt klasy. Dostęp do przestrzeni nazw klasy może także odbywać się poprzez wykorzystanie atrybutu .__dict__ obiektu klasy. UWAGA W poniższym kodzie warto zwrócić uwagę na fakt, iż x znaj- duje się w t.__dict__, natomiast double znajduje się w tClass.__dict__. Mimo to oba są dostępne za pomocą składni z kropkami obiektu klasy. 42
  • 37. Obsługa błędów ROZDZIAŁ 1 Dostęp do obiektów w przestrzeni nazw klasy może się odbywać w sposób bezpośredni za pomocą nazwy modułu oraz składni z kropkami. Na poniższym przykładzie widać to w przypadku instrukcji print t.x oraz t.double(): >>> class tClass(object): ... def __init__(self, x): ... self.x = x ... def double(self): ... self.x += self.x ... >>> t = tClass (5) >>> print t.__dict__ {'x': 5} PODSTAWY PYTHONA >>> print tClass.__dict__ {'__module__': '__main__', 'double': <function double at 0x008D7570>, . . . } >>> print t.x 5 >>> t.double() >>> print t.x 10 Obsługa błędów Obsługa błędów w Pythonie jest wykonywana poprzez wykorzystanie wyjątków, które są ujmowane w bloki try i obsługiwane w blokach except. Jeśli napotykany jest błąd, wykonanie kodu z bloku try jest zatrzymywane i przeno- szone do bloku except, jak pokazano w poniższej składni: try: f = open("test.txt") except IOError: print "Nie można otworzyć pliku." 43
  • 38. ROZDZIAŁ 1 Obsługa błędów Wartość typu exception odnosi się albo do wyjątków wbudowanych w Pythona, albo do samodzielnie zdefinio- wanego obiektu wyjątku. Wartość error jest zmienną, która przechwytuje dane zwracane przez wyjątek. UWAGA Blok try obsługuje także wykorzystywanie bloku else po ostatnim bloku except. Blok else jest wykonywany, jeśli blok try zakończy działanie bez otrzymania wyjątku. Oprócz używania bloku except po bloku try, możliwe PODSTAWY PYTHONA jest także wykorzystanie bloku finally. Kod z bloku finally będzie wykonany bez względu na to, czy wystąpi wyjątek. Jeśli wyjątek się nie pojawi, blok finally zo- stanie wykonany po bloku try. Jeśli wyjątek wystąpi, wykonanie jest natychmiast przenoszone do bloku finally, a następnie obsługa wyjątku jest kontynuowana, dopóki nie będzie on obsłużony2. Poniższy kod pokazuje przy- kład wykorzystania bloku finally w celu zmuszenia pliku do zamknięcia, nawet jeśli wystąpi wyjątek: f = open("test.txt") try: f.write(data) . . . finally: f.close() 2 Od wersji 2.5 Pythona możliwe jest już łączenie ze sobą dotychczas wzajemnie wykluczających się bloków except i finally w jeden blok try-except-finally — przyp. tłum. 44
  • 39. Wykorzystywanie narzędzi systemowych ROZDZIAŁ 1 Możliwe jest zgłoszenie wyjątku przez własny program poprzez użycie instrukcji raise exception [, value]. Wartość exception jest jednym z wbudowanych w Py- thona wyjątków bądź też samodzielnie zdefiniowanym obiektem wyjątku. Wartością value jest obiekt Pythona, który tworzy się w celu podania szczegółów wyjątku. Zgłoszenie wyjątku przerywa bieżące wykonywanie ko- du i zgłasza wyjątek. Poniższy przykład pokazuje, w jaki sposób można zgłosić ogólny wyjątek RuntimeError za pomocą prostej wartości komunikatu: raise RuntimeError, "Błąd wykonania skryptu" PODSTAWY PYTHONA UWAGA Jeśli wyjątek nie jest obsługiwany, program kończy się, a śle- dzenie wyjątku jest przesyłane do sys.stderr. Wykorzystywanie narzędzi systemowych Jedną z najbardziej użytecznych cech Pythona jest zbiór modułów, które zapewniają dostęp do lokalnego systemu komputera. Moduły te umożliwiają dostęp do takich ele- mentów jak system plików, system operacyjny oraz po- włoka systemowa, a także do wielu funkcji systemowych. Niniejszy podrozdział omawia wykorzystywanie modułów os, sys, platform oraz time w celu uzyskania dostępu do niektórych z najczęściej używanych informacji systemowych. 45
  • 40. ROZDZIAŁ 1 Wykorzystywanie narzędzi systemowych Moduł os Moduł os udostępnia przenośny, niezależny od platformy interfejs dla dostępu do popularnych usług operacyjnych, co pozwala na dodanie do programów obsługi na pozio- mie systemu operacyjnego. Poniższe przykłady ilustrują niektóre z najczęściej spotykanych zastosowań modułu os. Funkcja os.path.abspath(path) modułu os zwraca bez- względną ścieżkę (path) w formie łańcucha znaków. Po- nieważ abspath bierze pod uwagę obecny bieżący katalog, PODSTAWY PYTHONA elementy ścieżek takie jak . oraz .. będą działały w nastę- pujący sposób: >>> import os >>> print os.path.abspath(".") C:bookspythonch1 >>> print os.path.abspath("..") C:bookspython Moduł os.path udostępnia funkcje exists(path), isdir (path) oraz isfile(path) w celu sprawdzania istnienia plików oraz katalogów, jak zaprezentowano poniżej: >>> print os.path.exists("/books/python/ch1") True >>> print os.path.isdir("/books/python/ch1") True >>> print os.path.isfile("/books/python/ch1/ch1.doc") True Funkcja os.chdir(path) umożliwia prosty sposób zmiany bieżącego katalogu roboczego dla programu, na przykład: 46
  • 41. Wykorzystywanie narzędzi systemowych ROZDZIAŁ 1 >>> os.chdir("/books/python/ch1/code") >>> print os.path.abspath(".") C:bookspythonCH1code Atrybut os.environ zawiera słownik zmiennych środowi- skowych. Można z tego słownika korzystać w pokazany poniżej sposób w celu uzyskania dostępu do zmiennych środowiskowych systemu: >>> print os.environ['PATH'] C:WINNTsystem32;C:WINNT;C:Python24 Funkcja os.system(command) wykona funkcję systemową PODSTAWY PYTHONA command tak, jakby znajdowała się ona w podpowłoce, jak pokazano w przypadku poniższego polecenia dir: >>> os.system("dir") Numer seryjny woluminu: 98F3-A875 Katalog: C:bookspythonch1code 2006-08-11 14:10 <DIR> . 2006-08-11 14:10 <DIR> .. 2006-08-10 16:00 405 format.py 2006-08-10 10:27 546 function.py 2006-08-10 15:07 737 scope.py 2006-08-11 14:58 791 sys_tools.py 4 plik(ów) 3 717 bajtów 2 katalog(ów) 7 880 230 400 bajtów åwolnych Python udostępnia kilka funkcji typu exec, które służą do wykonywania aplikacji w rdzennym systemie. Poniższy przykład ilustruje wykorzystanie funkcji os.execvp(path, args) w celu wykonania aplikacji update.exe z parametrem wiersza poleceń -verbose: >>> os.execvp("update.exe", ["-verbose"]) 47
  • 42. ROZDZIAŁ 1 Wykorzystywanie narzędzi systemowych Moduł sys Moduł sys udostępnia interfejs dostępu do środowiska in- terpretera Pythona. Poniższe przykłady ilustrują niektóre z najczęstszych zastosowań modułu sys. Atrybut argv modułu sys jest listą. Pierwszy element na liście argv jest ścieżką do modułu; reszta listy składa się z argumentów, które zostały przekazane do modułu na początku wykonania. Przykładowy kod pokazuje, w jaki sposób można wykorzystać listę argv dla dostępu do pa- rametrów wiersza poleceń przekazanych do modułu Py- PODSTAWY PYTHONA thona: >>> import sys >>> print sys.argv ['C:bookspythonCH1codeprint_it.py', 'text'] >>> print sys.argv[1] text Atrybut stdin modułu sys jest obiektem pliku, który zo- staje utworzony na początku wykonywania kodu. W poniż- szym przykładowym kodzie text jest odczytywany z stdin (w tym przypadku z klawiatury, co jest wartością domyślną) za pomocą funkcji readline(): >>> text = sys.stdin.readline() Dane wejściowe >>> print text Dane wejściowe Moduł sys posiada także atrybuty stdout oraz stderr, które wskazują na pliki używane jako standardowe wyjście oraz standardowe wyjście błędów. Pliki te domyślnie zwią- 48
  • 43. Wykorzystywanie narzędzi systemowych ROZDZIAŁ 1 zane są z ekranem. Poniższy fragment kodu pokazuje, w jaki sposób przekierować standardowe wyjście oraz standar- dowe komunikaty błędów do pliku w miejsce wyświetlania ich na ekranie: >>> sOUT = sys.stdout >>> sERR = sys.stderr >>> sys.stdout = open("ouput.txt", "w") >>> sys.stderr = sys.stdout >>> sys.stdout = sOUT >>> sys.stderr = sERR Moduł platform PODSTAWY PYTHONA Moduł platform udostępnia przenośny interfejs do infor- macji o platformie, na której uruchamiany jest program. Poniższe przykłady ilustrują niektóre z najczęstszych za- stosowań modułu platform. Funkcja platform.architecture() zwraca krotkę (bits, linkage), gdzie bits to liczba bitów wielkości słowa w sys- temie, natomiast linkage to powiązane informacje o pliku wykonywalnym Pythona: >>> import platform >>> print platform.architecture() ('32bit', '') Funkcja platform.python_version() zwraca wersję pliku wykonywalnego Pythona dla celów zgodności: >>> print platform.python_version() 2.4.2 49
  • 44. ROZDZIAŁ 1 Wykorzystywanie narzędzi systemowych Funkcja platform.uname() zwraca krotkę w formie (system, node, release, version, machine, proces- sor). W krotce tej system odnosi się do aktualnie dzia- łającego systemu operacyjnego, node do nazwy hosta danej maszyny, release do głównej wersji systemu operacyj- nego, version do informacji o wydaniu systemu opera- cyjnego w formie łańcucha znaków, natomiast machine oraz processor odnoszą się do informacji sprzętowych danej platformy. >>> print platform.uname() ('Linux', 'bwd-linux', '2.6.16-20-smp', PODSTAWY PYTHONA '#1 SMP Mon Apr 10 04:51:13 UTC 2006', 'i686', 'i686') Moduł time Moduł time udostępnia przenośny interfejs do funkcji związanych z czasem w systemie, na którym program jest wykonywany. Poniższe przykłady ilustrują niektóre z naj- częstszych zastosowań modułu time. Funkcja time.time() zwraca bieżący czas systemowy jako liczbę sekund, które upłynęły od 1 stycznia 1970 roku zgodnie z UTC (Coordinated Universal Time). Wartość ta jest zazwyczaj zbierana w kilku punktach programu i jest wykorzystywana w operacjach odejmowania w celu usta- lenia czasu, który upłynął od jakiegoś zdarzenia. >>> import time >>> print time.time() 1155333864.11 50
  • 45. Wykorzystywanie narzędzi systemowych ROZDZIAŁ 1 Funkcja time.localtime(secs) zwraca czas, określany w sekundach, od 1 stycznia 1970 roku, w formie krotki (year, month, day, hour, second, day of week, day of year, daylight savings), zawierający rok, miesiąc, dzień, godzinę, sekundę, dzień tygodnia, dzień roku oraz przesunięcie związane z czasem letnim bądź zimowym. Jeśli czas nie jest podany, wykorzystywany jest czas bie- żący, jak poniżej: >>> print time.localtime() (2006, 8, 11, 16, 4, 24, 4, 223, 1) PODSTAWY PYTHONA Funkcja time.ctime(secs) zwraca czas, określony w se- kundach, od 1 stycznia 1970 w formie sformatowanego łańcucha znaków, nadającego się do wydrukowania. Jeśli czas nie został określony, wykorzystywany jest czas bie- żący, jak poniżej: >>> print time.ctime() Fri Aug 11 16:04:24 2006 Funkcja time.clock() zwraca aktualny czas procesora w postaci liczby zmiennoprzecinkowej, która może być wy- korzystywana do różnych funkcji mierzących czas: >>>print time.clock() 5.02857206712e-006 Funkcja time.sleep(secs) zmusza bieżący proces do uśpienia na liczbę sekund określoną przez liczbę zmien- noprzecinkową secs: >>>time.sleep(.5) 51