Onda nije problem u Python-u, nego generalno u shvatanju funkcija u programiranju.
Bolje pogledaj neki jezik koji je više okrenut funkcionalnom programiranju, recimo JavaScript je jedan od takvih (čisto funkcionalni programski jezici, tipa Haskell-a nisu baš nešto u upotrebi danas, ali postoji PureScript koji se transpajlira u JavaScript).
Uglavnom, možeš da uzmeš primere iz bilo kog jezika koji podržava funkcije, i pogledaš poglavlje o funkcijama, gde je to sigurno bolje objašnjeno.
To što pitaš za print i return, print u samoj funkciji vrši direktno "štampu" (na konzoli), čisto da se vidi da funkcija radi ono što treba da radi, što se vrlo retko koristi u praksi, dok "return" vraća neku vrednost dobijenu na osnovu izvršavanja koda unutar funkcije, i ta vrednost se vraća tamo odakle je izvršen poziv funkcije, a što se često kombinuje sa dodelom te povratne vrednosti nekoj promenljivoj, npr. "proizvod = funcMultiply(x,y)".
To sve imaš lepo objašnjeno u knjigama za početnike u programiranju, što uglavnom nisu knjige za Python, jer se tu često uzima da čitaocu to nije prvi programski jezik koji uči, ili autori takvih knjiga jednostavno ne znaju da se spuste na nivo početnika, pošto ni njima Python nije prvi programski jezik.
Zato nađi neku knjigu za početnike u programiranju, koja se bavi algoritmima, a ne sintaksom nekog konkretnog programskog jezika.
Dobar izbor je literatura na temu Uvod u programiranje i sl.
Recimo, ovde:
https://www.tutorialspoint.com/python/python_functions.htm
autor objašnjava kako se parametri kod Python funkcija uvek prosleđuju kao reference, što nije tačno, to važi za NIZOVE i druge "mutable" tipove podataka kod Python-a, a za nizove je isti slučaj i kod mnogih drugih programskih jezika, dok se brojevi i stringovi prosleđuju po vrednosti kod Python-a (pošto spadaju u immutable tipove podataka, koji se tako prosleđuju), a što za ove tipove podataka važi kod većine drugih programskih jezika.
Čak i da je unutar funkcije koristio drugi naziv za parametar (lokalna promenljiva), u slučaju da je niz rezultat bi bio isti. Ali, u slučaju da je u pitanju string ili broj (kod JS-a bilo koji prost tip podataka, a kod Python-a svi immutable tipovi podataka), rezultat ne bi bio isti, jer i kada se kao parametar funkcije koristi isti naziv kao za globalnu promenljivu, parametar se tretira kao lokalna promenljiva.
I onda, kad početnik čita takav tutorijal, totalno se pogubi, ili u najboljem slučaju izvuče pogrešan zaključak!
Igrom slučaja nađoh da na ETF-u na smeru SI rade Python na predmetu Porgramiranje 1, pa imaš prezentaciju o funkcijama, gde je dosta toga objašnjeno za apsolutne početnike:
http://rti.etf.bg.ac.rs/rti/ir...davanja/P1_Python_funkcije.pdf
A možeš pogledati i druge prezentacije sa predavanja, kao i materijal sa vežbi:
http://rti.etf.bg.ac.rs/rti/ir1p1/materijal.html
Blessed are those who can laugh at themselves, for they shall never cease to be amused.