Angella Andrea - Italian Blog

Infinita passione per lo sviluppo software !
posts - 133, comments - 216, trackbacks - 9

My Links

News

MIT OpenCourseWare: I'm invested Wikipedia Affiliate Button


Sto leggendo:

Archives

Post Categories

Siti web realizzati

Siti web tecnici

Anch'io finalmente conosco il linguaggio Python !


E' da diverso tempo che sento parlare spesso di Python e finalmente mi sono deciso di acquistare un libro introduttivo per conoscere questo linguaggio.
Il libro è Python della serie Pocket di Apogeo (i migliori per iniziare a mio parere) e l'ho letto tutto di un fiato con il computer davanti per provare il codice !!
Il primo impatto con questo linguaggio devo dire che è stato grande, sembra davvero interessante. Poi darò un'occhiata allo stato del porting in .NET.

Ecco le caratteristiche che lo rendono appetibile:

  • Orientato agli oggetti
  • Veramente semplice da imparare ( io ci ho messo 5 ore per familiarizzare con la sintassi, i costrutti e i tipi di dati )
  • Utilizza la tipizzazione dinamica ma è fortemente tipizzato
  • Tipi di dati potenti e facili da usare come liste, insiemi e dizionari
  • Estensibile in C e in C++
  • Possibilità di includere l'interprete Python nei nostri programmi
  • Portabile (se non si utilizzano moduli dedicati a uno specifico sistema operativo come PyWin32 )
  • Semplicissimo da installare
  • Particolare e potente metodo di accesso a uno o più elementi su tipi di dati sequenziali come liste e stringhe (Slicing)
  • Disponibilità di migliaia di moduli già realizzati e facili da utilizzare, compresi quelli per la realizzazione di interfacce grafiche multipiattaforma
  • Permette l'overloading degli operatori
  • Semplicità di creazione di pacchetti per il deployment anche su macchine senza interprete Python (modulo Inno Setup)
  • Gratuito

Alcune cose che mi hanno fatto un pò storcere il naso sono:

  • Indentazione obbligatoria e assenza di parentesi nei costrutti if, for ecc
    Si avete capito bene. L'interprete Python richiede in modo obbligatorio l'indentazione e si basa su quella per determinare i blocchi di codice.
    Lo scopo è quello di migliorare la leggibilità dei programmi semplicemente impedendo di scrivere in modo disordinato.
    Non ho esperienza con questo linguaggio quindi non saprei se alla fine questo si traduce in un reale vantaggio.
  • Non si hanno parole chiave per rendere privato un membro di una classe. Per fare questo si deve anteporre al nome del membro due caratteri underscore.
    Questa scelta mi porterà senz'altro a non utilizzare mai membri privati in Python anche se ciò è contro il fondamentale principio dell' information hiding.
    Inoltre anche se utilizziamo questa convenzioni il Python permette ancora di accedere al membro definito ma con una sintassi differente  ( uhmmmm )

Alcuni pezzi di codice divertenti e curiosi:

Assegnare un valore all'ultimo elemento di una lista:

elenco = [ 'a', 'b', 'c', 1, 2]
elenco[-1] = 3

Estrarre una sottostringa:

stringa = "Angella Andrea is my name"
nome = stringa[8:14]
print nome                      # visualizza 'Andrea'

Moltriplicazione di stringhe:

stringa = "ciao " * 5
print stringa                # visualizza 'ciao ciao ciao ciao ciao'

Non c'è limite alle dimensioni di un numero intero:

print 2 ** 10000       # visualizza tutte le cifre intere di 2 elevato a 10000 (e sono tante)

Il linguaggio supporta anche i numeri complessi:

a = 3 + 2j
b = 2 - 4j
print a + b

Unico ciclo su liste distinte:

nomi = ["Andrea", "Stefano", "Alessandro"]
cognomi = ["Cognome1", "Cognome2", "Cognome3"]
anni = [23, 23, 26]

for nome, cognome, eta in zip(nomi, cognomi, anni):
    print "%s %s ha %s anni" % (nome, cognome, eta)

Esiste anche la clausola else nel costrutto for.
Le istruzioni vengono eseguite sempre alla fine del ciclo a meno che non si termina con break:

for num in range(100):
    for fat in range(2, num):
        if num % fat == 0:
            print num, "è ", fat, "*", num/fat
            break
    else:
        print num, "è un numero primo"

Scaricare una pagina web e salvarla su un file.
Siccome non esistono parentesi per delimitare i blocchi è necessario avere a disposizione un modo per indicare un blocco vuoto (pass).
E' possibile utilizzare la clausola else anche per la gestione delle eccezioni
:

import urllib

try:
    urllib.urlretrieve("
http://www.google.it", "c:\pagina.html")
except:
    pass
finally:
    print "Codice sempre eseguito"
else:
    print "Codice sempre eseguito se non sono state sollevate eccezioni"


Funzioni che restituiscono più di un valore:

def funzione(n):
    return 2*n, n*n

doppio, quadrato = funzione(5)          # restituisce 10 e 25

Una funzione è un oggetto a tutti gli effetti e può essere passato come argomento di funzioni:

def stampa(arg):
    print arg

def esegui(funz, arg):
    funz(arg)

esegui(stampa, "Ciao")        # stampa a video "Ciao"

Semplicità di serializzare e deserializzare gli oggetti e quindi creare un semplice database basato su file (modulo shelve):

import shelve

class Studente:
    def __init__(this, matricola, nome):
        this.matricola = matricola
        this.nome = nome
    def __str__(this):
        return "Studente " + this.nome + " matricola " + str(this.matricola)

s1 = Studente(111111, "Andrea")
s2 = Studente(222222, "Stefano")

# Serializzo gli oggetti su un file

db = shelve.open("db")
db["studente1"] = s1      # serializza lo studente su file
db["studente2"] = s2      # serializza lo studente su file

db.close();

# Leggo gli oggetti deserializzando il file

db = shelve.open("db")

s1 = db["studente1"]
s2 = db["studente2"]

print s1     # Visualizza 'Studente Andrea matricola 111111'
print s2     # Visualizza 'Studente Stefano matricola 222222'

Certamente la piattaforma .NET rimane sempre la mia preferita accompagnata ovviamente dal potentissimo editor Visual Studio con il fantastico Intellisense !

Se ho stimolato la curiosità di qualcuno l'indirizzo da cui scaricare l'interprete Python o anche i sorgenti è http://www.python.org/

Print | posted on martedì 11 settembre 2007 00:41 | Filed Under [ Python ]

Feedback

Gravatar

# re: Anch'io finalmente conosco il linguaggio Python !

Per quanto riguarda l'editor per Python esiste il binomio Eclipse+PyDev
http://www.eclipse.org/
http://pydev.sourceforge.net/
11/09/2007 15:02 | Matteo Baglini
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET