DedSec Project

Γλωσσάρι: determinism, dictionaries και δυναμικοί τύποι — DedSec Project

Γλωσσάρι: determinism, dictionaries και δυναμικοί τύποι Determinism Τι σημαίνει στην πράξη Deterministic computation παράγει το ίδιο παρατηρήσιμο αποτέλεσμα για ίδιες εισόδους και σχετικό…

Determinism

Τι σημαίνει στην πράξη

Deterministic computation παράγει το ίδιο παρατηρήσιμο αποτέλεσμα για ίδιες εισόδους και σχετικό περιβάλλον. Το random seed βοηθά με ψευδοτυχαίες σειρές, αλλά δεν ελέγχει ρολόγια, threads, filesystem order ή μεταβαλλόμενες υπηρεσίες.

Συγκεκριμένο παράδειγμα

import random
first = random.Random(17).sample(range(100), 5)
second = random.Random(17).sample(range(100), 5)
assert first == second

Άσκηση και συχνή παγίδα

Αφαίρεσε το explicit seed και παρατήρησε μεταβλητότητα· ταξινόμησε συλλογή πριν συγκρίνεις έξοδο. Για tests ημερομηνιών χρησιμοποίησε injected fixed clock. Κατάγραψε ποιες εξαρτήσεις εμποδίζουν πλήρη αναπαραγωγή.

Αναφορά: https://docs.python.org/3/library/random.html

Dictionary

Τι σημαίνει στην πράξη

Dictionary ή map αντιστοιχίζει μοναδικά keys σε values για γρήγορο lookup. Στην Python τα keys πρέπει να είναι hashable και η ανάθεση σε ήδη υπάρχον key αντικαθιστά την τιμή. Η απόδοση είναι συνήθως καλή κατά μέσο όρο, όχι απόλυτη εγγύηση σε κάθε περίπτωση.

Συγκεκριμένο παράδειγμα

totals = {}
for name in ['Ada', 'Grace', 'Ada']:
    totals[name] = totals.get(name, 0) + 1
assert totals == {'Ada': 2, 'Grace': 1}

Άσκηση και συχνή παγίδα

Δοκίμασε list ως dictionary key και εξήγησε το TypeError. Σύγκρινε d.get(k) με d[k] για άγνωστο key· η απουσία δεν σημαίνει πάντα νόμιμο μηδενικό αποτέλεσμα.

Αναφορά: https://docs.python.org/3/tutorial/datastructures.html#dictionaries

Dynamic typing

Τι σημαίνει στην πράξη

Σε dynamically typed γλώσσες όπως η Python, οι τιμές έχουν τύπους αλλά ένα όνομα μπορεί να δείχνει σε διαφορετικούς τύπους με τον χρόνο. Αυτό δεν σημαίνει απουσία κανόνων: λάθος operations αποτυγχάνουν στο runtime. Τα annotations βοηθούν εργαλεία χωρίς να επιβάλλονται από τον interpreter.

Συγκεκριμένο παράδειγμα

value = 3
value = 'three'
assert isinstance(value, str)
try:
    _ = value + 1
except TypeError: pass
else: raise AssertionError('expected a type error')

Άσκηση και συχνή παγίδα

Φτιάξε function που δέχεται άγνωστο JSON και χρησιμοποιεί isinstance πριν από αριθμητική. Σύγκρινε runtime behavior με static warning για value + 1. Τα type hints δεν επικυρώνουν αυτόματα εισερχόμενα δεδομένα.

Αναφορά: https://docs.python.org/3/library/typing.html

Encapsulation

Σημασία και περιορισμοί

Το encapsulation συνδέει state με τις λειτουργίες που προστατεύουν τους κανόνες του μέσω ελεγχόμενου interface. Στην Python το αρχικό underscore είναι convention, όχι αυστηρή απαγόρευση πρόσβασης. Ο caller πρέπει να χρησιμοποιεί methods που τηρούν invariant.

Πρακτικό παράδειγμα

class Balance:
    def __init__(self): self._cents = 0
    def add(self, cents):
        if type(cents) is not int or cents < 0: raise ValueError('invalid amount')
        self._cents += cents
    @property
    def cents(self): return self._cents
b = Balance(); b.add(25); assert b.cents == 25

Άσκηση και παγίδα

Δοκίμασε add(-1) και add(True). Εξήγησε γιατί η απευθείας ανάθεση στο _cents τεχνικά επιτρέπεται· σε πραγματικά APIs απαιτούνται και δικαιώματα χρήστη.

Επιπλέον πηγή: https://docs.python.org/3/tutorial/classes.html#private-variables