Γλωσσάρι: συναρτήσεις, garbage collection και generics — DedSec Project
Γλωσσάρι: συναρτήσεις, garbage collection και generics Function Σημασία και περιορισμοί Function είναι επαναχρησιμοποιήσιμος υπολογισμός με παραμέτρους και αποτέλεσμα. Το συμβόλαιο…
Function
Σημασία και περιορισμοί
Function είναι επαναχρησιμοποιήσιμος υπολογισμός με παραμέτρους και αποτέλεσμα. Το συμβόλαιο περιγράφει types, άκυρες εισόδους, side effects και εγγυήσεις. Η ύπαρξη συνάρτησης δεν σημαίνει purity: μπορεί να αλλάζει files ή state.
Πρακτικό παράδειγμα
def area(width: float, height: float) -> float:
if width < 0 or height < 0: raise ValueError('negative dimension')
return width * height
assert area(3, 4) == 12
assert area(0, 5) == 0
Άσκηση και παγίδα
Πρόσθεσε tests με αρνητικές διαστάσεις και μη αριθμητική είσοδο. Αποφάσισε αν float annotations αρκούν σε εξωτερικό API: από μόνες τους δεν κάνουν runtime validation.
Επιπλέον πηγή: https://docs.python.org/3/tutorial/controlflow.html#defining-functions
Garbage collection
Σημασία και περιορισμοί
Garbage collection ελευθερώνει μνήμη αντικειμένων που δεν είναι πλέον προσβάσιμα σύμφωνα με runtime rules. Η CPython κυρίως χρησιμοποιεί reference counting μαζί με cyclic collector, ενώ άλλα runtimes έχουν tracing GC. Το GC δεν εγγυάται άμεσο κλείσιμο files ή locks.
Πρακτικό παράδειγμα
from contextlib import closing
from io import StringIO
with closing(StringIO('test')) as stream:
assert stream.read() == 'test'
assert stream.closed
Άσκηση και παγίδα
Εξήγησε γιατί context managers είναι καλύτερα για file handles. Σχεδίασε κύκλο δύο αντικειμένων και σημείωσε ότι ο χρόνος GC δεν είναι portable συμβόλαιο.
Επιπλέον πηγή: https://docs.python.org/3/library/gc.html
Generic type
Σημασία και περιορισμοί
Generic type παραμετροποιείται με άλλο τύπο ώστε μία δομή να διατηρεί τις ιδιότητες διαφορετικών δεδομένων. Στην Python το list[int] καθοδηγεί static tooling αλλά δεν απορρίπτει λάθος στοιχεία αυτόματα στο runtime.
Πρακτικό παράδειγμα
from typing import TypeVar
T = TypeVar('T')
def first(items: list[T]) -> T | None:
return items[0] if items else None
assert first([3,4]) == 3
assert first([]) is None
Άσκηση και παγίδα
Ζήτησε από type checker να συμπεράνει τύπο εξόδου για list[str] και list[int]. Σύγκρινε static checking με runtime validator για άγνωστα JSON elements.
Επιπλέον πηγή: https://docs.python.org/3/library/typing.html
Git
Σημασία και περιορισμοί
Το Git είναι κατανεμημένο version control: ένα τοπικό clone έχει ιστορικό, branches και metadata ανεξάρτητα από server. Το fetch ενημερώνει remote refs, το merge/rebase συνδυάζει αλλαγές και το push δημοσιεύει commits.
Πρακτικό παράδειγμα
git status --short --branch
git log --oneline -5
git remote -v
git fetch origin
Άσκηση και παγίδα
Σε δοκιμαστικό clone σύγκρινε git status πριν/μετά fetch. Επιβεβαίωσε ότι μόνο το fetch δεν αλλάζει τα tracked working files. Μην κάνεις force-push ή reset σε production.
Επιπλέον πηγή: https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F
Hash function
Σημασία και περιορισμοί
Μια hash function μετατρέπει bytes σε σταθερού μεγέθους digest. Το cryptographic SHA-256 σχεδιάστηκε ώστε συγκρούσεις να είναι εξαιρετικά δύσκολες, αλλά το digest αποδεικνύει ταύτιση μόνο ως προς έμπιστη αναφορά. Τα dictionary hashes εξυπηρετούν άλλους στόχους.
Πρακτικό παράδειγμα
import hashlib
h = lambda b: hashlib.sha256(b).hexdigest()
assert h(b'abc') == 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
assert h(b'abc') != h(b'abd')
Άσκηση και παγίδα
Υπολόγισε hash αρχείου πριν και μετά από αλλαγή ενός byte. Εξήγησε γιατί hash από την ίδια compromised ιστοσελίδα με κακόβουλο binary δεν αποδεικνύει γνησιότητα.
Επιπλέον πηγή: https://docs.python.org/3/library/hashlib.html