View Full Version : A caccia del Pitone
Alekinos
11-01-2011, 00:39
Salve popolo,
prima di incominciare chiedo scusa a tutti per il titolo, forse un po' eccentrico, ma è stato più forte di me :Prrr:
Mi piacerebbe conoscere l'esperienza di chi lavora col Python o, quantomeno, ne conosce le caratteristiche. Gli aspetti a cui maggiormente sono interessato sono:
a) Pregi e difetti in generale
b) Protabilità\compatibilità dei suoi prodotti sui vari OS
c) Come e con cosa è preferibile compilarlo
d) Perché Python piuttosto che un altro linguaggio orientato ad oggetti
Grazie a tutti coloro che parteciperanno alla discussione sperando che possa servire anche ad altri che vogliano avvicinarsi all'argomento
cdimauro
11-01-2011, 07:30
Salve popolo,
prima di incominciare chiedo scusa a tutti per il titolo, forse un po' eccentrico, ma è stato più forte di me :Prrr:
Occhio a non farsi cacciare dal pitone. :D
Mi piacerebbe conoscere l'esperienza di chi lavora col Python o, quantomeno, ne conosce le caratteristiche. Gli aspetti a cui maggiormente sono interessato sono:
a) Pregi e difetti in generale
In estrema sintesi:
- è sintetico :D;
- semplice da imparare e da scrivere;
- facile da leggere (ma scrivere brutto codice in Python è sempre possibile, come per qualunque altro linguaggio; solo che oltre certi limiti non si può andare);
- ti obbliga indentare il codice (niente codice modello "albero di natale / dente si sega";
- la differenza fra codice Python e pseudocodice è irrisoria;
- tutto è un oggetto, ma è possibile "simulare" diversi paradigmi di programmazione oltre a quello a oggetti (quindi anche la classica strutturata/imperativa e funzionale);
- supporti alcuni comodi costrutti della programmazione funzionale (iteratori, generatori, comprehension);
- c'è la metaprogrammazione;
- ci sono i decoratori;
- ha diversi tipi "base" (compresi gli insiemi!) che coprono la stragrande maggioranza delle esigenze comuni;
- ha una buona e abbastanza completa libreria in dotazione;
- è fortemente tipizzato (non puoi sommare stringhe e numeri, ad esempio);
- è modulare (nozione di modulo/unit e di package);
- è interattivo (puoi sperimentare idee scrivendo provando al volo pezzi di codice);
- può utilizzare facilmente librerie dinamiche scritte in qualunque altro linguaggio;
- è pensato per essere esteso (con codice scritto in altri linguaggi) ed "embeddato".
Difetti: nessuno. :D A parte gli scherzi:
- è più lento di altri linguaggi staticamente tipizzati e compilati, a volte anche di due ordini di grandezza;
- odio l'operatore != per la disuguaglianza (avrei preferito il <>), ma ormai dobbiamo tenercelo;
- i booleani sono derivati dalla classe int, per cui si possono eseguire tutte le classiche operazioni con gli interi;
- l'embedding e l'estensione richiedono più codice e attenzione rispetto ad altri linguaggi (come Lua), a causa della maggior complessità interna.
Se mi viene in mente altro editerò il post.
b) Protabilità\compatibilità dei suoi prodotti sui vari OS
Come Java e altri linguaggi, dipende dalla bontà del porting. Comunque sono ben supportate le piattaforme più diffuse, e anche altre meno diffuse.
E' possibile trovare VM Python anche per sistemi più rari (come AROS), anche se non godono della stessa cura e funzionalità.
c) Come e con cosa è preferibile compilarlo
Dipende dalla piattaforma. GCC per sistemi Unix-Like, Visual Studio per Windows. Per gli altri, non so.
d) Perché Python piuttosto che un altro linguaggio orientato ad oggetti
Perché è il più fico. :D Vabbé, il linguaggio deve anche piacere: può offrire tante meraviglie, ma se non ne digerisci la sintassi avrai sempre un rapporto di odio. Io lo amo per com'è fatto, ma altri programmatori hanno un giudizio diametralmente opposto.
Comunque dal punto di vista che t'interessa tecnicamente è preferibile per i seguenti motivi:
- ha l'ereditarietà multipla delle classi (quindi "simulare" di tutto; anche l'ereditarietà multipla tramite interfacce);
- ha il duck typing (http://en.wikipedia.org/wiki/Duck_typing) per cui non è strettamente necessario che un oggetto derivi da una classe o implementi una determinata interfaccia per poter dire "lo uso come stringa, file, o altro"; è sufficiente che esponga i metodi che ci si aspetta con gli stessi parametri (esempio: i metodi read e write per scrivere "su file");
- puoi modificare, aggiungere e togliere metodi e attribuiti dinamicamente;
- puoi modificare, aggiungere e togliere classi dinamicamente dall'elenco delle classi da cui eredita la tua;
- puoi creare nuove classi a runtime, e costruirtele come ti pare;
- hai le metaclassi per manipolare in maniera controllata e accurata la creazione di una classe (argomento abbastanza avanzato);
- hai i decoratori di classe (che semplificano molto il punto precedente, oltre che a renderlo più elegante e di più semplice comprensione);
- tutto è pubblico (niente visibilità privata/protetta/pubblica), a parte per alcuni meccanismi di importazione di moduli e accesso alle classi (ma è roba molto avanzata).
Anche qui, se mi viene in mente qualcos'altro, editerò il post.
Grazie a tutti coloro che parteciperanno alla discussione sperando che possa servire anche ad altri che vogliano avvicinarsi all'argomento
Concordo.
I difetti più grandi secondo me sono principalmente le prestazioni e poi la mancanza di un IDE completo (magari senza bug) che integri anche un designer di interfacce.
E' anche vero che con PyQt scrivere l'interfaccia manualmente non è un grosso sforzo, ma alla lunga si sente.
Per il resto è un linguaggio eccezionale IMHO, ho cominciato a lavorarci "seriamente" per la tesi e mi ha impressionato.
Una caratteristica dei linguaggi dinamici e che puoi di fatto lavorare con la meta-programmazione, ad esempio puoi far interpretare codice a run-time e magari creare una funzione (tramite le lambda) al volo :D.
Ad esempio, sto creando un filtro e le condizioni di filtraggio devono essere impostate/create a run-time, con python è molto facile passare ad una prima funzione una stringa con la condizione, tipo "x > 20" e il programma a run-time crea una funzione che poi potrà essere usata in un ciclo per testare ripetutamente quella condizione senza perdere troppo tempo.
C'è da dire che spiazza un po' chi ha esperienza di linguaggi C++/Java, dove magari si è un po' più attenti alle prestazioni e quindi si è tentati di fare delle pseudo-ottimizzazioni poco inclini alla natura di python (spesso partendo da premesse sbagliate).
cdimauro
11-01-2011, 14:14
I difetti più grandi secondo me sono principalmente le prestazioni e poi la mancanza di un IDE completo (magari senza bug) che integri anche un designer di interfacce.
Personalmente mi trovo benissimo con NetBeans (6.9.1), e tra l'altro ho apprezzato moltissimo gli ultimi aggiornamenti che mi consentono di vedere le modifiche effettuate tramite SVN.
E' anche vero che con PyQt scrivere l'interfaccia manualmente non è un grosso sforzo, ma alla lunga si sente.
Scusami, ma se usi Qt lo sforzo per disegnare la GUI non è lo stesso per tutti i linguaggi? Per il binding, poi, dovrebbe essere più semplice con Python.
C'è da dire che spiazza un po' chi ha esperienza di linguaggi C++/Java, dove magari si è un po' più attenti alle prestazioni e quindi si è tentati di fare delle pseudo-ottimizzazioni poco inclini alla natura di python (spesso partendo da premesse sbagliate).
Verissimo, ma penso che, magari in misura diversa, sia lo stesso per tutti linguaggi: ognuno ha le sue caratteristiche peculiari e bisogna entrare nella mentalità giusta per sfruttarlo come si deve.
Certo, con linguaggi come Python lo si sente molto di più proprio perché abbastanza diverso da quelli a cui siamo stati abituati.
Nell'approccio alla risoluzione dei problemi mi rendo conto che ho una visione molto diversa da quella che avevo prima.
banryu79
11-01-2011, 15:14
Personalmente mi trovo benissimo con NetBeans (6.9.1), e tra l'altro ho apprezzato moltissimo gli ultimi aggiornamenti che mi consentono di vedere le modifiche effettuate tramite SVN.
A proposito di IDE per Python, le funzionalità di refactoring sono adeguate alle esigenze che ti possono capitare, nella tua esperienza?
cdimauro
11-01-2011, 21:28
Nella mia esperienza sì, per l'uso che ne faccio sono sufficienti, ma oggettivamente le funzionalità esposte sono poche e andrebbero ampliate.
In ogni caso c'è da dire che tirare fuori strumenti di rifattorizzazione che tenga fermamente fede a questo nome è difficile in Python, perché si tratta di un linguaggio dinamico.
Me ne sono accorto nel tempo: più sono passato a utilizzare la sua dinamicità, e più le righe "segnate in rosso" (presunti errori) sono aumentate, pur essendo i sorgenti sicuramente corretti.
E' il prezzo da pagare per ottenere una produttività elevata. D'altra parte NetBeans ha pure un buon supporto per lo unit testing in Python, per cui il lapis della maestra non mi preoccupa più di tanto. :p
Alekinos
11-01-2011, 23:28
Bene,
sono contento di aver avviato una discussione utile e, spero, interessante. Grazie a tutti voi, con particolare riguardo a Mauro, e permettetemi di dedicarvi Five to One dei mitici Doors che sto ascoltando mentre vi scrivo :D
Aggiungo, a titolo informativo, una notizia ricevuta poco fa che risulterà utile agli utenti MacOS:
I possessori di un melacomputer interessati al Python, oltre che provare i vari editor disponibili in rete, possono compilarlo tranquillamente dal terminale (ovviamente tramite interfaccia a riga di comando) digitando il comando python. Questo discorso vale per le versioni di Leopard dalla 10.2 in poi.
cdimauro
12-01-2011, 07:15
Ehm, mi chiamo Cesare, non Mauro. :D
Su snow leopard c'è python 2.6 non il 3.0...e ovviamente puoi fare tutto da terminale :)
Un piccolo consiglio da nabbo quale sono : dai una occhiata anche a ruby,sempre incluso in macosx...ha sintassi molto più simile alla lingua naturale,manca di indentazione obbligatoria ed soprattutto è usato in ruby on rails per la programmazione (veramente easy e model-view-controller) per il web
Ci ho fatto un piccolo portale per il lavoro e dopo 2 giorni era finito...ero scandalizzato da quanto è stato facile.
Poi ho provato a fare la stessa cosa con django (che usa python) e mi è venuto male :) (a parte l'admin automatica che è incredibile)
Ma penso che la cosa si possa applicare a tutti i framework al di là di rails ahaha
Personalmente mi trovo benissimo con NetBeans (6.9.1), e tra l'altro ho apprezzato moltissimo gli ultimi aggiornamenti che mi consentono di vedere le modifiche effettuate tramite SVN.
Si però ad esempio sotto Linux NetBeans fa un po' le bizze, il debugger anche fa un po' i capricci (oltre ripeto ad non avere un GUI editor integrato pensato per Python).
Scusami, ma se usi Qt lo sforzo per disegnare la GUI non è lo stesso per tutti i linguaggi? Per il binding, poi, dovrebbe essere più semplice con Python.
Quello che intendo dire è che si sente la mancanza di un IDE pensato appositamente per disegnare le GUI e programmare in Python, come ad esempio può essere Visual Studio per C# e NetBeans per Java (tramite Matisse).
Questo anche perché C# e Java hanno delle librerie grafiche ben più utilizzabili di quelle fornite di default da Python, che ti costringe a rivolgerti a librerie di terze parti come le Qt (seppur ottime IMHO).
cdimauro
12-01-2011, 18:14
Ho capito, e concordo. Non ho usato NetBeans su Linux, per cui non ti so dire.
Riguardo al debugger, ho usato quello di Eclipse +PyDev, ma soltanto un paio di volte ed era ottimo. Per il resto preferisco nettamente lo unit testing e qualche print dove serve.
Si però ad esempio sotto Linux NetBeans fa un po' le bizze, il debugger anche fa un po' i capricci (oltre ripeto ad non avere un GUI editor integrato pensato per Python)
Mai avuto problemi io sotto GNU/Linux :O anche perché essendo in Java e la JVM la medesima di Sun...ops, Oracle il prodotto è il medesimo :eek:.
Per il resto quoto Cesare.
:sofico:
Alekinos
12-01-2011, 19:25
Ehm, mi chiamo Cesare, non Mauro. :D
infatti non ce l'avevo con te :D sherzo :Prrr:
Su snow leopard c'è python 2.6 non il 3.0...e ovviamente puoi fare tutto da terminale
Un piccolo consiglio da nabbo quale sono : dai una occhiata anche a ruby,sempre incluso in macosx...ha sintassi molto più simile alla lingua naturale,manca di indentazione obbligatoria ed soprattutto è usato in ruby on rails per la programmazione (veramente easy e model-view-controller) per il web
Sulla distro xcode di leopard Python è supportato in parte, per eseguirlo bisogna comunque ricorrere al terminale.
Si, mi sono imbattuto nel ruby parecchie volte, pare interessante. Magari, se ti va possiamo approfondire il discorso in un altro thread senza rischiare di andare ot.
Quello che intendo dire è che si sente la mancanza di un IDE pensato appositamente per disegnare le GUI e programmare in Python
Quindi, tirando le somme, è un linguaggio veloce grazie alla semplicità della sua sintassi ma poco supportato?
cdimauro
12-01-2011, 20:51
No, supporto ne trovi abbastanza, e in continuo miglioramento (grazie alla diffusione sempre più elevata, e un'ottima comunità che ci sta dietro).
Semplicemente a livello di interfaccia grafica non c'è un supporto "standard" (o di serie che dir si voglia), come invece avviene con altri linguaggi (i già citati C# e Java).
Per cui si deve ricorrere integrando strumenti di terzi parti. Ma l'importante è che ci siano, in fin dei conti. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.