Uvod

Ovaj dokument služi kao pomoć pri učenju osnova programskog jezika python u okviru kolegija Računarstvo i praktikum na prvoj godini istraživačkog smjera studija fizike na Fizičkom odsjeku te studija geofizike na Geofizičkom odsjeku Prirodoslovno-matematičkog fakulteta Sveučilišta u Zagrebu. Pretpostavlja se osnovno znanje C-a. Pretpostavlja se da se primjeri izvršavaju na Unix-like operativnom sustavu (linux, OSX). Primjeri u pythonu i C-u će raditi i na Windows-ima, ali će ih trebati pokrenuti na odgovarajući način.

Interpreter

  • Jezik python napravljen je s namjerom da olakša (=ubrza) pisanje programa. Na primjer, za razliku od C-a, nema deklariranja varijabli unaprijed, a dopušteno je miješanje tipova (npr. dopušteno je a=1 i nakon toga a="xy").

  • Programe napisane u C-u potrebno je prvo prevesti u strojni jezik, a zatim izvršiti. Python umjesto toga koristi “simultano prevođenje” tj. program se prevodi u strojni jezik malo po malo tijekom izvršavanja. Programi koji prevode sve odjednom nazivaju se compileri (npr. gcc), a programi koji “simultano prevode” nazivaju se interpreteri (npr. python). Više na http://en.wikipedia.org/wiki/Interpreter_(computing).

  • 2 načina korištenja:

    • interaktivna ljuska: ljusku pokrenemo s python (ili python3), upisujemo/izvršavamo naredbu po naredbu, iz ljuske izađemo pomoću CTRL-d — ovakav način nam omogućuje brzo isprobavanje dijelova programa. Primjere u kojima se koristi ljuska možete prepoznati po oznaci >>> koju ljuska ispisuje kad očekuje unos naredbe.

    • samostalni programi: upišemo cijeli program pomoću tekst-editora i snimimo ga npr. pod imenom prg.py zatim pokrenemo pomoću python prg.py (ili python3 prg.py).

      Napomena

      Ako postavimo da je datoteka prg.py izvršna, pomoću chmod u+x prg.py, i ako je prva redak programa prg.py standardno zaglavlje (vidi Uobičajeno zaglavlje, Zadaća 6 (itertools.groupby())), tada se program može pokrenuti samo s ./prg.py.

  • Postoje 2 glavne verzije python-a. Mogu se preuzeti (besplatne su) s https://www.python.org. To su:

    • python 2 (npr. python 2.6, python 2.7)
    • python 3 (npr. python 3.6, python 3.7)

    Pozor

    Python 3 nije kompatibilan unazad s pythonom 2 (to znači da programe za python 2 treba prepraviti ako ih se želi izvršiti pomoću pythona 3).

  • Kako se čini da python 2 neće biti podržan nakon 2020 godine (https://www.python.org/dev/peps/pep-0373/), u nastavku ćemo koristiti python 3, iako će većina primjera, uz sitne popravke, raditi i na pythonu 2.

Kako učiti

  1. S obzirom da već imate praksu u C-u prilično je lako naučiti osnove pythona. Za tu svrhu možete koristiti primjere s ovih stranica ili neki od tutoriala:
  1. Početi koristiti python. Pri tome se korisno pomagati već gotovim receptima:
  • Npr. ako tražimo python print string as bytes, google nas uputi na http://stackoverflow.com/questions/12214801/print-a-string-as-hex-bytes gdje se nalazi gotov recept koji omogućuje ispis pojedinih byteova koji čine string (općenito stranica http://stackoverflow.com je dosta korisna).

  • Moguće da će neka rješenja biti vezana za python 2 i bit će ih potrebno prebaciti u verziju 3.

    Napomena

    Za prebacivanje u verziju 3 u najjednostavnijim primjerima samo će biti potrebno pretvoriti print a, b u print(a,b), kao i a/b u a//b ako se želi cjelobrojno dijeljenje. (U pythonu 3 vrijedi a//b==floor(a/b))

    Također prebacivanje iz 2 u 3 olakšava program 2to3 koji dolazi s pythonom. Na webu se mogu naći razne upute za ručno prebacivanje npr.:

Dodaci za python

Dodaci (tj. dodatni paketi/biblioteke) za python sadrže funkcije za razne namjene. Dodaci koji se isporučuju s pythonom nazivaju se standardni dodaci. Nestandardni dodaci dobavljaju se iz drugih izvora. Spomenimo neke:

  1. Za crtanje grafova u pythonu, koristan je dodatak matplotlib
  1. Za rad s poljima brojeva brojeva, koristan je dodatak numpy
  1. Gotove funkcije za numeriku, nalaze se u dodatku scipy
  1. U službenim uputstvima za python mogu se naći sve specifikacije za python i njegove standardne dodatke:

Standardnih dodataka ima dosta. Oni omogućuju programerima pristup sustavu, te donose gotova rješenja za uobičajene probleme. Primjerice, dodatak za tzv. regular expressions omogućuje traženje po tekstu. Najjednostavniji oblik regular expressiona ste već vidjeli prilikom korištenja scanf() - npr. scanf("%[^\n]",s) učitava u s sve do znaka za novi red. Proučavanje detalja tog paketa, naravno, izlazi van okvira kolegija, ali korisno je znati da postoji. Također treba uočiti da regular expressions ne postoje isključivo u pythonu nego predstavljaju standard za traženje po tekstu koji koriste i drugi jezici i programi.

  1. Popisi popularnih dodataka za python korisnih za znanstvene primjene

Napomena

S pythonom i alatima numpy, scipy, matplotlib ćete se opet susresti u kolegijima Simboličko programiranje, Klasična mehanika, Kvantna fizika, ..., tako da trud koji uložite sada nije uzalud. Ipak, uputstava ima jako puno i ideja je proučiti detaljnije samo manji dio npr. primjere koji slijede ili neki od navedenih tutoriala, a ostale materijale koristiti kad i ako zatrebaju — kao rječnik ili telefonski imenik.

Druge implementacije pythona

Gore spomenuti python interpreteri (oni s https://www.python.org) predstavljaju jednu (standardnu) implementaciju jezika python, napisanu u C-u koja se naziva CPython. Također postoje i RPython (podskup pythona) i Cython (http://cython.org, prevoditelj iz pythona u C) kojima je glavni cilj ubrzavanje izvršavanja. Postoje i implementacije jezika python pisane u drugim jezicima: java (Jython), RPython (PyPy), C# (IronPython) itd. Korištenje neke druge implementacije omogućuje lagan pristup bibliotekama jezika u kojem je ta implementacija pisana (ali u tom slučaju neke standardne (CPython-ove) biblioteke mogu biti nepodržane). U nastavku ćemo se baviti samo standardnom, CPython, implementacijom.