Modulok
the Cake is a lie 🎂
- Fájl és enkódolás - Fájl fibonaccival, enkódolás
- Importálás - Importálás többféleképp
- Szkriptként indítás - Elindítjuk közvetlen a fájlt, __main__
Ezek nem kötelező feladatok, csak megoldásuk közben könyebb megtanulni a dolgokat
- Készíts egy fájlt, melyben az eddig megírt függvényeid összegyüjtöd
- Importáld be egy másik fájlba és kezd el használni. Keletkezik valami új fájl?
- Írj egy szkriptet, ami az argumentumban kapott IP cím és
hálózati maszk párosról megmondja, hogy milyen hálózatban van,
továbbá, hogy mi a Broadcast címe.
(Tipp: Előzőleg írtál egy hasonló funkciót már)
Fájl és enkódolás
Miután kilépsz az Interpreterből tapasztalhatod, hogy elvesznek a módosításaid mikor újra belépsz. Továbbá az is feltünhetett, hogy egy valamivel bonyolultabb programot nehéz lenne csak az interpreterben megírni.
Erre megoldás, hogy egy fájlba írjuk meg a kódunkat, majd pedig később azt fordítja le az interpreter.
Ezeket a fájlokat a python alapértelmezette UTF-8 fogja
értelmezni. (python 2-ben ASCII volt az alap)
Ezt akár definiálhatjuk is ha a fájl elejére írjuk, hogy
# coding=<Kódolás>
# coding=UTF-8
Egy modul egy fájl, melyben Python definíciók és utasítások
találhatóak.
Ezeknek a kiterjesztése .py
Hozz létre egy fájlt fibo.py
néven a kedvenc
szövegszerkesztődben.
# Fibonacci számokért felelős modul
def fib(n): # Fibonacci kiírása n-ig
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # Fibonacci-k listája n-ig
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
Az itt definiált függvényeket később más fájlokból is elérjük.
Importálás
Akár az interpreterünkbe is tudjuk használni a definiált függvényeink.
>>> import fibo
>>> fibo.fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__ # modul neve
'fibo'
Akár egy lokális változóhoz is rendelhetjük egy modul függvényét / változóját.
>>> fib = fibo.fib
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Többféleképp is importálhatunk.
Ha csak pár függvényt szeretnénk:
>>> from fibo import fib, fib2
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Ha az összes függvényt:
>>> from fibo import *
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Ha átszeretnénk nevezni:
>>> import fibo as fib
>>> fib.fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
De akár ötvözhetjük az eddigieket is:
>>> from fibo import fib as fibonacci
>>> fibonacci(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Szkriptként indítás
Akár el is tudunk egy modult önállóan indítani.
$ python3 fajl_neve.py <argumentumok>
Például nálam van egy ilyen fájl:
print("Első fájlba írt Python kódom")
py_szoveg = "Python"
for betu in reversed(py_szoveg):
print(betu)
if __name__ == '__main__':
print("main")
Ha ezt futtatom:
Első fájlba írt Python kódom
n
o
h
t
y
P
main
A modul neve __main__
-re változott.
Így akár tudjuk ellenőrizni, hogy tényleg
az adott fájlt indítottuk-e és csak akkor
lefuttatni a programot.
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
Ilyenkor a python nem fogja feldolgozni 1-1 importáláskor a feltételben lévő dolgokat, mivel nem azt indítottuk. Ezt tudjuk is ellenőrizni egy interpreterben. Próbáld ki if-el és a nélkül.
>>> import fibo
Láthattuk ennél a kódnál, hogy a sys
nevű modult beimportáltuk,
majd az argv tömbből lekértük az első elemet.
Ez valójában a kapott argumentumokat jelenti a függvény
meghívásakor.
$ python fibo.py 50
0 1 1 2 3 5 8 13 21 34
Az importált modulokat a python folyamatosan cacheli a
__pycache__
nevű mappában.
Importáld be a fibo.py fájlodat egy másik fájlba és nézd meg mi
történik.
The Cake: 🍔