Programowanie w językach skryptowych



Podobne dokumenty
Python. Skąd taka nazwa? Kurs systemu UNIX 1

Przegląd języka Python. Łukasz Anwajler

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Kurs rozszerzony języka Python

Python wstęp do programowania dla użytkowników WCSS

Języki skryptowe w programie Plans

Podstawy programowania. Wprowadzenie

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Zaawansowany kurs języka Python

Programowanie w języku Python. Grażyna Koba

Java jako język programowania

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Tworzenie oprogramowania

Wykresy i interfejsy użytkownika

Programowanie MorphX Ax

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Redis, skrypty w języku Lua

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Programowanie obiektowe zastosowanie języka Java SE

Wprowadzenie do programowania

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Programowanie współbieżne i rozproszone

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

TEST KOŃCOWY DLA KLASY III GIMNAZJUM- POGRAMOWANIE. Szkoła Podstawowa Nr 5. im. Księcia Mazowieckiego Siemowita IV w Gostyninie.

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie w C. dr inż. Stanisław Wszelak

1 Podstawy c++ w pigułce.

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Podstawy i języki programowania

Podstawy języka skryptowego Lua

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Java EE produkcja oprogramowania

Bazy danych i strony WWW

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Metody numeryczne. Artur Wymysłowski, prof. PWr. Wrocław

PyPy's Approach to Virtual Machine Construction

Koło Studentów Informatyki Uniwersytetu Wrocławskiego

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

Programowanie obiektowe - 1.

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Python wstęp. Michał Bereta

Deduplikacja danych. Zarządzanie jakością danych podstawowych

Wstęp do programowania

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

Wstęp do Informatyki dla bioinformatyków

Wprowadzenie do biblioteki klas C++

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Wstęp do programowania

Wykład nr 1 Język Ruby i framework Rails

Pracownia internetowa w szkole ZASTOSOWANIA

Struktury systemów operacyjnych

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

KARTA KURSU. Języki skryptowe

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Programowanie komputerów

Umieszczanie kodu. kod skryptu

Język Python (2) Język Python (2) 1/36

Budowa i oprogramowanie komputerowych systemów sterowania. Laboratorium 4. Metody wymiany danych w systemach automatyki DDE

Programowanie w języku C++ Grażyna Koba

NARZĘDZIA WIZUALIZACJI

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu MacOS

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Szczegółowy opis zamówienia:

Wstęp do programowania

MentorGraphics ModelSim

Programowanie obiektowe

Paradygmaty programowania

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Transkrypt:

Programowanie w językach skryptowych Wykład 1: Wprowadzenie do języków skryptowych 1

Plan wykładu Wykłady są po 2 godziny tygodniowo przez pierwszą połowę semestru. Wykład1 Przypomnienie z Pythona, Przykładowe skrypty systemowe w Python. Wykład 2 OOP Wykład 3 Wątki Wykład 4 Wstęp o Ruby, typy danych, instrukcje sterujące, pętle Wykład 5 stringi, OOP, Refleksje Wykład 6 wyrażenia regularne, wyjątki, wątki Wykład 7 Kolokwium 2

Typy języków skryptowych Języki kontroli zadań i powłoki (ang. job control languages and shells) Najstarsze języki skryptowe: Unix shelll, MS DOS COMMAND.COM Języki specyficzne dla aplikacji Tworzone dla jednej aplikacji. Emacs Lisp, VisualBasic for application Języki przetwarzania tekstu Narzędzia Unixa: AWK, sed, grep, pierwsze wersje Perl Dynamiczne języki ogólnego przeznaczenia dynamiczne typy, zarządzanie pamięcią, używane do budowy dowolnych programów Języki GUI Operują na graficznych elementach systemu operacyjnego, symulują działanie użytkownika.

Język skryptowy Język skryptowy język programowania służący do kontrolowania danej aplikacji lub służący do pisania kodu, który jest analizowany przez interpretator Skrypty programy napisane w językach skryptowych, których kod źródłowy, lub kod pośredni są analizowane przez interpretator lub program główny i uruchamiane. Programy nieskryptowe są najpierw kompilowane to kodu maszynowego i później wykonywane niezależnie od innych aplikacji. Wczesne języki skryptowe były zwykle zwane językami plików wsadowych (ang. batch languages) tworzono w celu skrócenia tradycyjnego procesu edytowanie kompilacja linkowanie wykonanie.

