Automation · Backend · Tooling

🐍 Python Programozás Alapok

Teljes útmutató a Python kezdő lépéseitől a haladó toolingig, lépésről lépésre.

Python 3.12 Poetry FastAPI

🚀 1. Python Telepítése és Beállítása

A. Python letöltése

  1. Látogasd meg a python.org oldalt és töltsd le a legfrissebb 3.x verziót.
  2. Windows telepítőn pipáld be az Add Python to PATH opciót, majd válaszd az Install Now-t.
  3. macOS/Linux alatt használhatsz brew, apt, dnf vagy pyenv csomagkezelőt.
  4. Frissítsd a pip-et, hogy a legújabb csomagokat kapd meg.

B. Telepítés ellenőrzése

python --version
python -m pip --version
python -m pip install --upgrade pip

💡 Tipp: Hozz létre egy C:/Dev/python mappát, és minden projektet külön almappában tarts.

📝 2. Az első Python program

Készíts egy hello.py fájlt, majd írd bele az alábbi sorokat:

# Ez egy megjegyzés
print("Helló Világ!")
print("PowerFull Dev's Python kurzus fut!")

Futtatás terminálból:

python hello.py

VS Code-ban futtasd a Python: Select Interpreter parancsot, majd nyomd meg a Run Python File gombot.

📚 3. Alap koncepciók

Változók és típusok

név = "János"          # string
kor = 19               # int
magasság = 1.82        # float
aktív = True           # bool
feladatok = ["Git", "API", "Doc"]
profil = {"város": "Budapest", "rang": "junior"}

print(név)
print(f"{név} {kor} éves")
print(f"Feladatok: {', '.join(feladatok)}")

Szöveg kezelés

név = "Péter"
város = "Budapest"
print(név + " " + város + "-ből")
print(f"{név.upper()} érkezett {város}-ből")
print("Python"[::-1])  # fordított string

Alap matematika

a = 10
b = 3
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)
print(a % b)
print(a ** b)

⌨️ 4. Felhasználói input

név = input("Add meg a neved: ")
print(f"Helló {név}!")

életkor_szöveg = input("Hány éves vagy? ")
életkor = int(életkor_szöveg)
print(f"Jövőre {életkor + 1} éves leszel!")

🔀 5. Feltételek (If-Else)

pont = 72

if pont >= 90:
    print("Kitűnő")
elif pont >= 75:
    print("Jó")
elif pont >= 60:
    print("Közepes")
else:
    print("Elégséges")

Összehasonlító operátorok

a = 10
b = 5
print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)

🔄 6. Ciklusok (Loops)

For ciklus

for i in range(1, 6):
    print(f"Lépés {i}")

színek = ["piros", "zöld", "kék"]
for szín in színek:
    print(szín)

While ciklus

szám = 1
while szám <= 5:
    print(szám)
    szám += 1

Break & Continue

for i in range(10):
    if i == 5:
        break
    print(i)

for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

🧩 7. Listák, tuple-ök, szótárak

A beépített adatszerkezetek gyors problémamegoldást tesznek lehetővé. Válassz mutálható (list, dict) vagy immutábilis (tuple) típust a feladathoz.

adatok = [42, "dev", True]
adatok.append("új elem")
print(adatok[-1])

koordinata = (47.49, 19.04)
város = {"név": "Budapest", "népesség": 1756000}
város["ország"] = "HU"

for kulcs, érték in város.items():
    print(f"{kulcs}: {érték}")

négyzetek = [n ** 2 for n in range(10) if n % 2 == 0]
csapatok = {tag for tag in ["Anna", "Béla", "Anna"]}

List comprehension-t használj gyors transzformációra, set-et duplikációk szűrésére, dict-et kulcs alapú lekéréshez.

🧠 8. Függvények és típusannotáció

A függvények akkor igazán hasznosak, ha dokumentáltak és típusjelölést is kapnak. Ez megkönnyíti a statikus analízist és a hibakeresést.

from typing import Sequence

def üdvözlés(név: str, rang: str = "junior") -> str:
    """Egyszerű docstring, amit az IDE is mutat."""
    return f"Helló {név}! Te egy {rang.upper()} fejlesztő vagy."

print(üdvözlés("Réka"))

def szorzat(*számok: int) -> int:
    eredmény = 1
    for szám in számok:
        eredmény *= szám
    return eredmény

Scores = Sequence[int]

def átlag(pontok: Scores) -> float:
    return sum(pontok) / len(pontok)

print(átlag([90, 82, 75]))

Kombináld ezt mypy vagy pyright elemzéssel a CI folyamatban.

🧱 9. Moduláris felépítés

Oszd fel a kódot kisebb logikai egységekre. Egy __init__.py jelzi, hogy mappa importálható csomag.

# project/
# ├── app.py
# └── utils/
#     ├── __init__.py
#     └── math_ops.py

# utils/math_ops.py
def átlag(számok: list[int]) -> float:
    return sum(számok) / len(számok)

# app.py
from utils.math_ops import átlag

if __name__ == "__main__":
    print(átlag([1, 2, 3]))

Kerüld az sys.path módosítást, inkább telepíts csomagként vagy használd a pip install -e . módot.

💾 10. Fájlkezelés és JSON

Mindig kontextuskezelőt használj, így a fájl garantáltan lezárul, még hiba esetén is.

from pathlib import Path
import json

adatok = {"projekt": "PowerFull", "tagok": ["Anna", "Márk"]}
Path("data").mkdir(exist_ok=True)

