Instalacja Pythona Pierwsze kroki, tryb interaktywny Pierwsze kroki, uruchamianie programów Narzędzia do pisania programów
Python został stworzony w 1990 roku przez Holendra Guido Van Rossum, nazwę otrzymał dla uczczenia Latającego Cyrku Monthy Pythona. Twórcy Pythona nie przejmują sie raczej tzw. zgodnością wsteczną - programy (polecenia, instrukcje) dopasowane do starszej wersji Pythona mogą nie działać w nowszej. Najnowsza wersja fremeworku Django wymaga wersji Pythona pomiędzy 2.5 a 2.7. Ja będę omawiał wersje 2.7. Pythona można pobrać stąd http://www.python.org/download/.
W internecie jest sporo informacji o Pythonie. Z powodu częstych aktualizacji języka i braku zgodności wstecznej łatwo trafić na kursy i tutoriale niezgodne z wersją 2.7, a tym bardziej z najnowszą wersją 3.2. Trzeba sie liczyć z koniecznością zmian w przytaczanych kodach źródłowych. Najpewniejszym źródłem jest oficjalna strona http://www.python.org/doc/ zawierająca dokumentację i tutoriale.
Brak zgodności w jeszcze większym stopniu dotyczy książek. Najlepszą chyba książką jest Zanurkuj w Pythonie (Dive into
Python).
Spis treści
Python pozwala na pracę interaktywną, tzn. uruchamiamy interpreter Pythona:
W trybie interaktywnym można wpisywać również polecenia wielowierszowe korzystające z instrukcji warunkowych i pętli:
>>> suma = 0 >>> silnia = 1 >>> for i in range(1,1000): suma+=i silnia*=i >>> suma 499500 >>> silnia 40238726007709377354370243392300398571937486421071463254379991042993851239862902059204420848696940480047998861019719605 86316668729948085589013238296699445909974245040870737599188236277271887325197795059509952761208749754624970436014182780 94646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349 34755342864657661166779739666882029120737914385371958824980812686783837455973174613608537953452422158659320192809087829 73084313928444032812315586110369768013573042161687476096758713483120254785893207671691324484262361314125087802080002616 83151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821 33318611681155361583654698404670897560290095053761647584772842188967964624494516076535340819890138544248798495995331910 17233555566021394503997362807501378376153071277619268490343526252000158885351473316117021039681759215109077880193931781 14194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671 61676217916890977991190375403127462228998800519544441428201218736174599264295658174662830295557029902432415318161721046 58320367869061172601587835207515162842255402651704833042261439742869330616908979684825901254583271682264580665267699586 52682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612 13855860030143569452722420634463179746059468257310379008402443243846565724501440282188525247093519062092902313649327349 75655139587205596542287497740114133469627154228458623773875382304838656889764619273838149001407673104466402598994902222 21765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798 72290851929681937238864261483965738229112312502418664935314397013742853192664987533721894069428143411852015801412334482 80150513996942901534830776445690990731524332782882698646027898643211390835062170950025973898635542771967428222487575867 65752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028 51064018215439945715680594187274899809425474217358240106367740459574178516082923013535808184009699637252423056085590370 06242712434169090041536901059339838357779394109700277534720000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000LPrzykład pokazuje kilka charakterystycznych cech Pythona:
>>> s = 0 >>> for i in range(1,10000000): s+=1 >>> s = 0L >>> for i in range(1,10000000): s+=1druga pętla wykonuje się mniej więcej dwa razy dłużej, warto zatem wymuszać powrót do typu czterobajtowego:
>>> s = 2**31 >>> z = int(s) >>> z 2147483648L #rzutowanie na typ int się nie powiodło, liczba s jest za duża >>> s = 2**31-1 >>> z = int(s) >>> z 2147483647 #rzutowanie sie powiodło
W trybie interaktywnym możemy również uruchamiać programy (skrypty). Program musi być zapisany w pliku z rozszerzeniem py (plik tekstowy) lub pyc
(plik częściowo skompilowany). Uruchamiamy program poleceniem: import nazwa_programu_bez_rozszerzenia
Plik Test.py zawiera jeden wiersz:
print("Hello Python world!")Efektem wpisania polecenia: import Test będzie
Hello Python world!lub
Traceback (most recent call last): File "Efekt zależy oczywiście od tego, czy Python znajdzie jeden z plików: Test.py lub Test.pyc. Python szuka programów (modułów) w katalogu bieżącym i w katalogach systemowych. Listę katalogów systemowych możemy odczytać w taki sposób:", line 1, in import Test ImportError: No module named Test
>>> import sys >>> sys.path ['C:\\Python27', 'C:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\python27\\DLLs', 'C:\\python27\\lib', 'C:\\python27\\lib\\plat-win', 'C:\\python27\\lib\\lib-tk', 'C:\\python27', 'C:\\python27\\lib\\site-packages', 'C:\\python27\\lib\\site-packages\\PIL']a dodać nowe katalogi w taki sposób:
>>> sys.path.append("skrypty") >>> sys.path.append("C:\\users\\maestro\\skrypty")Pierwsze polecenie dodaje podkatalog skrypty katalogu bieżącego, drugie korzysta z pełnej nazwy dodawanego katalogu. Dwie uwagi:
s = """książka o skryptach""",
>>> import os >>> os.getcwd() 'C:\\Python27'
import Test reload(Test)
Bywa, że plik źródłowy (np. fibonacci.py) zawiera definicje funkcji i klas mające uniwersalne zastosowanie, oraz korzystający z tych definicji kod do wykonania. Pożądane jest takie zachowanie:
# _*_ coding: utf-8 _*_ # obliczanie n-tego wyrazu w ciągu Fibonacciego # uruchomienie: python fibonacci.py ktory_wyraz def fibw(n): __doc__ = "funkcja oblicza n-ty wyraz ciagu Fibonacciego" a,b = 0,1 i = 1 while i<n: a,b = b,a+b i+=1 return b def fibl(n): __doc__ = "funkcja tworzy liste z ciagiem Fibonacciego" a,b = 0,1 l=[] while b<n: l.append(b) a,b = b,a+b return l if __name__=="__main__": n = input("Ktory wyraz ciagu Fibonacciego obliczyc: ") print(str(n)+"-ty wyraz ciagu Fibonacciego = "+str(fibw(n)))Kod jest zapewne trochę niezrozumiały. Wiersz if __name__=="__main__": uzależnia wykonanie ostatnich dwóch wierszy od sposobu uruchomienia programu: import fibonacci lub python fibonacci.py.
pom = tab[i] tab[i] = tab[j] tab[j] = pomZamiana wartości elementów listy w Pythonie (w Pythonie nie ma tablic, lista to typ złożony najbardziej przypominający tablicę):
tab[i],tab[j] = tab[j],tab[i]
Do uruchamianego programu możemy przekazać parametry python nazwa_pliku_z_rozszerzeniem par_1 par_2.... By odczytać w programie przekazane parametry musimy zaimportowac moduł sys, lista przekazanych parametrów jest fragmentem listy sys.argv. Każdy parametr jest typu str (napis).
Wpisane polecenie | Lista sys.argv |
---|---|
python | [] |
python test.py | ['test.py'] |
python test.py 1 Jan True | ['test.py', '1', 'Jan', 'True'] |
import sys for k in range(1,len(sys.argv)): #funkcja range(1,len(sys.argv)) zwraca listę liczb [1,...,len(sys.argv)-1] n = int(sys.argv[k]) #konwersja str => int i = 1 s = 1 while i<=n: s*=i i+=1 print "%d! = %d" % (n,s) #formatowane wyświetlanie python silnie.py 8 -4 31 => 8! = 40320 -4! = 1 31! = 8222838654177922817725562880000000