Post con tag Python

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

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 >

Comunicazione tra thread in Python con gli oggetti Event

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

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 >