Informatika2-2015/Eloadas 3 Python-3 Opcionalis parameter Dokumentacio

A MathWikiből
(Változatok közti eltérés)
59. sor: 59. sor:
 
= Könyvtárak =
 
= Könyvtárak =
 
== Általánosságban könyvtárakról ==
 
== Általánosságban könyvtárakról ==
Az olyan programokat, amik magukban nem használhatóak, csak más programok megírásában segítenek, könyvtáraknak hívjuk.
+
Az olyan programokat, amik magukban nem használhatóak, csak más programok megírásában segítenek, könyvtáraknak (library) hívjuk. (Ez más mint a fájlokat csoportosító mappa/könyvtár, bár a magyar szó ugyanaz.) A könyvtáraknak köszönhető hogy nem kell minden programozónak teljesen az alapoktól kezdenie a programokat, ezek nélkül nem lehetne olyan bonyolult programokat megírni amiket ma látunk. Az operációs rendszerek egyik feladata is gyakorlatilag az, hogy bizonyos feladatokat elvégezzen más programok számára, ezek a szolgáltatásai is egy könyvtárból érhetőek el. (Pl. hogy minden grafikus program az ablakot, keretét, gombjait hogy rajzolja ki.) Bármilyen programozási munkát végeztek bárhol, szinte biztos hogy szükségetek lesz külső könyvtárak használatára, úgyhogy most próbálkozunk barátkozni velük egy kicsit.
 +
 
 +
Mivel a könyvtárak célja hogy mások is használhassák őket, ezért egyik fontos komponensük a dokumentáció. A mai előadás jelentős részében, és a jövő heti gyakorlaton is fogunk a dokumentációval foglalkozni. A dokumentáció készülhet teljesen külön is, de a legtöbb programozási nyelvnél vannak többé kevésbé beépített eszközök az írására/kezelésére. A python-nál teljesen beépített megoldás van, erre kicsit később rátérünk.
 +
 
 +
Mivel az informatika nemzetközi nyelve angol, ezért ha valamilyen könyvtárat használni szeretnétek a munkátokhoz, a legvalószínűbb hogy angolul lesz hozzá a dokumentáció. Nincs szükség nyelvvizsgára, elég ha az informatikai néhány szakkifejezést értitek olvasva, de az angol ezen a területen elkerülhetetlen.
 +
 
 +
Speciális könyvtárak a nyelv beépített könyvtárai. Ezek olyan könyvtárak amik mindig mindenhol elérhetőek. A többi könyvtárat külön kell telepíteni ahhoz hogy használhatóak legyenek. A beépített könyvtárak általában alapvető feladatokat látnak el, amikre programozók széles körének szüksége lehet. De kicsit azért magasabb szintűek mint a beépített függvények. (Beépített függvények amik egyből használhatóak, mint pl. a már általatok is látott ''len()'' vagy ''range()''. A beépített könyvtárakat most fogjuk nézni.)
 +
 
 +
== Python könyvtár példa ==
 +
 
 +
Különböző programnyelveknél különböző mértékű a beépített könyvtár mérete. A python-nál, mivel egy modern, magas szintű nyelv, viszonylag nagy beépített könyvtár van. Azoknál a programnyelveknél szokott ennél jelentősen nagyobb lenni, amiket egy cég tart fenn, és egy hivatalos változat van, ezeknél a fenntartó cég által írt minden könyvtár beépítettnek számít. Ilyen pl. a C# vagy a Java.
 +
 
 +