Przykłady języków skryptowych Python; ASP; AutoIt; AviSynth; Awk; bash; Brain; C Script; CobolScript; Dylan; E; Euphoria; Guile; Game Maker Language; ICI;JavaScript;JCL;Lua;MUMPS;ObjectRexx;Perl;PHP;Pike; Pliant; AngelCode; QuakeC; REBOL; Rexx; Ruby; Groovy; sh; Simkin; Tcl; UnrealScript; VBScript; Visual DialogScript; Miva.

Czym jest Python Python to popularny (gdyż prosty, o dużych możliwościach, darmowy i powszechnie dostępny) język skryptowy, opracowany we wczesnych latach 90. przez Guido van Rossuma Język nie wymusza jednego stylu programowania, pozwalając na stosowanie różnych. W Pythonie możliwe jest programowanie obiektowe, programowanie strukturalne i programowanie funkcyjne. Typy sprawdzane są dynamicznie, a do zarządzania pamięcią stosuje się garbage collection. Zastosowanie Pythona NASA aplikacje do zarządzania kontrolą startową wahadłowców. Projekt Nebula to rozproszone środowisko obliczeniowe przystosowane do wykonywania obliczeń w "chmurze" łączące wiele modułów i aplikacji Pythonowych. 6

Darmowość i swobodny dostęp Powszechnie dostępny: www.python.org Oprogramowanie o otwartych źródłach Licencja Pythona zezwala na kopiowanie, modyfikację, rozszerzanie, rozpowszechnianie, wbudowywanie i odsprzedaż bez konieczności wnoszenia opłat lub podpisywania umów licencyjnych. Ograniczenia: Należy umieścić informacje oprawach autorskich.

Pewność działania i dobre wspomaganie Powstał 20 lat temu stąd obecnie jest to dojrzały produkt, którego kod źródłowy był tworzony, modyfikowany, testowany i poprawiany przez wiele osób. Python jest rozpowszechniany wraz z kompletem dokumentacji, samouczek, opis języka oraz opis bibliotek

Przenośność Python został napisany w ANSI C. Można go skompilować iuruchamiać na każdej popularnej współczesnejplatformiesystemowej. Rdzeń języka oraz biblioteki działają w ten sam sposób na wszystkich platformach, stądprogramymożna tworzyć wmieszanychśrodowiskach. Ograniczenia: niektóre rozszerzenia Pythona są zależne od systemu operacyjnego. Nie można zatem wywoływać modułu COM z Windows w systemie Linux.

Zgodność z innymi językami Python pozwala się łatwo sklejać z istniejącymi bibliotekami napisanymi w C, C++, Fortran, Java lub Visual Basic (za pomocą pakietu COM) O integracji Pythona z C można przeczytać w podręcznikach Python/C API refence Manual i Extending and embeding the Python Interpreter dołączonych do dystrybucji Pythona Jython implementacja Pythona dla JVM. Jython umożliwia wykorzystanie składni Pythona w programach java. Pozwala to na bezproblemową integrację z wykorzystaniem bibliotek Java i innych aplikacji opartych na Java. Projekt Jython dąży dotego,abywszystkiemoduły Pythona można byłouruchamiać na JVM IronPython implementacja Pythona dla platformy.net Framework. IronPython posiada również wsparcie we flagowym środowisku programistycznym firmy Microsoft,czyliVisual Studio

Przejrzystość kodu KodPythonamożna łato odczytać dziękinastępującym cechom: Struktura wierszowa wymuszająca jednolite stosowanie wcięć do wydzielania bloków kodu. Jest to cecha unikatowa wśród powszechnie stosowanych języków programowania Składnia i semantyka ułatwiająca stosowanie go zarówno w prostychskryptachjak i w dużych programach Elastyczne struktury danych i dynamiczne typy umożliwiające zaprogramowanie wielu czynności w kilku wierszach.

Obiektowość Klasy Obiekty Dziedziczenie Przeciążanie Wyjątki Refleksja

