2020. január 25., szombat

Miért pont a python-t kezdjünk el tanulni



Trend diagram :stackoverflow.com


Sikeres (nagyok által is használt, támogatott) nyelv:


  Uber, Paypal, Google, Facebook, Instagram, NASA, Netflix, Dropbox, Reddit, MS azure,  stb.




Alap Python jellemzők:

 - Guido van Rossum Holland programozó találta ki 1989 karácsonyán
 - A nevét nem a hüllőről kapta, hanem a brit komédiasorozatról, a Monty Pythonról
 - Nem gyors, de könnyen bevethető, sok beépülő modul segít bennünket
 - A szkriptfileokat .py végződéssel szokás ellátni
 - Bytekódot generál és ezt futtatja
 - Futtatás közben el is menti .pyc végződésű filenévvel
 - Automatikusan generálja
 - Alapból interaktív interpreter
 - Változók értékeit kiírja ha hivatkozunk rá
 - Az értelmező szkriptfileokat futtat, és sorrol sorra halad...
 - Szöveg elemzés, ML (machine learning), azaz a gépi tanulás és a big data berobbanásával lehet vele nagyot alkotni





Írhatunk saját elemzést is  :  Link  az eredmény csv filebe lementve vizualizálhatjuk kedvünkre

Nézzünk szét a Github statisztikán itt is elég jól szerepel a python nyelv link2 







Python_az_ablakban.pdf






2020. január 18., szombat

Python speci dolgai

Python -ban minden objektum.



Egész szám típus is valójában osztályból származik:


>>> type(int)
<class 'type'>




Az osztály belső metódusai lekérdezhetőek


>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 
'


Fontos könyvtárak

  environment location: C:\Users\kecskemetil\AppData\Local\Continuum\anaconda3

  c:\Users\kecskemetil\AppData\Local\Continuum\anaconda3\python.exe



%pylab inline

Az alábbi kód cellabeli a Matplotlib és Numpy csomagok betöltésén kívül
felkészíti a notebook környezetet a keletkező ábrák böngészőbeli megjelenítésére is
(ezért felel az inline opció).

%matplotlib notebook
import matplotlib.pyplot as plt

---

%matplotlib nbagg
import matplotlib.pyplot as plt
##   enables interactivity.

---
%matplotlib inline
import matplotlib

------  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']

-------------
%run hello_world.py --- külső py file futatás

%load ipython_script_test.py --- külső py file tartalmányek betöltése

%paste  --- Kód vágólapról történő beillesztése
%cpaste --- Parszolt kód vágólapról történő beillesztése

an<Tab>        --- parancs, változó név kiegészítés
a.<Press Tab>  --- objektum tulajdonság kiegészítés

--- Gyors szerkesztő gombok (CTRL)
Ctrl-R Readline-style reverse history search (partial matching)
Ctrl-Shift-V Paste text from clipboard
Ctrl-C Interrupt currently executing code
Ctrl-A Move cursor to beginning of line
Ctrl-E Move cursor to end of line
Ctrl-K Delete text from cursor until end of line
Ctrl-U Discard all text on current line
Ctrl-F Move cursor forward one character
Ctrl-B Move cursor back one character
Ctrl-L Clear screen

%time

%timeit   --- futás idő mérésre

%pwd      --- munka könyvtár listázása

---
%quickref  Display the IPython Quick Reference Card
%magic     Display detailed documentation for all of the available magic commands
%debug     Enter the interactive debugger at the bottom of the last exception traceback
%hist      Print command input (and optionally output) history
%pdb       Automatically enter debugger after any exception
%paste     Execute preformatted Python code from clipboard
%cpaste    Open a special prompt for manually pasting Python code to be executed
%reset     Delete all variables/names defined in interactive namespace
%page      OBJECT Pretty-print the object and display it through a pager
%run       script.py Run a Python script inside IPython
%prun      statement Execute statement with cProfile and report the profiler output
%time      statement Report the execution time of a single statement
%timeit    statement Run a statement multiple times to compute an ensemble average execution time; useful for
timing     code with very short execution time

