Python

Linked list in Python

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.

Continua >

L’algoritmo di ricerca binaria

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.

Continua >

Generatore di Fibonacci in Python

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

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.

Continua >

I segnali in Python

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

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

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.

Continua >

Il metodo di bisezione in Python

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

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

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 >