Gdzie działa Python YouTube popularny serwis z klipami wideo jest w większości napisany w Pythonie. Twórcy serwisu podkreślali wydajność jaką oferuje Python, a także szybkie implementowanie nowych funkcjonalności poprzez czytelny kod, który łatwo rozszerzać i aktualizować. Google używa Pythona w wielu swoich aplikacjach i usługach takich jak Google App Engine, czy Google Wave. Zatrudnia nawet twórcę tego języka Guido van Rossuma. Aplikacje napisane w Pythonie działają pod wieloma systemami takimi jak Windows, Linux/Unix, Mac OS X, OS/2, Amiga, czy smarphony Palma i Nokia. Dostępne są także implementacje Pythona w Javie (Jython) i.net (IronPython) działające wszędzie tam, gdzie dostępne są te platformy. 13

Typy projektów Tworzenie dynamicznych stron internetowych Frameworki Django, Pylons, serwer aplikacji Zope/Plone. Efektywne i szybkie tworzeniu nowoczesnych stron internetowych bogatych w funkcjonalności. Język ma wiele zalet w porównaniu do PHP Platforma Google App Engine dla rozproszonego hostingu aplikacji internetowych. Oparta została o Pythona i oferuje serwisom www taką samą skalowalność, jaką posiadają wszystkie aplikacje i usługi tej firmy. GAE jest darmowe. Usługi i serwisy społecznościowe to obecnie podstawa dla wielu serwisów www. Za pomocą Pythona można wykorzystać API/usługi serwisów takich jak Twitter, Blip.pl, Facebook, aplikacji Google (Maps, Docs i innych przez GData), czy Google Wave. Przykładowo biblioteka PyFacebook pozwala tworzyć aplikacje dla tego serwisu, a API Google Wave umożliwia tworzenie aplikacji dla tej platformy, czy integrowanie własnych stron i aplikacji z Wave 14

Typy projektów Programowanie sieciowe różne usługi, biblioteki, aplikacje, serwery i klienty wykorzystujące sieci. Moduły: socket, select, HTTPServer, SimpleHTTPRequestHandler Aplikacje desktopowe (MS Windows, OS X, Linux) można pisać w Pythonie za pomocą bibliotek takich jak PyQt4, PyGTK, wxpython, czy wbudowanej biblioteki tk. Za pomocą aplikacji py2exe można stworzyć gotowe aplikacje (exe) dla systemów MS Windows, a za pomocą py2app gotowe aplikacje dla OS X. 15

Typy projektów Zastosowania naukowe, finansowe, przetwarzanie danych. Generowanie wykresów, zestawień, plików PDF, arkuszy Excela, czy ODT/ODS. Reportlab generujeplikipdfiformatujeraporty Matplotlib generowanie wykresów. Scipy oferuje implementacje różnych algorytmów do metod numerycznych. PIL biblioteka przetwarzania i analizy obrazów xlwt i xlrt zapis i odczyt arkuszy Excela. Gry i aplikacje wykorzystujące 3D też można stworzyć z wykorzystaniem Pythona. Bazy danych możliwość zarządzania bazami danych różnych typów. Instalacje http://www.python.org/getit/ Python 2.7.1 i Python 3.2. Wersje 32 bitowe i 64 bitowe na Windows oraz na inne systemy: Linux, MacOS 16

Dystrybucja Pythona interpreter, standardowe moduły, pliki pomocnicze wymagane do uruchomienia programów. Python działa na większości systemów operacyjnych w tym: Windows, Linux, MacOS

Dokumentacja Pythona Python Tutorial wprowadzenie do programowania w Pythonie napisane przez Guido van Rossuma zawiera dużo przykładów. Python library Reference opisuje standardową bibliotekę Pythona dołączoną do pakietu dystrybucyjnego, a także wbudowane typy danych, funkcje i metody. Python language Refence zawieradokładny opis składni i znaczenia elementów języka.

Python 2 i Python 3 Python 3 = Python 3000 lub Py3K Wyrażenie print zastąpiono przez funkcję print() Metody dict.keys(), dict.items() i dict.values() zwracają widoki zamiast list map() i filter() zwracają iteratory Użycie typów text i binarnego zamiast stringów unikodowych i 8 bitowych Niezgodność wielu przydatnych bibliotek 19

