Programowanie w językach skryptowych Wykład 1: Wprowadzenie do języków skryptowych Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka
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 Zastosowanie Pythona 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.
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 o prawach 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ć i uruchamiać na każdej popularnej współczesnej platformie systemowej. Rdzeń języka oraz biblioteki działają w ten sam sposób na wszystkich platformach, stąd programy można tworzyć w mieszanych ś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
Przejrzystość kodu Kod Pythona można łato odczytać dzięki nastę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 prostych skryptach jak 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.
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
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.
Typy projektów Instalacje http://www.python.org/getit/ Zastosowania naukowe, finansowe, przetwarzanie danych. Generowanie wykresów, zestawień, plików PDF, arkuszy Excela, czy ODT/ODS. Reportlab generuje pliki PDF i formatuje raporty 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
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 – zawiera dokł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
Zmienne środowiskowe Pythona PYTHONPATH - ma podobne zadanie jak PATH. Ta zmienna informuje interpreter Pythona o położeniu plików modułowych, które są importowane do programu. Zmienna PYTHONPATH powinna zawierać katalog z biblioteką źródłową Pythona oraz katalogi zawierające kody źródłowe programów użytkownika. Czasami wartość PYTHONPATH jest ustawiana wstępnie przez lnstalator Pythona PYTHONSTARTUP - zawiera ścieżkę do pliku inicjującego, który zawiera kod źródłowy Pythona, który jest wykonywany podczas każdego uruchomienia interpretera (podobnie do uniksowego profile lub pliku .login). Plik, który w Uniksie często nazywa się .pythonrc.py, zwykle zawiera polecenia ładujące programy pomocnicze lub modyfikujące wartość PYTHONPATH PYTHONCASEOK - zmienna stosowana w Windows wtedy, gdy Python w instrukcji import ma wyszukiwać pierwszy moduł o nazwie pasującej niezależnie od wielkości liter. Aby ją uaktywnić, należy nadać jej dowolną wartość PYTHOMHOHE - alternatywna ścieżka wyszukiwania modułów. Przeważnie są one umieszczane w katalogach PYTHONSTARTUP lub PYTHONPATH, co ułatwia przełączanie się między bibliotekami modułowymi
Uruchamianie programów w trybie interakcyjnym Tryb interakcyjny – najłatwiejszy sposób uruchamiania programów w języku Phyton. Uruchom interpreter w trybie interakcyjnym. Po pojawieniu się znaku zachęty >>> wpisz instrukcję Pythona. Naciśnij klawisz Enter. Interpreter wyświetla wynik działania instrukcji, a następnie znak zachęty >>> . Interpreter wyświetli ponownie znak zachęty >>> także wtedy, gdy instrukcja nie zwróci żadnych wyników.
Praca w trybie interakcyjnym Interpreter wyświetla znak zachęty dla instrukcji wielowierszowych (lub złożonych). Aby poinformować Pythona, że zakończono wpisywanie instrukcji, należy wstawić pusty wiersz
Sygnalizacja błędów syntaktycznych i wyjątków w command line
Przywoływanie ostatniego wyniku
Uruchamianie programu jako skryptu Pliki z kodem źródłowym w języku Python mają rozszerzenie .py i są nazywane modułami Uruchamianie programu jako skryptu Włącz tryb systemowego wiersza poleceń oraz upewnij się, czy katalog z Pythonem jest wpisany do ścieżki oraz czy skrypt znajduje się w bieżącym katalogu. Wpisz polecenie python script. py i naciśnij klawisz Enter (script.py jest nazwą pliku zawierającego skrypt). W systemie Unix można przekształcić skrypt Pythona w wykonywalny program dodając początkowy wiersz ze znakami #! i nadając plikowi atrybuty wykonywalności. Początkowy wiersz ma następujące właściwości: rozpoczyna się od znaków #!; zawiera ścieżkę do interpretera języka Python; jest umieszczony zawsze na początku pliku.
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.
Komentarze Rozpoczynamy znakiem # Komentarzem jest teks rozciągający się od # do końca wiersza Komentarz może zajmować cały wiersz Komentarz może być umieszczony na końcu wiersza W komentarzach stosowane są wcięcia o tej samej głębokości co opisywany przez nie kod (nieobowiązkowe) Python nie obsługuje wielowierszowych komentarzy. Każdy komentarz musi mieć własny znak #.
Nadawanie nazw zmiennym Nazwy nie maja ograniczenia długości Nazwy rozpoczynają się od litery lub znaku podkreślenia, za którymi może występować dowolna liczba liter, cyfr lub podkreśleń. Przykłady: x, _render, The_Bronx. Nazwy niepoprawne: 100domow, %hash, nowa? W nazwach wielkość liter jest istotna Nazwy nie mogą być słowami kluczowymi Pythona Słowa kluczowe: and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while. Wyświetlanie listy słów kluczowych Pythona: import keyword print keyword.kwlist
Wskazówki dotyczące nadawania nazw Nazwy stosowane w Pythonie zwykle składają się z małych liter a poszczególne słowa tworzące nazwę są oddzielane znakami podkreślenia: liczba_cyfr Należy unikać rozpoczynania nazw zmiennych od znaku podkreślenia, gdyż w ten sposób często zmienne definiowane są przez system.
Wyrażenie Jest dozwoloną kombinacją symboli (zmiennych, literałów, obiektów, funkcji, nawiasów, operatorów itd.), która zwraca obiekt po przetworzeniu w interpreterze Pythona. W wyrażeniu mogą być użyte funkcje i operatory wbudowane lub zdefiniowane samodzielnie przez użytkownika. Wyrażenia są klasyfikowane na podstawie typu zwracanego przez nie obiektu lub działania, które wykonują.
Typy wyrażeń Arytmetyczne – daje w wyniku liczbę Atom – literał, identyfikator, wyświetlanie lub przekształcanie łańcucha: 3.14, x, [1, 2], ‘x’ Odwołanie do atrybutu – atrybut obiektu: obj.attr Logiczne – Działanie logiczne, które w wyniku daje prawdę lub fałsz: a and b, not x. Wywołanie – wywołuje funkcje lub metodę: len(x), a.append(a) Porównanie – Operacja porównania, która daje w wyniku 1 (prawdę) lub 0 (fałsz): a!=0, x<y<z, m is n, s not in t Wyświetlanie – Krotka, lista lub słownik: (1,2), (3,), [1,2], {„a”:1, „b”:2} Lambda – Forma lambda: lambda x: x*x Wycinanie – Zakres pozycji w sekwencji: x[2:4], x[-3:], x[:5] Subskrypcja – pozycja w sekwencji albo słownik: x[0], x[-1], dict[key] Przekształcenie łańcucha – łańcuchowa reprezentacja obiektu: str(x), repr(x), ‘x’
Podstawowe operacje Przypisanie liczba = 2 urzad = 'pocztowy' zespolona = 1 + 1j Przypisanie wartości więcej niż jednej zmiennej a = b =c = 10 Przypisanie wartości innej zmiennej kopia_liczby = liczba, znaczek = urzad Zamiana wartości miejscami znaczek, liczba = liczba, znaczek Usunięcie zmiennej del kopia_liczby; del urzad #czy znaczek nadal istnieje?
Przetwarzanie napisów Napisy surowe print "A\nZ" print r"A\nZ" print 'A\nZ' print r'A\nZ' print """A\nZ""" print r"""A\nZ""" napis = 'ala ma kota.' # napis jest obiektem Powiększenie pierwszej litery napis.capitalize() # 'Ala ma kota.' Zliczenie wystąpień znaków napis.count('a') # 4 Wycentrowanie tekstu (ljust, rjust) napis.center(20) # ' Ala ma kota. ' Kodowanie napisu (decode) napis.encode('iso8859-2') # 'ala ma kota'
Przetwarzanie napisów Sprawdzenie czy jest zakończony na (startswith) napis.endswith('kota.') Zamiana tabulatorów na spacje 'tab\ttab'.expandtab(1) Znalezienie miejsca pierwszego wystąpienia (index, rfind, rindex) napis.find('ma') Sprawdzenie czy alfanumeryczny (isalnum, isdigit, islower, isupper, isspace, istitle; unicode: isnumeric, isdecimal) '77A'.isalnum() Wycinanie znaków z początku i końca (lstrip, rstrip) napis.strip('a.') Dzielenie stringu na dwie części (split, splitlines, rsplit, rpartition) napis.partition('ma')
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'
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 !
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')
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')
Praca ze słownikiem Tworzenie pustego słownika dict={} Wyświetlenie listy kluczy (iterkeys) dict.keys() Inicjalizacja nowego słownika dict={'a': 'A', 'b': 'B', 'c': 'C'} Wyświetlenie listy wartości (itervalues) dict.values() Aktualizacja słownika dict.update({'d':'D'}) 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()
Krotki można konwertować na listy. 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") Wybór elementów krotki t[0] t[-1] t[1:3] Przeszukiwanie krotki t.index("z") "z" in t 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ę.
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')
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
Przykłady praktyczne 1 Poproś użytkownika o podanie dwóch napisów, przy czym drugi z nich musi być 1-literowy (jeśli nie jest, wypisz komunikat o błędzie). Następnie napisz, ile razy drugi napis mieści się w pierwszym. 2 Poproś użytkownika o podanie napisu s o długości przynajmniej 10, a nie więcej niż 20 (w razie potrzeby wypisz komunikat o błędzie), a następnie utwórz string będący 10-krotnym powieleniem litery środkowej s (czyli np. przy długości 13 będzie nią s[6]). 3 Policz 15!, wypisz na ekranie tylko 3 pierwsze cyfry tej liczby. 4 Znajdź i wypisz na ekranie wszystkie liczby pierwsze z przedziału [20, 100].
Przykłady praktyczne 5 Wygeneruj na ekranie tabliczkę mnożenia 10 x 10 Wczytaj liczbę całkowitą (być może ujemną), a następnie wypisz jej cyfry słownie. Wykorzystaj słownik. 6 7 Ile jest różnych znaków w treści tego zadania? Użyj zbioru (set). 8 Wczytać napis złożony z co najmniej 3 słów (np. jakieś zdanie), a następnie wypisać string będący akronimem, czyli sklejeniem pierwszych liter tych słów, zamienionych na wielkie litery. Przykład: "Fatalna imitacja auta turystycznego, 1-miejscowa, 2-cylindrowa, 6-krotnie przeplacona" -> FIAT126P.