Funktioiden yhteydessä tulee huomioida muuttujien näkyvyys. Tämä viittaa siihen, että kaikki muuttujat eivät ole käytettävissä joka lohkossa. Tiettyjä tunnisteita sisältäviä lohkoja sanotaan myös nimiavaruuksiksi. Funktion sisällä määritellyt muuttujat eivät ole käytettävissä sen ulkopuolella.
Pythonissa on koodissa ns. päätaso, eli alin koodiosio, jossa ei ole yhtään sisennystä. Tässä määritellyt muuttujat ovat globaaleja muuttujia. Funktioiden sisällä globaaleja muuttujia voi käyttää avainsanan global avulla; käytettävät muuttujat luetellaan avainsanan jälkeen.
Code Block |
---|
def Function(): global s print(s.upper()) s = "globaali merkkijono" Function() input("Paina Enter näppäintä lopettaaksesi...") |
Globaaleihin muuttujien käyttöön voi tosin liittyä muutamia hankaluuksia. Ohjelman toimintaa voi olla vaikea ymmärtää, jos useampi funktio käyttää samoja globaaleja muuttujia. Pienissä ohjelmissa tästä ei ole paljoa vaivaa, mutta isommissa ohjelmissa globaalien muuttujien käyttö monimutkaistuu huomattavasti. Yleensä funktioiden paramtetreilla ja paluuarvoilla pystyy tekemään kaiken ilman globaaleja muuttujia.
Code Block |
---|
def Function(s): return s.upper() s = "globaali merkkijono" print(Function(s)) input("Paina Enter näppäintä lopettaaksesi...") |
Joskus voi myös olla hyödyllistä tehdä ns. pääfunktio ohjelmaan - funktio, josta ohjelman suoritus aloitetaan ja jossa kutsutaan kaikkia tarvittavia alifunktioita. Tästä on se hyöty, että koodin ollessa funktiossa, muuttujista ei tule globaaleja eikä niitä täten voida muutella alifunktioista käsin. Pythonissa pääfunktio ei ole pakollinen toisin kuin joissain muissa kielissä.
Pääfunktio tekee moduulin koodista myös helpommin uudelleenkäytettävää; toinen ohjelma voi ladata modulin ja ajaa sen koodin yksinkertaisesti kutsumalla pääfunktiota.
Pääfunktion suorituksessa voi käyttää apuna modulin _name_ muuttujaa. Testaamalla if rakenteessa onko muuttujan _name_ arvo "_main_" ja asettamalla pääfunktion kutsu tähän if rakenteeseen pääfunktio ajetaan vain, jos moduuli ajetaan omana ohjelmana. Näin adattaessa pääfunktio jää kutsumatta modulin ladannut ohjelma voi käyttää pääfunktiota tarpeen mukaan.
Code Block |
---|
def main(): s = "ei-globaali merkkijono" print(s.upper()) if __name__ == "__main__": main() input("Paina Enter näppäintä lopettaaksesi...") |