A python könyvtára bőven elég ahhoz, hogy ebben a tárgyban nem fogunk kilépni belőle külső könyvtárakra. A teljes könyvtár dokumentációja a hivatalos lapon [https://docs.python.org/2.7/library/index.html itt] található meg. Tekintsük át ez alapján a tartalomjegyzék alapján hogy meddig terjed a hatóköre.
 +
 
 +
Demó [https://docs.python.org/2.7/library/pprint.html pprint]-el.
 +
 
 +
Több módja van az importálásnak. Alap módszer:
 +
<python>import pprint
 +
s = pprint.pformat([1, 2, 3])</python>
 +
 
 +
Gyakran használt dolgokat külön is kivehetjük:
 +
<python>from pprint import pformat
 +
s = pformat([1, 2, 3])</python>
 +
 
 +
Azt is lehet, hogy egy modulból mindent betöltünk egyszerre ilyen módon, de az nem ajánlott:
 +
<python>from pprint import *
 +
s = pformat([1, 2, 3])</python>
 +
 
 +
Ez azért nem ajánlott, mert ilyenkor a forráskódunkra ránézve nem látszik hogy melyik név honnan származik:
 +
<python>from math import *
 +
from sajat_matek_konyvtar import *
 +
 
 +
a = sin(3.14) # Melyik import-bol van vajon?</python>
 +
 
 +
Át is lehet nevezni az importált dolgot, ami jól jöhet ha hosszú a neve és nem akarjuk mindig leírni, vagy két azonos nevű dolgot is be akarunk importálni. Egyelőre nektek erre nincs szükségetek, de jó ha felismeritek ha látjátok:
 +
<python>from pprint import pformat as PF
 +
s = PF([1, 2, 3])
 +
 
 +
import math
 +
from sajat_konyvtar import math as sajat_math
 +
a = math.sin(3.14) # Így egyértelmű</python>
 +
 
 +
 
 +
= Saját könyvtár írása =
 +
== Másik fájl betöltése ==
 +
== Dosctring ==
 +
== Tesztelésről általában ==
 +
== Docstring teszt ==
 +
 
 +
= Format string =

A lap 2015. február 25., 10:16-kori változata

Tartalomjegyzék

Opcionális paraméterek

Python függvények definiálásánál megadhatóak úgynevezett opcionális paraméterek. Ilyent akkor használunk, ha van egy olyan paramétere a függvénynek, ami fontos hogy paraméter legyen, mert időnként megváltoztatjuk, de az esetek túlnyomó többségében ugyanaz az értéke. Ilyenkor adhatunk a paraméternek egy alapértelmezett értéket, és ha a függvényhíváskor azt a paramétert nem kapja meg a függvény, akkor az alapértelmezett értéket használja. Például:

>>> def atment(pontok, hatar = 40, sorban = True):
...     nevek = [nev for nev in pontok if pontok[nev] >= hatar]
...     if sorban:
...         nevek.sort()
...     return nevek
...
>>> erdei_pontok = {
...     "Roka" : 85,
...     "Medve" : 20,
...     "Nyuszi" : 95,
...     "Farkas" : 45,
...     "Suni" : 55}
>>> print atment(erdei_pontok, 10, False)
['Medve', 'Farkas', 'Nyuszi', 'Suni', 'Roka']
>>> print atment(erdei_pontok)
['Farkas', 'Nyuszi', 'Roka', 'Suni']
>>> print atment(erdei_pontok, 10)
['Farkas', 'Medve', 'Nyuszi', 'Roka', 'Suni']

Mint látható, kihagyható az összes opcionális paraméter, vagy csak néhány.

Előfordulhat viszont, hogy csak a későbbi paramétert akarjuk megadni, a korábbit nem. Ezért találták ki a név szerinti paraméter átadást:

>>> print atment(erdei_pontok, hatar=10, sorban=False)
['Medve', 'Farkas', 'Nyuszi', 'Suni', 'Roka']
>>> print atment(erdei_pontok, sorban=False)
['Farkas', 'Nyuszi', 'Suni', 'Roka']

Sőt, ha akarjuk, a normális ("kötelező") paramétereket is adhatjuk át így név szerint (a másik módszert úgy hívják, hogy pozíció szerint):

>>> print atment(pontok=erdei_pontok)
['Farkas', 'Nyuszi', 'Roka', 'Suni']
Python Tutor link

Másik előnye a név szerinti megadásnak, hogy elég annak a paraméternek a nevére emlékezni amit meg akarunk adni. Például ha megnézzük a beépített könyvtárban a pprint függvényt, elég sok paramétere van, ezek közül a stream pl. olyan dologgal foglalkozik amit még nem tanultunk. Azonban elég ha a width paramétert megértjük ahhoz hogy azt használni tudjuk.

>>> import pprint
>>> pprint.pprint(erdei_pontok)
{'Farkas': 45, 'Medve': 20, 'Nyuszi': 95, 'Roka': 85, 'Suni': 55}
>>> pprint.pprint(erdei_pontok, width=20)
{'Farkas': 45,
 'Medve': 20,
 'Nyuszi': 95,
 'Roka': 85,
 'Suni': 55}

Azért néhány korlátozás van:

  • Logikusan, csak az opcionális paramétereket lehet elhagyni, minden normális paraméternek értéket kell adni, vagy név szerint, vagy pozíció szerint.
  • Ha név szerint és pozició szerint is akarunk megadni paramétert, mindenképpen előbb kell a pozició szerintieknek lennie. Ez nem megengedett:
>>> print atment(pontok=erdei_pontok, 10)
  File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg

Könyvtárak

Általánosságban könyvtárakról

Az olyan programokat, amik magukban nem használhatóak, csak más programok megírásában segítenek, könyvtáraknak (library) hívjuk. (Ez más mint a fájlokat csoportosító mappa/könyvtár, bár a magyar szó ugyanaz.) A könyvtáraknak köszönhető hogy nem kell minden programozónak teljesen az alapoktól kezdenie a programokat, ezek nélkül nem lehetne olyan bonyolult programokat megírni amiket ma látunk. Az operációs rendszerek egyik feladata is gyakorlatilag az, hogy bizonyos feladatokat elvégezzen más programok számára, ezek a szolgáltatásai is egy könyvtárból érhetőek el. (Pl. hogy minden grafikus program az ablakot, keretét, gombjait hogy rajzolja ki.) Bármilyen programozási munkát végeztek bárhol, szinte biztos hogy szükségetek lesz külső könyvtárak használatára, úgyhogy most próbálkozunk barátkozni velük egy kicsit.

Mivel a könyvtárak célja hogy mások is használhassák őket, ezért egyik fontos komponensük a dokumentáció. A mai előadás jelentős részében, és a jövő heti gyakorlaton is fogunk a dokumentációval foglalkozni. A dokumentáció készülhet teljesen külön is, de a legtöbb programozási nyelvnél vannak többé kevésbé beépített eszközök az írására/kezelésére. A python-nál teljesen beépített megoldás van, erre kicsit később rátérünk.

Mivel az informatika nemzetközi nyelve angol, ezért ha valamilyen könyvtárat használni szeretnétek a munkátokhoz, a legvalószínűbb hogy angolul lesz hozzá a dokumentáció. Nincs szükség nyelvvizsgára, elég ha az informatikai néhány szakkifejezést értitek olvasva, de az angol ezen a területen elkerülhetetlen.

Speciális könyvtárak a nyelv beépített könyvtárai. Ezek olyan könyvtárak amik mindig mindenhol elérhetőek. A többi könyvtárat külön kell telepíteni ahhoz hogy használhatóak legyenek. A beépített könyvtárak általában alapvető feladatokat látnak el, amikre programozók széles körének szüksége lehet. De kicsit azért magasabb szintűek mint a beépített függvények. (Beépített függvények amik egyből használhatóak, mint pl. a már általatok is látott len() vagy range(). A beépített könyvtárakat most fogjuk nézni.)

Python könyvtár példa

Különböző programnyelveknél különböző mértékű a beépített könyvtár mérete. A python-nál, mivel egy modern, magas szintű nyelv, viszonylag nagy beépített könyvtár van. Azoknál a programnyelveknél szokott ennél jelentősen nagyobb lenni, amiket egy cég tart fenn, és egy hivatalos változat van, ezeknél a fenntartó cég által írt minden könyvtár beépítettnek számít. Ilyen pl. a C# vagy a Java.

A python könyvtára bőven elég ahhoz, hogy ebben a tárgyban nem fogunk kilépni belőle külső könyvtárakra. A teljes könyvtár dokumentációja a hivatalos lapon itt található meg. Tekintsük át ez alapján a tartalomjegyzék alapján hogy meddig terjed a hatóköre.

Demó pprint-el.

Több módja van az importálásnak. Alap módszer:

import pprint
s = pprint.pformat([1, 2, 3])

Gyakran használt dolgokat külön is kivehetjük:

from pprint import pformat
s = pformat([1, 2, 3])

Azt is lehet, hogy egy modulból mindent betöltünk egyszerre ilyen módon, de az nem ajánlott:

from pprint import *
s = pformat([1, 2, 3])

Ez azért nem ajánlott, mert ilyenkor a forráskódunkra ránézve nem látszik hogy melyik név honnan származik:

from math import *
from sajat_matek_konyvtar import *
 
a = sin(3.14) # Melyik import-bol van vajon?

Át is lehet nevezni az importált dolgot, ami jól jöhet ha hosszú a neve és nem akarjuk mindig leírni, vagy két azonos nevű dolgot is be akarunk importálni. Egyelőre nektek erre nincs szükségetek, de jó ha felismeritek ha látjátok:

from pprint import pformat as PF
s = PF([1, 2, 3])
 
import math
from sajat_konyvtar import math as sajat_math
a = math.sin(3.14) # Így egyértelmű


Saját könyvtár írása

Másik fájl betöltése

Dosctring

Tesztelésről általában

Docstring teszt

Format string

Személyes eszközök