%who,
%who_ls,
%whos Display variables defined in interactive namespace, with varying levels of information/
verbosity

%xdel variable Delete a variable and attempt to clear any references to the object in the IPython internals


A metodusok meghívása:


from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> a.__abs__
<method-wrapper '__abs__' of float object at 0x0000028D1A20B108>


>>> a.__abs__()
12.1

>>> a.__add__(2)
14.1

>>> a+2
14.1

>>> a.__neg__()
-12.1

>>> a.__pow__(2)
146.41



> mkdir new_pr_dir
new_pr_dir> cd new_pr_dir
new_pr_dir> python -m venv venv37
new_pr_dir> venv37\Scripts\activate


pip install jupyter
ipython

kivy kilépés : Ctrl-D


Fogalmak:



utasitás/parancs : Del (objektum törlés : del x  // del myClass  //  del my_list[1:4])

standard függvény: abs(), min(), max(), pow(), round(), range(), int(), float(). print()
metodus (belső függvény):



Egy függvény értéket ad vissza, és az eljárás csak végrehajtja a parancsokat.

A legtöbb programozási nyelvben a funkciók egy sor parancsot is tartalmazhatnak. 
Ennélfogva a különbség csak a visszatérő értékben van.

Általában az eljárás utasítások/parancsok sorozata.

A funkció ugyanaz lehet, de általában eredményt ad vissza



A Python interpreter működési módjai a következők.



  - Ha csak elindítjuk, akkor interaktívan olvas és hajt végre utasításokat.
  - Ha egy filenévvel, mint argumentummal hívjuk meg, akkor megpróbálja Python scriptként értelmezni és lefuttatni az adott fájlt. pl: python program.py
  - Használhatjuk még a -c parancssor opciót is pl: python -c parancs

  https://pypi.org/  Python Package Index (PyPI) is a repository of software for the Python programming language.
  --- 211,728 projects 1,609,510 releases 2,421,452 files 394,684 users


python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

pip install modul          modul telepítés
pip uninstall modul      Pl: pip uninstall oauth2client
pip list                             telepitett elemek
pip show requests        info konrér modulról
pip freeze --user | xargs pip uninstall –y

pip install --user somepackage installs to $HOME/.local,
pip uninstall somepackage.
pip install --upgrade numpy


 pip install <<package_name>> 
 pip search <<package_name>> 
 pip show <<package_name>> 
 pip unistall <<package_name>>









Virtuális környezet: virtualenv



Itt létrehozunk egy külön könyvtárat a Python projektünkhöz, és ez a könyvtár az összes külső függőséget (külső könyvtárakat, amiket a projektünk használ) tartalmazni fog.

pip install virtualenv  ## telepítés


## Új project könyvtár lérehozássa,  majd erre ráirányítás az alábbi paranccsal:
virtualenv -p python3 MyNewPythonProjectVenv

Ezek után a MyNewPythonProjectVenv/bin könyvtár tartalmazni fogja a Python 3 fordítót.



Ahhoz, hogy ezt a virtuális környezetet használni tudjuk, vagyis ezen a virtuális környezeten belül kezdjünk el dolgozni, a következő parancsot kell kiadni:
source MyNewPythonProjectVenv/bin/activate     ## Virtuális környezet aktíválása

source MyNewPythonProjectVenv/bin/deactivate   ## Virtuális környezet deaktíválása



pip freeze > requirements.txt    ## jelenleg telepített gyomagok listája amelyet új futtatási környezetben telepíteni kel, hogy fusson a program


pip install -r requirements.txt  ## új környezet felhúzása modulokkal



Általános megoldás  ///   Pythonic megoldás (specik)


# Két változó tartalmának felcserélése
tmp = a
a = b
b = temp
## Pythonic megoldás
a, b = b, a



# Többszörös értékadás
A = 0
B = 0
C = 0
## Pythonic megoldás
A = B = C = 0



# Érték egy intervallumba esik-e?
if a < b and b < c:
print ('közötte')
## Pythonic megoldás
if a < b < c:
print('közötte')




# Egy érték azonos-e több érték közül eggyel?
if = a == 'alma' or a == 'körte' or a == 'szilva':
print ('szeretem')
## Pythonic megoldás
if a in ('alma', 'körte', 'szilva'):
print ('szeretem')




# Rövid feltételes kiértékelés
if nagy:
a = 2
else:
a = 1
## Pythonic megoldás
a = 2 if nagy else 1




# Ciklusok
i = 0
while i < 10:
  print i
  i += 1
## Pythonic megoldás
for i in range(10):
  print i



####  ciklus
lista = ['Peti', 'Franciska', 'Regő']
index = 0
for elem in lista:
  print('{} {}'.format(index, elem))
  index += 1
## Pythonic megoldás
lista = ['Peti', 'Franciska', 'Regő']
for index, elem in enumerate(ista):
   print('{} {}'.format(index, elem))
  



### ciklus 
lista = ['Peti', 'Franciska', 'Regő']
index = 0
while index < len(lista):
  print(lista[index])
  index += 1
## Pythonic megoldás
lista = ['Peti', 'Franciska', 'Regő']
for elem in lista:
   print(elem)



### ciklus
hiba = False
for cim in minden_cim():
  if hibas_cim(cim):
     hiba = True
     print('Hibás cím')
     break
  if not hiba:
     print('Minden cím jó')
## Pythonic megoldás
for cim in minden_cim():
  if hibas_cim(cim):
    print('Hibás cím')
    break
else:
  print('minden cím jó')
  # az else a for-hoz tartozik és akkor fut le, ha nem breakkel léptünk ki a ciklusból




# Függvény hívások láncolása
konyv_info = ' A zabhegyező: Salinger '
konyv = konyv_info.strip()
konyv = konyv.upper()
konyv = konyv.replace(':', ' by')
## Pythonic megoldás
konyv_info = ' A zabhegyező: Salinger '
konyv = konyv_info.strip().upper().replace(':', ' by')




# Szöveglánc vagy lista fordított sorrendbe állítása
s = 'python'
w = ''
for i in range(len(s)-1, -1, -1):
  w += s[i]
## Pythonic megoldás
s = 'python'
  w = s[::-1]




# Lista összefűzése szöveglánccá
l = ['egy', kettő', 'sok']
s = ''
for i in l:
s += i + ','
## Pythonic megoldás
l = ['egy', kettő', 'sok']
s = ','.join(l)



# Van hamis (nulla/False) elem a listában?
l = [2, 4, 0, 2, 5, 6]
for i in l:
  if not l[i]:
    print(False)
    break
else:
  print(True)
## Pythonic megoldás
l = [2, 4, 0, 2, 5, 6]
all(l) # False
all(l[3:]) # True




# Skaláris szorzat
a = [1, 4, -2]
b = [-2, 3, -4]
s = 0
for i in range(len(a)):
  s += a[i] * b[i]
## Pythonic megoldás
a = [1, 4, -2]
b = [-2, 3. -4]
s = sum([x * y for (x,y) in zip(a,b)])




# Listák egyesítése szótárrá
l1 = ['Csabi', 'Tomi', 'Piri']
l2 = [2, 0, 3]
s = {}
for i in range(len(l1)):
   if l2[i]:
      s[l1[i]] = l2[i]
## Pythonic megoldás
l1 = ['Csabi', 'Tomi', 'Piri']
l2 = [2, 0, 3]
s = { l1[i]: l2[i] for i in range(len(l1)) if l2[i] }




# Ismétlődő elemek megszüntetése a listában
l =[1, 2, 1, 3, 2, 4, 3]
l1 = []
for i in l:
  if not i in l1:
    l1.append(i)
## Pythonic megoldás
l =[1, 2, 1, 3, 2, 4, 3]
l1 = list(set(l))




# Prim számok keresése
prims = [1]
for i in range(2, 1000):
  prim = True
  for j in range(2, int(math.sqrt(i))+1):
     if i % j == 0:
        prim = False
  if prim:
    prims.append(i)
## Pythonic megoldás
numbers = range(1000)
for j in numbers[2:]:
   numbers[j+j::j] = [0 for k in numbers[j+j::j]]
prims = sorted(list(set(numbers) - set([0])))










Vektor (vector):   Egydimenziós tömb, ami lehet sorvektor, vagy oszlopvektor is

Mátrix (matrix):   Kétdimenziós tömb

Tömb (array):    Többdimenziós tömb







---py

Az eddig megismert standard függvények, mint például a min(), type(),
len(), mindig meghívhatók a program bármely részében, de a metódusokhoz előbb létre
kell hozni egy objektumot, hiszen abban vannak ezek a függvények „beágyazva”.

--------
import pydoc
pydoc.help(sys)
--
from pydoc import help
help(sys)

------
in, not in : A két operátorral megkérdezhetjük, hogy egy objektumot egy másik tartalmaz-e. Ezek a konténertípusú objektumok esetén rendkívül hasznosak.
             Az eredmény bool típusú lesz.

is, is not : Ezen operátorokkal az objektumok azonosságát tesztelhetjük. Az eredmény bool típusú lesz.

not, or, and : A Boole-algebra operátorai is jól használhatók állítások megfogalmazására. A programozásban a kétértékű Boole-algebra használatos,
            amelyben csak két érték van, a hamis és az igaz, és ezek egymás ellentettjei.




obj = kif1 if tesztkif else kif2  : Az értelmező először a tesztkif kifejezést értékeli ki, és ha az igaz, akkor a kif1 kiértékelésének az
eredményét írja be az obj nevű változóba, ha hamis akkor a kif2 eredményét.

Nagyon fontos jellemzője a logikai kifejezések feldolgozásának, hogy az értelmező az utoljára kiszámított részkifejezés értékét adja eredményként,
ami nem feltétlen bool típusú.

A fordított perjel (\) segítségével egy hosszú sor kétfelé törhető.

fiók=valami or 'pótlék' értékadás jó példa arra, hogy ha egy adott változónak (fiók) szánt érték
(valami) nem megfelelő (pl. üres), akkor azt hogyan helyettesíthetjük mással ('pótlék').

Néha jó lenne tudni, hogy a ciklus miként ért véget, megszakítással vagy anélkül. E célból a while szerkezetet kibővíthetjük egy else blokkal:


enumerate() nevű standard függvénnyel (magyarul „felsorol” a jelentése), ami egy különleges, új
bejárható objektumot állít elő az argumentumként megadott és ugyancsak bejárható objektumból,
anélkül, hogy azt módosítaná.

Az enumerate() által előállított felsoroló objektum minden
ciklusban egy két értéket tartalmazó objektumot ad vissza: az első érték megadja azt a pozíciót,
ahol éppen a felsorolás tart, a második pedig magát a sorra került elemet.



nem= "" if pita else "NEM" ## feltételes értékadás

---

while True: # Most nem ismert a ciklusok száma.
  s= input(" Kérek egy szöveget: ")
  s= s.upper()
  print(s)
  if "STOP" in s:
      break # A ciklus megtörése.


egy felsorolható elemeket tartalmazó objektum bejárása:
• for-in utasítással, melyben a ciklusváltozó magát az elemet fogja tartalmazni (példa:
for.py);
• for-in utasítással az enumerate objektummal együtt, az elem mellett annak pozícióját is
megkapjuk (for.py);
• while utasítással és az indexelés alkalmazásával, ahol ügyelnünk kell a ciklusváltozó
növelésére vagy csökkentésére, és általában ki kell számítanunk az objektum hosszát is
(while_index.py);
• for-in utasítással az indexelés és a range() segítségével, amikor az objektum hosszát
ismernünk kell, a range() argumentumait meg kell adnunk, de a ciklusváltozót nem kell
állítgatni (range_index.py).


A math modul néhány függvényei :
• A ceil(a) az argumentumként megadott a-hoz a nála nagyobb legkisebb egész számot
rendeli (az angol 'ceil' plafont jelent, utalva arra, hogy felfelé kerekít).
• A floor(a) az a-hoz a nála kisebb legnagyobb számot rendeli ('floor': padló, mert lefelé kerekít).
• A trunc(a) azt az egészet adja meg, ami a-ból a törtrész levágása után marad ('truncate': levág).


'inf' és '-inf' hatására egy float típusú objektumot, ami bizonyos vonatkozásokban úgy viselkedik mint ahogy azt a matematikában a végtelentől elvárjuk.
Az 'inf' rövidítés az angol 'infinity', azaz végtelenség szóból származik.


import random as rnd
rnd.random()
rr= range(3,-4,-1)
rnd.choice(rr)
rnd.choice('IN')


A programjainkban különböző előtagokkal kell jeleznünk, hogy melyik szám rendszerben adjuk meg a számokat:
decimális: nincs előtag
bináris: 0b
hexadecimális: 0x
oktális: 0o

ord(), amely az argumentumként megadott karakter Unikód táblázat szerinti kódpontját adja vissza,
chr(), amely a megadott kódpontnak megfelelő karaktert jeleníti meg, ha van ilyen.
--
bin(19)
bin(0x13)
hex(19 + 0b10011 + 0o23)
hex( ord('A'))
chr(65)

Módosított jelentéssel bíró karaktersorozatok és hatásuk:
\n : A karakterfolyam kiírása a következő sorban folytatódik.
\t : A kiírás a következő tabulátorpozíción folytatódik.
\r : A kiírás a sor elejére visszaugorva folytatódik (carriage return, azaz „kocsi
vissza” parancs, aminek elnevezése még az írógépes-teleprinteres korszakból
származik).
\\ : Maga a '\', a visszavágás jele kerül kiírásra.
\a : A számítógép hangszóróján egy pittyegés lesz halható( bell, csengő).
\xhh : A kiírandó karakter kódját hexa-számrendszerben adtuk meg két számjeggyel.
\ooo : A kiírandó karakter kódja oktális számrendszerben három számjeggyel.
\uxxxx : A kiírandó karakter kódpontja hexa-számrendszerben négy számjeggyel.
\Uxxxxxxxx : A kiírandó karakter kódpontja hexa-számrendszerben nyolc számjeggyel.

A karakterláncok leghasznosabb metódusait:
upper() - nagybetűs láncot állít elő az eredetit
alapul véve;
lower() - kisbetűs láncot állít elő;
capitalize() - az első karakter nagybetűs lesz, a
többi kicsi;
title() - minden szó nagybetűvel fog kezdődni;

center(), ljust(), rjust() - az új lánc az első
argumentumként megadott hosszúságú lesz,
amiben az eredeti lánc másolata középre ill.
balra vagy jobbra igazítva kerül elhelyezésre,
az üres helyeken a második argumentumként
szereplő „kitöltő” karakter fog ismétlődni. Ha
nem adunk meg „kitöltőt”, akkor az a szóköz
lesz.

strip() - az új lánc két végéről levágja a szóköz
és az egyéb vezérlő karaktereket, az ún.
'whitespace'-ket. Ezek a string modulban a
whitespace változóban vannak felsorolva:

startswith(minta, start, stop),
endswith(minta, start, stop) - Általuk
ellenőrizhetjük, hogy egy karakterlánc egy
megadott mintával kezdődik-e ill. végződik. A
start, stop értékeivel kijelölhetünk egy
szeletet, amikor is csak ezen történik az
ellenőrzés. Egyszerre több mintát is
megadhatunk zárójelek között felsorolva.

count(minta, start, stop) - Megszámolja a
minta előfordulását a láncban vagy annak egy
szeletében és a darabszám lesz a visszatérési
érték.

find(), rfind(), index(), rindex() - Mind a négy
metódus a (minta, start, stop) paramétereket
fogadja el és a megadott minta első
előfordulásának az indexét adja meg. A start
és stop értékeivel kijelölhetünk egy szeletet,
ha nem az egész láncban szeretnénk keresni.
Az rfind() és az rindex() jobbról balra keres.
Ha a keresett minta nincs a láncban vagy a
szeletben, akkor az első két metódus -1-et ad
vissza, míg az utolsó kettő „ValueError” típusú
eseményt hoz létre. Választhatunk, hogy
melyik módon kívánjuk a hiányt kezelni.
Azonban, ha csak a minta tartalmazásának
ténye fontos és nem az indexe, akkor
használjuk az in-operátort!

replace(régi, új, darabszám) - A láncban a
régiként megadott összes mintát az újra
cseréli ill. ha a darabszámot megadtuk, akkor
csak annyit. Az új minta lehet az üres lánc is,
ami a régi törlését eredményezi.


isalpha() - Igaz értéket ad vissza, ha a
karakterlánc csak betűket tartalmaz,
egyébként hamisat.
isdecimal() - Igaz, ha csak számok vannak a
láncban, egyébként hamis.
islower() - Igaz, ha csupa kisbetűs karakter
van a láncban.
isupper()- Igaz, ha csupa nagybetűs karakter
van a láncban.
isspace() - Igaz, ha a lánc csak az ún.
whitespace típusú karakterekből áll.

A speciális írásjeleket a string modulban lévő
punctuation nevű változó tartalmazza, ami
ugyancsak jól használható a karakterláncok
kezelésénél.

formázó hivatkozással, ami általánosságban ilyen lehet:
{ [sorszám|név][:[[kitöltő]igazító][előjel][#][0][szélesség][,][.pontosság][típus]] }
print( "\n Csak {0}? Nem hiszem, hogy csak {0}!\n".format( kor) )

típus a számok formázására szolgál, és az így megadható ábrázolási módok két
csoportba sorolhatók. Az elsőben, az egész számok esetében az alábbiak adhatók meg:
• 'd' - decimális, azaz tízes számrendszer szerinti megjelenítés, ez lesz érvényben
akkor is, ha nem adunk meg típust;
• 'b' - bináris, azaz kettes számrendszerbeli megjelenítés;
• 'x', 'X' - hexadecimális, azaz tizenhatos számrendszerbeli megjelenítés kis
(abcdef) betűkkel ill. nagyokkal (ABCDEF).
• 'o' - oktális, azaz nyolcas számrendszerbeli megjelenítés;
• 'c' - karakteres (angolul: character) megjelenítés, amikor a megadott egész
számot egy karakter kódjaként kell értelmezni.

Listát többféleképpen hozhatunk létre:
• szögletes zárójelek között vesszővel elválasztott elemeket felsorolva, s ha nem adunk meg
elemet, akkor az üres lista jön létre;
• a list() standard függvénnyel, amelynek argumentumként bármilyen olyan objektumot
megadhatunk, amelynek az elemei felsorolhatók, s ekkor ezen elemek lesznek a lista
elemei; az üres lista jön létre, ha nem adunk meg elemet;
• a [ kif1 for elem in obj if kif2 ] kifejezéssel, ahol az obj egy felsorolható elemekkel bíró
objektum. A 'kif1' elemképző kifejezéssel hozzuk létre az új elemeket, de a kif2 kifejezéssel
ezeket még előzetesen megszűrhetjük. Az if szerkezetet nem kötelező megadni. E
konstrukciót listaépítő vagy listaalkotó kifejezésnek fogjuk nevezni.


A teljes körű másolásnál a másolandó listának nem csak az elemei, hanem az általuk
hivatkozott módosítható objektumok is duplikálásra kerülnek, s az elemek ezekre fognak
mutatni (angolul: deep copy). Az eljárás során a módosíthatatlan objektumok nem lesznek
megkettőzve. A másolást a copy modulban lévő deepcopy() függvénnyel végezhetjük el.


pass --> nem csinál semmit jelző parancs oda ahol kötelező parancs megadása
A pass utasítás egy null operáció, amikor kiértékelődik, semmi sem történik. Vagyis az üres utasításnak felel meg.
Ez akkor hasznos, amikor az utasítás szintaktikailag elvárt, ott az utasítás számunkra felesleges.

assert --> Az assert utasítás talán a legalkalmasabb arra, hogy hibát keressünk a programunkban.
x = "hello"
#if condition returns True, then nothing happens:
# a feltétel teljesülése esetén nem történik semmi, d nem talsesülés esetén hiba váltódik ki
assert x == "hello"   # OK, ág nem csinál semmit
assert x == "goodbye" # hiba üzenettel elszál //AssertionError is raised:
assert x == "goodbye", "x should be 'hello'"
assert 2 + 2 == 5, "Nagy baj van nem működik a matematika, vagy csak bennem van a hiba?"

----  python generator iterator yield pdf

decorator : használata
@ decorator meghívása a DEF eljárás előtti fejléc sorban

generator :

iterator :

yield :

--- Képernyő törlése

import os
os.system('cls')    # For Windows
# os.system('clear')  # For Linux/OS X

import os
cls = lambda: os.system('cls')
>>> cls()

import subprocess
subprocess.call("clear")           # linux/mac
subprocess.call("cls", shell=True) # windows

--- tömeges replace()
---  használat : str=s.maketrans( régiek, újak, törlendők)
cserélő= str.maketrans("alk", "k?a")
"ablak".translate( cserélő)
'kb?ka'

cser= str.maketrans("öü","üö", " k")
"tükröm tükröm".translate(cser)
'törümtörüm'


--- nyelvi ábc sorrend:
import locale as loc
loc.setlocale(loc.LC_ALL,"")
'en_US.UTF-8'
loc.setlocale(loc.LC_ALL,"hu_HU.utf8")
'hu_HU.utf8'
loc.strxfrm("álmos") < loc.strxfrm("boci") ## átalakított betűsorrend



--  Print format:
%s a string
%d an integer
%0xd an integer padded with x leading zeros
%f decimal notation with six decimals
%e compact scientific notation, e in the exponent
%E compact scientific notation, E in the exponent
%g compact decimal or scientific notation (with e)
%G compact decimal or scientific notation (with E)
%xz format z right-adjusted in a field of width x
%-xz format z left-adjusted in a field of width x
%.yz format z with y decimals
%x.yz format z with y decimals in a field of width x
%% the percentage sign % itself

szótárhoz hasonló típusú objektumokat, s ezeket
összefoglalóan asszociatív tömböknek nevezzük.


A standard vars() függvénnyel lekérdezhetjük az objektum névterében lévő változókat.

tuple-nak nevezik, mi pedig a sokaság:
egy sokaság indexelhető, belőle szeletek
kimásolhatóak. Nyilván nem lehet saját sort() metódusa, ami helyben rendezné az elemeket mint a
listáknál, de a standard sorted() függvény alkalmazható, bár ne felejtsük el, hogy ennek kimenete
nem egy újabb sokaság lesz, hanem egy rendezett lista.

Az encode() párja a decode(), amely egy bájtszekvenciából karakterláncot készít, azaz létrehozza
annak belső ábrázolását. Argumentumként meg kell adnunk, hogy a szekvenciát melyik kódtábla
szerint kérjük értelmezni

Emlékeztetőül még megjegyezzük, hogy a korábban megismert ord() függvény az
argumentumként megadott egyetlen karakter Unikód szerinti kódpontját adja meg, a chr() pedig a
kódpontból állítja elő a karaktert.


A példa végén egy általunk még nem ismert objektumot, egy 'generator'-t kaptunk, pedig a zárójel
alapján logikusnak tünt az elvárás, hogy itt tuple-t, azaz sokaságot kapjunk. Nos, a sokaságokhoz
nem létezik objektumépítő kifejezés, talán azért, mert ezek módosíthatatlan objektumok, bár
elméletben ez sem lenne akadály. Egyébként bármelyik fenti objektumból a tuple() függvénnyel
könnyedén tudunk sokaságot készíteni.

A generátorobjektum nem tartalmazza „készen” az elemeit,
mint például a listák, karakterláncok és a többi konténer típusú objektum, s ezért nem is lehet
indexelni, de bejárni igen. Az elemeket csak kérésre hozza létre, mindig csak egyet, s ez az a
tulajdonsága, ami miatt esetenként nagyon hasznos, mert kevés helyet igényel

Szerencsére itt az értelmező a segítségünkre lesz, mert rábízhatjuk a megadott argumentumaink
sokaságba foglalását, ha ezt a függvény definíciójában jelezzük neki, amihez csupán egy '*'-ot kell
az argumentum elé illeszteni. Sőt még ennél többet is tehetünk, ha telhetetlenül két csillagot
„biggyesztünk” oda, mert ekkor nevesített argumentumokat adhatunk meg, amelyekből az
értelmező egy szótárt készít


Az iteráció legfőbb tulajdonsága az időbeni ismétlés, egy kódrészlet időben
egymás utáni többszöri végrehajtása. Egy másik típusú ismétlés a rekurzió, amikor ugyancsak
megtörténik az időbeli ismétlés, de emellett a kódblokk fizikailag is megtöbbszöröződik.

Az így
módosított sys.path azonban a program futásának befejeztével „elfelejti” ezt a kiegészítést. Jobb
megoldás, ha az operációs rendszer vagy a felhasználó szintjén állítjuk be a modulkönyvtárakat.
Erre szolgál a 'PYTHONPATH' ún. környezeti változó, amelyből a Python-értelmező a benne
felsorolt könyvtárakat hozzáteszi a sys.path listájához.

Egy készletet sorba rendezni nem lehet, nincs is ilyen metódus, de az elemeit a sorted()
standard függvénnyel egy rendezett listába is átmásolhatjuk, feltéve, hogy az elemek között
értelmezhető a rendezés.

A készletobjektum egy nem módosítható változata az ún. „befagyasztott” vagy konstans
készlet, angolul frozenset. Ezt csak a létrehozásakor lehetséges feltölteni adatokkal (ilyenek voltak
a karakterláncok is), amit a standard frozenset() függvénnyel tudunk megtenni, melynek
használata hasonló a set() függvényével.

---
  # Egy osztálymetódus az osztály összes példány közt meg van osztva.
    # Hívásukkor az első paraméter mindig a hívó osztály.
    @classmethod
    def get_species(cls):
        return cls.species

    # Egy statikus metódus osztály és példányreferencia nélkül hívódik
    @staticmethod
    def grunt():
        return "*grunt*"

    # Egy property jelölésű függvény olyan, mint egy getter.
    # Használatával az age mező egy csak-olvasható attribútummá válik.
    @property
    def age(self):
        return self._age

    # Így lehet settert megadni egy mezőhöz
    @age.setter
    def age(self, age):
        self._age = age


.

MS oktatások

Kicsit fejlesztettem és teszteltem magamat. https://docs.microsoft.com/hu-hu/ Érdemes végig csinálni, vagy legalább kipróbálni. ...