with open("data/config.json", "w", encoding="utf-8") as fájl:
    json.dump(adatok, fájl, indent=2, ensure_ascii=False)

with open("data/config.json", encoding="utf-8") as fájl:
    vissza = json.load(fájl)
    print(vissza["projekt"])

CSV-hez a csv, konfigurációhoz a tomllib modul a legkényelmesebb.

⚠️ 11. Kivételkezelés és loggolás

Kerüld az üres except blokkokat. Adj naplózást és kontextust minden kivételhez.

import logging
from pathlib import Path

logging.basicConfig(level=logging.INFO, format="%(levelname)s | %(message)s")

try:
    tartalom = Path("secret.txt").read_text(encoding="utf-8")
except FileNotFoundError as hiba:
    logging.error("Hiányzó fájl: %s", hiba)
else:
    logging.info("Fájl méret: %s karakter", len(tartalom))
finally:
    logging.info("Kész a folyamat")

Komolyabb projektnél hozz létre külön loggert (logging.getLogger(__name__)) és irányítsd fájlba vagy monitorozó szolgáltatásba.

🏗️ 12. Objektumorientált programozás

Osztályokkal modellezheted a domént; a @dataclass csökkenti a boilerplate-et.

from dataclasses import dataclass, field

@dataclass
class Felhasználó:
    név: str
    jogosultságok: list[str] = field(default_factory=list)

    def engedélyez(self, jogosultság: str) -> None:
        if jogosultság not in self.jogosultságok:
            self.jogosultságok.append(jogosultság)

class Admin(Felhasználó):
    def tilt(self, felhasználó: "Felhasználó") -> None:
        print(f"{felhasználó.név} fiókja felfüggesztve")

admin = Admin("Csaba")
admin.engedélyez("deploy")
admin.tilt(Felhasználó("Vendég"))

Ha validáció és immutabilitás kell, nézd meg a pydantic vagy attrs könyvtárat.

🧰 13. Virtuális környezet és függőségek

Válassz dedikált környezetet projektenként, így elkerülöd a verzióütközést.

python -m venv .venv
source .venv/Scripts/activate  # PowerShell: .venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install fastapi "uvicorn[standard]"
pip freeze > requirements.txt

Alternatív eszközök: Poetry (lock + publish), pip-tools (megbízható requirements.txt generálás).

📦 14. Projektstruktúra és CLI

Kövesd a "src" elrendezést, így az importok mindig tiszták maradnak.

my_app/
├── pyproject.toml
├── README.md
├── src/
│   └── my_app/
│       ├── __init__.py
│       ├── cli.py
│       └── services.py
└── tests/
    └── test_cli.py
# src/my_app/cli.py
import click

@click.group()
def main() -> None:
    ...

@main.command()
def ping() -> None:
    click.echo("pong")

if __name__ == "__main__":
    main()

A pyproject.toml [project.scripts] szekciója önálló parancsot biztosít a telepített csomaghoz.

🧪 15. Tesztelés pytest-tel

A tesztek védőhálót adnak refaktoráláskor. Paraméterezett teszttel több esetet fedhetsz le egyszerre.

# src/utils/math_ops.py
def összeg(values: list[int]) -> int:
    return sum(values)

# tests/test_math_ops.py
import pytest
from utils.math_ops import összeg

@pytest.mark.parametrize("értékek, várható", [([1, 2, 3], 6), ([0], 0)])
def test_összeg(értékek, várható):
    assert összeg(értékek) == várható

CI-ben használd: pytest --maxfail=1 --disable-warnings -q, coverage-hez coverage run -m pytest.

⚡ 16. Aszinkron és párhuzamos feladatok

Az I/O intenzív munkát asyncio végzi a legjobban, a CPU-igényt concurrent.futures kezeli.

import asyncio

async def lekérdez(endpoint: str) -> str:
    await asyncio.sleep(1)
    return f"{endpoint} kész"

async def fő() -> None:
    eredmények = await asyncio.gather(
        lekérdez("/users"),
        lekérdez("/stats"),
        return_exceptions=False,
    )
    print(eredmények)

asyncio.run(fő())

Külső API-hoz nézd meg az httpx vagy aiohttp async klienseket.

🌐 17. API fejlesztés és integráció

FastAPI-val gyorsan építhetsz típusbiztos REST szolgáltatást, a kliensen pedig requests vagy httpx hívja meg.

# api.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Todo(BaseModel):
    text: str
    done: bool = False

todos: list[Todo] = []

@app.post("/todos")
def create(todo: Todo) -> Todo:
    todos.append(todo)
    return todo

# kliens.py
import httpx

resp = httpx.post("http://127.0.0.1:8000/todos", json={"text": "Deploy"})
print(resp.json())

Indítás: uvicorn api:app --reload. Swagger UI automatikusan elérhető: /docs.

🚀 18. Deploy, CI/CD és következő lépések

Automatizáld a buildet GitHub Actions-szel, hogy minden push után legyen tesztelt, csomagolt artefaktod.

# .github/workflows/ci.yml
name: python-ci
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - run: pip install -r requirements.txt
      - run: pytest
      - run: mypy src

Next step: Docker image (python:3.12-slim) build + push Container Registry-be, majd deploy Railway/Render/Fly.io-ra. Monitorozáshoz kombinálhatod Prometheus + Grafana vagy Sentry stack-et.

💡 Tippek: publikálj GitHub projektekben, írj fejlesztői naplót, és csatlakozz közösségi Discord szerverekhez tudásmegosztásért.