Zastosowanie IDLE Zintegrowane środowisko programowania) jest aplikacją, która opakowuje interpreter Pythona w interfejs graficzny (GUI) i dołącza wiele funkcji do podstawowego interpretera wiersza poleceń. Charakteryzuje się ona obecnością menu, automatycznym dodawaniem wcięć, wskazówkami na temat składni, debuggerem oraz narzędziami do edycji plików. IDLE jest dostępna w wersjach przeznaczonych dla systemów Windows i Unix (dla systemu MacOS istnieje podobne narzędzie o nazwie Python IDE). Pełna dokumentacja IDLE jest dostępna pod adresem: www.python.org/idle/doczidle2.html Aplikacja IDLE jest dołączana do dystrybucji Pythona.

Przetwarzanie stringów Podmiana fragmentu napis.replace('ala', 'Ola').replace('.', ' i psa.') Zmiana na tytuł (lower, upper, swapcase) napis.title() # 'Ala Ma Kota.' Konkatencja stringów 'Ala' "Ma" ""Kota"" # 'AlaMaKota' Konwersja na string str(cokolwiek) Operator konkatencji 'Ala ma ' + str(2) + koty. # 'Ala ma 2 koty' Operator powielania 'la'*7 # 'lalalalalalala' 21

Przetwarzanie stringów Podawanie kolejnych parametrów: "Podajemy {0} paramet{1}".format('kolejne', 'ry') Parametry nazwane "Nazwa {param}".format(param='parametru.') Pojedynczy znak (liczymy od 0) napis[4] Zakres (liczymy od 0) napis[4:6] Pojedynczy znak od końca napis[ 5] Zakres licząc od końca napis[ 5: 1] napis[ 5:] UWAGA! String jest obiektem niemutowalnym. Przy modyfikacji stringu zwracana jest kopia obiektu. Oryginalna zmienna nie ulega modyfikacji! 22

Praca z listą Tworzenie pustej listy lista = [] Modyfikacja list lista = ['a', 'b', 'c'] Dodawanie nowych elementów lista.append('d') Rozszerzanie listy o listę nowych elementów lista.extend(['e', 'f', 'g']) Dodanie elementu na zdefiniowanej pozycji lista.insert(0, '0') 23

Praca z listą Usunięcie pierwszego wystąpienia elementu lista.remove('0') Usunięcie elementu z pozycji lista.pop (3) Usunięcie elementu z pozycji lista.del (3) Odwrócenie kolejności lista.reverse() Sortowanie listy lista.sort() Pobranie indeksu zadanego elementu lista.index('d') Liczba elementów listy lista.count() Liczba konkretnych elementów listy lista.count('c') 24

Szybkie przetwarzanie list W Pythonie w większości przypadków nie ma konieczności używania pętli w czasie przetwarzania list Szybkie tworzenie listy Lista = [0] * 20 Lista2 = [3,5,2] * 6 Lista3 = range(1,21,2) Filozofia Pythona: Jak możesz nie używaj pętli 25

Listy składane (List comprehensions) Postać prosta [wyrażenie for zmienna in sekwencja] Lista3 = [1,2,3, 5, 11] Lista4 = [2*x for xinlista3] Lista_krotek = [(x, x*x) for x in range(1,5)] Kody_ASCII = [(x, ord(x)) for x in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"] Postać prosta warunkowa [wyrażenie for zmienna in sekwencja if warunek] Lista5 = [x for x in Lista3 if x>10] Podzielne = [x for x in range(1,20) if not (x%3) or not (x%5)] Samogloski = [(x, ord(x)) for x in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" if x in "AEIOUY"] 26

Listy składane (List comprehensions) Postać rozszerzona [wyrażenie for zmienna1 in sekwencja1 for zmienna2 in sekwencja2... ] Iloczyn kartezjański sekwencji Pary = [(x,y) for x in range(1,5) for y in range(4,0, 1)] Roznice = [x y for x in range(1,5) for y in range(4,0, 1)] Sklejka = [str(x)+y+str(z) for x in [1,2] for y in ['A','B'] for z in [0,3] ] Postać rozszerzona z jednym warunkiem [wyr for zm1 in sekwencja1 for zm2 in sekwencja2... if warunek ] Pary każdy element z każdym, tylko jeżeli pierwszy element jest mniejszy od drugiego: [(x,y) for x in range(1,5) for y in range (6,3, 1) if x<y] Postać rozszerzona z wieloma warunkami [wyrażenie for zmienna1 in sekwencja1 if warunek1 for zmienna2 in sekwencja2 if warunek2... ] 27

