CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, 26.10.2020-04.12.2020
This course space end date is set to 04.12.2020 Search Courses: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
Muuttujien näkyvyys
Tärkeää: Funktion sisällä määritellyt muuttujat, eli lokaalit muuttujat näkyvät vain kyseisessä funktiossa:
def ratkaise_p(V, n, T): R = 8.314462618 # Lokaali muuttuja (vakio), ei näy funktion ulkopuolelle if V > 0 and n > 0 and T > 0: p = n * R * T / V else: p = 0 return p paine = ratkaise_p(0.025, 0.30, 300) print("Paine (Pa) on:", round(paine)) # Tämä komento EI toimisi, koska kaasuvakio R on määritelty # vain funktion ratkaise_p sisällä: # print("Kaasuvakio (J K^-1 mol^-1) on:", round(R))
Tärkeää: Funkion lokaalien muuttujien arvot "unohtuvat" samalla hetkellä kun funktiosta poistutaan! Et siis voi tallentaa lokaaleihin muuttujiin mitään pysyvää tietoa.
Lisätietoa: Globaalit muuttujat
Yleensä muuttujat kannattaa välittää funktiolle parametreina. Joskus voi silti olla tarpeen käyttää ns. globaaleja muuttujia.
Allaolevassa esimerkissä hyödynnetään globaalia muuttujaa paine. Myös ATM_TO_PA on kaikkien funktioiden käytössä, mutta se on vakio, ei muuttuja (isot kirjaimet viittaavat vakioon, jota ei tule muuttaa, ks. seuraava luku).
ATM_TO_PA = 101325 # Muuntokerroin atm -> Pa def muuta_painetta(muutos, yksikko): # Muutetaan globaalia muuttujaa paine funktion sisällä. # Tällöin globaali muuttuja pitää määritellä avainsanalla global global paine if yksikko == 'Pa': paine = paine + muutos elif yksikko == 'atm': paine = paine + muutos * ATM_TO_PA def raportoi_paine(): # Tulostetaan paine käyttäen globaalia muuttujaa "paine" # Huomaa, että jos globaalin muuttujan arvo halutaan vain *lukea*, # muuttujaa ei tarvitse määritellä global-avainsanalla print("Autoklaavin paine on tällä hetkellä", round(paine, 2), "Pa") # Pääohjelma: alustetaan globaali muuttuja "paine" yhden ilmakehän paineeseen paine = 1 * ATM_TO_PA raportoi_paine() print("Reaktio käynnistyy...") muuta_painetta(4, 'atm') # Muuttaa globaalin muuttujan "paine" arvoa raportoi_paine() print("Reaktio päättyi!") muuta_painetta(-3.8, 'atm') # Muuttaa globaalin muuttujan "paine" arvoa raportoi_paine()
tulostaa
Autoklaavin paine on tällä hetkellä 101325 Pa Reaktio käynnistyy... Autoklaavin paine on tällä hetkellä 506625 Pa Reaktio päättyi! Autoklaavin paine on tällä hetkellä 121590.0 Pa
Huomaa, että tässä tapauksessa sama lopputulos olisi voitu saavuttaa myös funktioiden parametreja ja paluuarvoja käyttämällä:
ATM_TO_PA = 101325 # Muuntokerroin atm -> Pa def muuta_painetta(paine, muutos, yksikko): if yksikko == 'Pa': return paine + muutos elif yksikko == 'atm': return paine + muutos * ATM_TO_PA def raportoi_paine(paine): print("Autoklaavin paine on tällä hetkellä", round(paine, 2), "Pa") # Pääohjelma: alustetaan muuttuja "paine" yhden ilmakehän paineeseen paine = 1 * ATM_TO_PA raportoi_paine(paine) print("Reaktio käynnistyy...") paine = muuta_painetta(paine, 4, 'atm') raportoi_paine(paine) print("Reaktio päättyi!") paine = muuta_painetta(paine, -3.8, 'atm') raportoi_paine(paine)
Globaalien muuttujien käyttäminen voi olla perusteltua, jos se yksinkertaistaa koodia huomattavasti. global-avainsanan ajatus on, että ohjelmoijan pitää erikseen kertoa, jos hän haluaa muokata globaalia muuttujaa ja näin vältytään muokkaamasta globaalia muuttujaa vahingossa.
Tehtävä 2.6.1