Python
Linked list in Python
16 feb
Una linked list (nel nostro caso, una doubly linked list )è una struttura dati dove gli elementi sono ordinati linearmente e il loro ordine è dato dai puntatori presenti in ogni elemento della lista.
Di seguito mostrerò l’implementazione di una doubly linked list in Python, dove ogni elemento ha un puntatore all’elemento precedente e un puntatore all’elemento successivo.
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
Abilitare l’esecuzione di script CGI con Apache
26 mar
Lo standard CGI è utilizzato dai web server per interfacciarsi con le applicazioni esterne mediante un’interfaccia comune.
Quando viene richiesto al web server uno script CGI, questo lo esegue e restituisce al client il risultato dell’esecuzione.
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 >