Zagnieżdżone listy składane >>> matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] Poniższa lista składana dokonuje transpozycji macierzy: >>> [[row[i] for row in matrix] for i in (4)] [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 28

Wykonywanie funkcji na listach Wyrażenie lambda służy do definiowania anonimowych funkcji w postaci wyrażenia: lambda argument : wyrażenie a = lambda : 'a' print a() # wywołanie funkcji lambda o nazwie a b = lambda x,y : x+y print b(1,2) # wywołanie funkcji lambda o nazwie b apply wywołanie funkcji z parametrami uzyskanymi z rozpakowania sekwencji dziel=lambda x,y,z: (x+y)/z #zamiast pisać dziel(3,5,2) xyz=(3,5,2) apply(dziel,xyz) 29

Wykonywanie funkcji na listach Funkcja map() wykonuje podaną funkcję dla każdego elementu listy, krotki lub słownika. Często łączy się z funkcją anonimową. Wynikiem operacji jest lista map(lambda x: x*x, range(5)) map(dziel, range(5), range(5), [2]*5) Funkcja zip() służy do konsolidacji danych. Przyjmuje jako swoje parametry jedną lub więcej sekwencji, po czym zwraca listę krotek, których poszczególne elementy pochodzą z poszczególnych sekwencji. Krotki = zip("abcdef",[1,2,3,4,5,6]) gdy długości sekwencji są różne, wynikowa sekwencja jest skracana do najkrótszej 30

Wykonywanie funkcji na listach Funkcja filter() filtruje elementy sekwencji przy użyciu podanej funkcji, która musi zwracać wartość Prawdę lub Fałsz S="Ala ma kota i konto na chomiku." Samogloski=filter(lambda x:x in 'aeiouy', S) Pozostale = filter(lambda x:x not in in 'aeiouy', S) Funkcja reduce() pobiera dane z sekwencji i zwraca na ich podstawie pojedynczą wartość np. sumę liczb. Funkcja ta wykonuje podaną jako pierwszy argument funkcję dla pierwszych dwóch elementów sekwencji, a następnie wykonuje tą funkcję dla wyniku i trzeciego elementu i tak do wyczerpania elementów sekwencji. #suma elementów: reduce(lambda x,y: x+y, [1,2,3]) #iloczyn elementów: reduce(lambda x,y: x*y, [1,2,3,4]) #suma kwadratów elementów: reduce(lambda x,y: x+y, map(lambda x: x*x, range(1,10))) 31

Praca ze słownikiem Tworzenie pustego słownika dict={} Inicjalizacja nowego słownika dict={'a': 'A', 'b': 'B', 'c': 'C'} Aktualizacja słownika dict.update({'d':'d'}) Wyświetlenie listy kluczy (iterkeys) dict.keys() Wyświetlenie listy wartości (itervalues) dict.values() Wyświelenie listy elementów (iteritems) dict.items() Usunięcie wartości o zadanym kluczu dict.pop('d') Usunięcie pierwszego elementu dict.popitem() Wyczyszczenie słownika dict.clear() 32

Praca z krotkami Krotka (ang. tuple) jest niezmienną listą. Zawartość krotki określamy tylko podczas jej tworzenia. Potem nie możemy już jej zmienić. Tworzenie nowej krotki t = ("a", "b", "ala", "z", "element") Przeszukiwanie krotki t.index("z") "z" in t Wybór elementów krotki t[0] t[ 1] t[1:3] Krotki można konwertować na listy. Wbudowana funkcja tuple, której argumentem jest lista, zwraca krotkę z takimi samymi elementami, natomiast funkcja list, której argumentem jest krotka, zwraca listę. W rezultacie tuple zamraża listę, a list odmraża krotkę. 33

Generatory Generatory są w Pythonie mechanizmem leniwej ewaluacji funkcji, która w przeciwnym razie musiałaby zwracać obciążającą pamięć lub kosztowną w obliczaniu listę. def generuj_calkowite(n): for i in xrange(n): yield i Można teraz użyć tego generatora: for i in generuj_calkowite(n): print i Przed wykonaniem drugiego fragmentu kodu należy oczywiście zdefiniować zmienną N. Definicja generatora przypomina definicję funkcji, ale zamiast słowa kluczowego return używa się yield. Generator jest obiektem przechowującym stan, mogącym wielokrotnie wchodzić do i opuszczać ten sam dynamiczny zakres. Wywołanie generatora może być użyte zamiast listy lub innej struktury, po której elementach będziemy iterować. Za każdym razem, gdy pętla for w powyższym przykładzie potrzebuje następnego elementu, wywoływany jest generator, który daje następny element.

Praca ze zbiorami Zbiory to nieuporządkowane zestawy obiektów. Używamy ich, gdy istotny jest tylko fakt występowania elementu, a nie jego położenie albo liczba powtórzeń. Zbiory można testować pod kątem występowania danego elementu, sprawdzać czy to jest podzbiór innego zbioru, szukać części wspólnej zbiorów. Tworzenie zbioru A = set() kraje = set(['brazylia', 'Rosja', 'Indie']) Modyfikacja zbioru kraje2 = kraje.copy() kraje2.add('chiny' ) lub szybciej kraje2 = kraje set(['chiny']) kraje.remove('rosja') 35

Praca ze zbiorami Czy element występuje w zbiorze? >>> 'Indie' in kraje True >>> 'USA' in kraje False Zawieranie się zbiorów kraje2.issuperset(kraje) kraje2 > kraje kraje.issubset(kraje2) kraje < kraje2 Część wspólna zbiorów kraje.intersection(kraje2) kraje & kraje2 36

Przykładowe skrypty systemowe Funkcja wypisuje na konsoli nazwę katalogu oraz jego zawartość. import os def get_directory_info(dir): os.chdir(dir) current_dir = os.getcwd() dir_contents = os.listdir(dir) print "" print "Bieżący katalog = ", current_dir print "Zawartość katalogu = ", dir_contents print"" get_directory_info('c:\\python25') Oto przykład wyniku wywołania tej funkcji: Bieżący katalog = C:\python25 Zawartość katalogu = ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'pywin32 wininst.log', 'README.txt', 'Removepywin32.exe', 'Scripts', 'tcl', 'Tools', 'w9xpopen.exe'] 37

