Daj jednoj višekratno upotrebljivoj radnji ulaz koji joj je potreban.
Concept 15 je pokazao funkciju koja je uvek radila isto. Parametri rešavaju sledeći problem: jedna funkcija može da izvršava istu radnju sa različitim vrednostima prosleđenim pri svakom pozivu.
def greet(name):
print("Hello,", name)
greet("Ana")
greet("Marko")
greet("Jelena")Parametar je ime unutar definicije funkcije za dolaznu vrednost. U def greet(name):, name je parametar. Argument je stvarna vrednost prosleđena pri pozivu. U greet("Ana"), "Ana" je argument. Zato jedna funkcija može da pozdravi različite ljude bez kopiranja definicije.
Koristi ovu heuristiku za početnike: definicija → parametar; poziv → argument. Kod greet("Ana"), "Ana" se prosleđuje parametru name; tokom tog poziva name označava "Ana", a zatim se telo izvršava koristeći tu vrednost.
Jedna radnja, različit ulaz: Sledeći poziv može koristiti drugi argument. Kod greet("Marko"), name tokom tog poziva označava "Marko". Definicija funkcije ostaje ista, dok se njen rezultat može menjati sa ulazom.
def greet(name):
print("Hello,", name)
greet("Ana")Python dolazi do greet("Ana"), prosleđuje "Ana" parametru name i izvršava telo. Tokom tog poziva name predstavlja "Ana", pa je izlaz Hello, Ana. Kada se poziv završi, funkcija je spremna da se ponovo pozove sa drugim argumentom.
def introduce(name, city):
print(name, "lives in", city)
introduce("Ana", "Novi Sad")Funkciji može biti potrebno više od jedne dolazne vrednosti. U ovom pozicionom pozivu name prima "Ana", a city prima "Novi Sad". Argumenti se povezuju sa parametrima prema svojim pozicijama.
introduce("Novi Sad", "Ana")Ovo je ispravan Python, ali parametrima daje pogrešna značenja: name bi primio "Novi Sad", a city bi primio "Ana". Ispravna sintaksa nije uvek i željeni rezultat.
def double(number):
print(number * 2)
double(5)
double(10)Argument ne mora biti tekst. Ovde number pri svakom pozivu prima broj, a isto telo funkcije koristi primljenu vrednost da dobije 10 i 20.
introduce("Ana", "Novi Sad")
# name ← "Ana"
# city ← "Novi Sad"Pre praćenja tela poveži svaki argument u pozivu sa parametrom na odgovarajućoj poziciji. Zatim zamisli vrednosti koje ti parametri predstavljaju pri ovom pozivu.
Praktičan kontrolni spisak za čitanje parametara
- Pronađi parametrePogledaj unutar zagrada definicije funkcije i pronađi imena koja primaju ulazne vrednosti.
- Pronađi pozivPogledaj unutar zagrada poziva i pronađi stvarne prosleđene argumente.
- Poveži argumente sa parametrimaKod običnog pozicionog poziva poveži prvi argument sa prvim parametrom, a zatim nastavi redom.
- Zamisli primljene vrednostiOdredi koju vrednost svaki parametar predstavlja tokom ovog poziva.
- Zatim prati teloTelo funkcije čitaj tek kada znaš koje vrednosti imaju njeni parametri.
Česte početničke greške
- Mešanje parametra i argumentaParametar se pojavljuje u definiciji; argument je konkretna vrednost prosleđena u pozivu.
- Pozivanje bez obaveznog argumentaAko
greetzahtevaname, ondagreet()nema vrednost koju bi prosledio tom parametru. - Prosleđivanje previše argumenataPoziv mora proslediti onaj broj vrednosti koji trenutna definicija funkcije očekuje.
- Korišćenje pogrešnog pozicionog redosledaKod više pozicionih argumenata Python povezuje vrednosti po redosledu. Proveri da li svaka vrednost pripada tom parametru.
- Očekivanje da parametar zadrži vrednost prethodnog pozivaSvaki poziv prosleđuje sopstvene argumente. Prati vrednosti trenutnog poziva umesto da prenosiš vrednost iz prethodnog.
- Upisivanje jedne konkretne vrednosti u telo funkcijeUpisivanje jednog konkretnog imena u telo čini funkciju manje prilagodljivom. Koristi parametar kada radnja treba da radi sa različitim ulazima.
