Post con tag Python
L’algoritmo di ricerca binaria
30 mar
La ricerca binaria, o dicotomica, è una particolare ricerca, effettuabile su insiemi ordinati, particolarmente efficiente.
Il suo costo computazionale è $latex O(1) $ nel caso ottimo, $latex O(log n) $ nel caso pessimo.
Generatore di Fibonacci in Python
27 mar
Il seguente algoritmo utilizza l’istruzione yield per creare un generatore di numeri di Fibonacci:
def fibonacci(n): current = 0 next = 1 for i in range(n): yield current current, next = next, next + current n = 13 for i in fibonacci(n): print(i)
Output:
0 1 1 2 3 5 8 13 21 34 55 89 144
I segnali in Python
16 feb
Il modulo signal fornisce uno strumento per la gestione dei segnali.
Il seguente esempio mostra una semplice gestione dei segnali CTRL + C (interruzione da tastiera), CTRL + Z (stop da tastiera) e il segnale SIGALRM.
Il programma imposterà per questi segnali una funzione che li gestisce e si metterà in sleep per 10 secondi. Se non accade nulla dopo 5 secondi, si attiverà il segnale di alarm. Altrimenti vengono stampati gli altri due segnali, se questi sono stati inviati al programma:
import signal import time def code_to_string(code): if code == 2: return "SIGINT" elif code == 14: return "SIGALRM" elif code == 20: return "SIGTSTP" else: return str(code) def sig_handler(signum, frame): code = code_to_string(signum) print "Segnale %s" % code signal.signal(signal.SIGALRM, sig_handler) signal.signal(signal.SIGINT, sig_handler) signal.signal(signal.SIGTSTP, sig_handler) signal.alarm(5) time.sleep(10)
Semplice shell con il modulo subprocess di Python
15 feb
Il modulo subprocess di Python è utilizzato per lanciare nuovi processi e ottenere il loro codice di errore.
Il codice seguente mostra l’implementazione di una semplice shell:
import subprocess while True: string = raw_input(">> ") if string == "exit" or string == "quit": break args = string.split() try: p = subprocess.Popen(args) p.wait() print("\n >> Return Code: %d <<\n" % p.returncode) except OSError, e: print e
Apache, Python e CGI
9 feb
Python ha tra i suoi moduli il modulo cgi, che fornisce supporto alla tecnologia CGI (Common Gateway Interface).
In questo articolo vediamo come configurare Apache per la gestione dei contenuti dinamici tramite CGI.
Il metodo di bisezione in Python
19 gen
Il metodo di bisezione è un metodo numerico utilizzato per trovare un’approssimazione della radice di una funzione f.
Data una funzione reale $latex f(x)$ definita e continua in un intervallo $latex [a, b]$ tale che $latex f(a)f(b) < 0$, allora per il teorema di Bolzano esiste un punto $latex x$ nell'intervallo chiuso $latex [a, b]$ tale che $latex f(x) = 0$.
Continua >
Lookup in Python
15 gen
Python mette a disposizione il metodo socket.getaddrinfo per effettuare il Forward Lookup (conoscere l’IP dato il nome di un dominio o di un host).
Il prototipo di questo metodo è:
socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])
il valore di ritorno è una lista di tuple di cinque elementi:
(family, socktype, proto, canonname, sockaddr)
Continua >
Metodi speciali di classe in Python
13 gen
Quando si definisce una classe, è possibile definire dei metodi speciali che verranno richiamati dall’interprete in opportune situazioni.
Vediamone alcuni:
__init__(self[, ...])
Richiamato quando viene creata un’istanza della classe.
Se la classe è una classe derivata, il costruttore della classe base deve essere richiamato esplicitamente per inizializzare correttamente l’istanza.
Il metodo __init__ non deve ritornare alcun valore
Continua >
Comunicazione tra thread in Python con gli oggetti Event
13 gen
Gli oggetti threading.Event sono utilizzati per la comunicazione tra thread. Un thread si mette in attesa di un segnale mentre un altro thread lo emette.
Sostanzialmente, un oggetto Event gestisce un flag interno che può essere impostato a falso con clear(), impostato a vero con set() e testato con is_set.
Un thread si può mettere in attesa di un segnale mediante la chiamata al metodo wait([timeout]). L’attesa termina alla chiamata del metodo set()
Continua >
Sincronizzazione in Python mediante threading.Lock
13 gen
Un oggetto lock è un oggetto che può essere acquisito e rilasciato. Se tale oggetto è stato già acquisito, chi tenta di acquisirlo si blocca fintanto che non viene rilasciato.
In Python questo oggetto è creato mediante threading.Lock() e threading.RLock().
Continua >