Funkcja os.urandom(25) os.urandom() służy do generowania losowych ciągów bajtów o długości przekazanej jako parametr jej wywołania. W systemach Linux funkcja ta odczytuje dane z urządzenia /dev/urandom, w Windowsie wykorzystuje mechanizm CryptGenRandom. Jest to przydatna funkcja w zadaniach kryptograficznych oraz przy generowaniu unikalnych sygnatur wykorzystywanych w uwierzytelnianiu komunikacji między programami. import os x = os.urandom(25) y = x z = os.urandom(25) print "Does x = y? ", x==y print "Does x == z? ", x==z print "x = ", x Oto przykładowy wynik wywołania programu: Czy x == y? True Czy x == z? False x = öij?? RV?iW Tő Ô,öâ?ŚŇĐ 38

Moduł time Moduł time oferuje funkcje służące do manipulowania i formatowania danych związanych z czasem. Moduł jest dostępny dla wszystkich systemów operacyjnych, ale nie wszystkie funkcje są dostępne dla każdego systemu operacyjnego. Implementacja niektórych funkcji jest specyficzna dla systemu operacyjnego, zatem przed użyciem modułuwartozapoznać się z jego dokumentacją. Czas w module time jest reprezentowany za pomocą listy dziewięciu liczb całkowitych. Funkcje gmtime(), localtime() oraz strptime() zwracają wyniki z możliwością dostępu do poszczególnych z tych wartości za pośrednictwem atrybutów. 0 tm_year rok czterocyfrowo, np. 2001 1 tm_mon zakres od 1 do 12 2 tm_mday zakres od 1 do 31 3 tm_hour zakres od 0 do 23 4 tm_min zakres od 0 do 59 5 tm_sec zakres od 0 do 61 6 tm_wday zakres od 0 do 6, poniedziałek to 0 7 tm_yday zakres od 1 do 366 8 tm_isdst 0, 1, 1 39

Przykład time() time() zwraca liczbę zmiennoprzecinkową reprezentującą w sekundach czas, jaki upłynął od 1 stycznia 1970 roku (tradycyjny punkt odniesienia czasu w systemach Unix). import time raw_input("naciśnij [Enter]: ") time1 = time.time() raw_input("zaczekaj kilka sekund i naciśnij [Enter] ponownie: ") time2 = time.time() difference = int(time2 - time1) print "Pomiędzy naciśnięciami minęło ", difference, "sekund" Wynik wywołania tego skryptu będzie miał następującą postać: Naciśnij [Enter]: Zaczekaj kilka sekund i naciśnij [Enter] ponownie: Pomiędzy naciśnięciami minęło 5 sekund 40

