Python: Funkcije, trikovi

U proslom textu obradili smo neke osobenosti funkcija kroz nekoliko primera. Danas cemo objasniti dva trika kojim vase funkcije mozete uciniti korisnijim.

1) Docstring – Pomocne informacije u funkcijama.

Sve ugradjene funkcije u Pythonu imaju svoj kratak help. Ako zelite da ih vidite, kucajte u Shellu:

>>> dir(__builtins__)

Dobicete listu svih standardnih funkcija u Pythonu. Sada ako zelite da dobijete vise informacija o njima, mozete koristiti komandu help. Pokusajte recimo sledece:

>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

Ili:

>>> help(input)
Help on built-in function input in module builtins:

input(...)
    input([prompt]) -> string

    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.

Docstring metod nam omogucava da isto to uradimo sa nasim funkcijama. Upisuje se unutar tri znaka navoda, odmah iza imena funkcije a pre akcije. Pogledajmo to na primeru naseg konvertora iz prethodnog texta. Da se podsetimo, on izgleda ovako:

def face(fa):
    return (fa-32)*5/9

def cefa(ce):
    return ce*9/5+32

Otvorite ga u IDLE editoru i preradite da izgleda npr. ovako:

def face(fa):
    """
    (num) -> float
    Za unetu temperaturu u Farenhajtima,
    vraca vrednost u Celzijusima.
    """
    return (fa-32)*5/9

def cefa(ce):
    """
    (num) -> float
    Za unetu temperaturu u Celzijusima,
    vraca vrednost u Farenhajtima.
    """
    return ce*9/5+32

Snimite ga, izvrsite (F5) i u IDLE Shellu testirajte:

>>> cefa(31)
87.8
>>> face(90)
32.22222222222222

Vec i prilikom kucanja videcete da vam Shell nudi objasnjenje koji tip unosa funkcija ocekuje. Sada testirajte help na vasim funkcijama:

>>> help(cefa)
Help on function cefa in module __main__:

cefa(ce)
    (num) -> float
    Za unetu temperaturu u Celzijusima,
    vraca vrednost u Farenhajtima.

>>> help(face)
Help on function face in module __main__:

face(fa)
    (num) -> float
    Za unetu temperaturu u Farenhajtima,
    vraca vrednost u Celzijusima.

Help vam sada vraca informacije koje ste upisali u docstring funkcije.

Ovo je tipican nacin pisanja docstringa. Da li cete i kako koristiti ovu opciju potpuno je na vama. Ona moze biti narocito korisna u timskom radu, kao i korisnicima vasih programa radi brzog pregleda informacija.

2) Funkcija iz funkcije

Vec je pomenuto da funkcija moze pozivati drugu funkciju. Ovo je korisno radi razbijanja komplexnih zadataka na jednostavnije. Takodje i radi optimizacije koda, jer ako znate pouzdano da vam neka vec napisana funkcija dobro radi, nema potrebe da isto ponavljate u drugoj.

Radi ilustracije, napravicemo jednostavan primer. Pretpostavimo da zelite da napisete funkciju koja uzima dva broja, sabira ih i podize na kvadrat. Pri tome, vec imate funkciju koja dize na kvadrat.

To bi moglo izgledati ovako. U Python editoru kucajte:

def kvad(a):
    return a*a

def skvad(a,b):
    return kvad(a+b)

Testirajmo funkciju u shellu:

>>> skvad(1,4)
25
>>> skvad(5,7)
144

Kao sto vidite, funkcija skvad uzima dva broja, sabira ih, poziva funkciju kvad koja ih podize na kvadrat, i na kraju nam vraca rezultat. Pri tome je naravno moguce upotrebljavati i funkciju kvad direktno:

>>> kvad(4)
16

Ovim zavrsavamo treci text serijala o funkcijama. U narednom i poslednjem bavicemo se praksom kroz jedan zanimljiv primer.

Posted on 2014/01/20, in Programski jezici, Python. Bookmark the permalink. 3 Comments.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: