Matematikai Algoritmusok és Felfedezések I.

4. Előadás: Comprehensions, Objektum orientált programozás

2021 március 1.

List comprehension

Egy soros megfelelő:

Az általános formula

[<expression> for <element> in <sequence>]

Ami azzal ekvivalens, hogy

egy feltételt is megadhatunk, hogy szűrjük az elemeket:

[<expression> for <element> in <sequence> if <condition>]

Ez persze nem a list comprehension extrája, hanem csak annyi, hogy ez is egy értelmes kifejezés:

Több listán is végigfuthatunk:

Egymásba is ágyazhatjuk őket:

Set és dictionary comprehension

Minden analóg módon működik:

Vajon mi történik?

Függvények fura viselkedése

Namespace (névtér)

A namespace a változó nevek és az objektumok közti leképezés (pont mint egy dictionary). Pl:

Scope

Minden namespacehez tartozik egy scope. A scope a kódnak az a része, ahol a neveket automatikusan abban az adott namespaceben keresi a program.

Hogyan érjük el egy másik namespaceben lévő objektumokat?

A másik lehetőség, hogy megadjuk, hogy melyik namespaceben kell keresni.

Programozási paradigmák

Sokféle van, például:

Példa: Főzés vs matek vs autók

Mikor melyiket válasszuk?

Python

Objektumorientált programozás

Objektum orientáltság Pythonban

https://docs.python.org/3/tutorial/classes.html

Osztály (class) definiálása

Init

Metódusok

Metódusok meghívása

Két lehetőség van:

  1. példány.metódus(param)
  2. class.metódus(példány, param)

__str__ metódus

Egy speciális metódus, amit arra használunk hogy megadjuk, hogy a print() függvény hogyan írja ki az objektumot.

Osztály attribútumok

A példányokon és a class objektumon keresztül is elérjük

Megváltoztatni a classon keresztül lehet

A példányokon keresztül viszont nem

Azért, mert ez egy új attribútumot hoz létre a példány namespacében.