Przykład formatowania czasu Czas może być wyświetlony jako krotka lub jako ciąg znaków sformatowany na wiele sposobów. Dodatkowo obsługiwane są strefy czasowe (jak czas lokalny czy Greenwich Mean Time [GMT]): import time print "Czas GMT jako krotka: ", time.gmtime() print "Czas GMT jako ciąg znaków: ", time.asctime(time.gmtime()) print "Czas lokalny jako krotka: ", time.localtime() print "Czas lokalny jako ciąg znaków: ", time.asctime(time.localtime()) print "Czas lokalny sformatowany jako <miesiąc dzień, rok>: ", \ time.strftime("%b %d, %Y") Wynik wywołania tego skryptu ma następującą postać: Czas GMT jako krotka: (2009, 2, 5, 22, 31, 15, 3, 36, 0) Czas GMT jako ciąg znaków: Thu Feb 05 22:31:15 2009 Czas lokalny jako krotka: (2009, 2, 5, 23, 31, 15, 3, 36, 0) Czas lokalny jako ciąg znaków: Thu Feb 05 23:31:15 2009 Czas lokalny sformatowany jako <miesiąc dzień, rok>: February 05, 2009 41

Obsługa parametrów wywołania programu Moduł optparse oferuje wygodne mechanizmy obsługi opcji wywołania z wiersza poleceń. Automatycznie obsługiwany jest też tekst pomocy w przypadku zastosowania opcji h lub help. from optparse import OptionParser parser = OptionParser() parser.add_option("-n", "--name", dest="name", help="wyświetlenie nazwiska") (options, args) = parser.parse_args() print "Nazywasz się ", options.name Przykład wywołania programu wraz z jego wynikiem: C:\Python> python optparse-example1.py --name Adam Nowak" Nazywasz się Adam Nowak Jeśliprogramzostaniewywołany zopcją h, zostanie wyświetlony automatyczniewygenerowanytekst pomocy (w języku angielskim): C:\Python> python optparse-example1.py h Usage: optparse-example1.py [options] Options: -h, --help show this help message and exit -n NAME, --name=name wyświetlenie nazwiska 42

Moduł platform Funkcje modułu platform pozwalają uzyskać informacje zarówno na temat platformy sprzętowej, jak i programowej. Program może przeanalizować uzyskane w ten sposób informacje i dostosować odpowiednio swoje działanie. import platform if platform.platform().find("windows")!= -1: print "Bieżący system to Windows" # w tym miejscu umieść kod specyficzny dla Windowsa elif platform.platform().find("linux")!= -1: print "Bieżący system to Linux" # w tym miejscu umieść kod specyficzny dla Linuksa Jeśli skrypt wywołamy w systemie Windows, zobaczymy następujący wynik: Bieżący system to Windows W przypadku Linuksa zobaczymy następujący wynik: Bieżący system to Linux 43

Moduł getpass Moduł getpass udostępnia funkcje obsługujące odczyt haseł od użytkownika, pozwalając skryptom uwierzytelniać użytkowników na podstawie poprawności podanego hasła. Inną użyteczną funkcją modułu jest zwracanie nazwy systemowej zalogowanego użytkownika. import getpass password = getpass.getpass() if password == "letmein": print("nazwa zalogowanego użytkownika " + getpass.getuser()) 44

Moduł winreg dostęp do Rejestru Windows Poniższy przykład wyszukuje w rejestrze określony klucz i wyświetla wartości wszystkich jego podkluczy: import _winreg explorer = _winreg.openkey(_winreg.hkey_current_user, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer") # lista wartości zapisanych w danym kluczu rejestru i = 0 try: while 1: name, value, type = _winreg.enumvalue(explorer, i) print repr(name) i += 1 except: print Oto przykładowy wynik działania tego programu: C:\Python> python winreg-example1.py 'WebFindBandHook' 'FileFindBandHook' 'Logon User Name' 'ShellState' 'CleanShutdown' 'Browse For Folder Width' 'Browse For Folder Height' 'FaultCount' 'FaultTime' 'IconUnderline' 'EnableAutoTray' 'link' 45