python tips tricks

Download Python Tips Tricks

Post on 17-Jul-2015

45 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Python Tips & Tricks

by Italian Python User Grouphttp://www.italianpug.org

26 dicembre 2005

1

Indice1 Prefazione 2 Tipi di dati e oggetti 2.1 Un aiuto rapido: help() & dir() . . . . . . . . . . . . . . . . 2.2 Il tipo di dato char (carattere) . . . . . . . . . . . . . . . . . 2.3 Numeri e valori booleani . . . . . . . . . . . . . . . . . . . . 2.3.1 Cosa 0, cosa 1 . . . . . . . . . . . . . . . . . . . . . e 2.3.2 Potenza di un numero . . . . . . . . . . . . . . . . . 2.3.3 Come creare un numero random . . . . . . . . . . . . 2.3.4 Approssimare un numero . . . . . . . . . . . . . . . . 2.3.5 True o not(True) . . . . . . . . . . . . . . . . . . . . 2.3.6 Operazioni con i numeri complessi . . . . . . . . . . . 2.4 Stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Template di stringhe . . . . . . . . . . . . . . . . . . 2.4.2 Sostituire una stringa con unaltra . . . . . . . . . . . 2.4.3 Pulizia stringhe . . . . . . . . . . . . . . . . . . . . . 2.4.4 Come ordinare una stringa . . . . . . . . . . . . . . . 2.4.5 Invertire una stringa . . . . . . . . . . . . . . . . . . 2.5 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Iterare allincontrario . . . . . . . . . . . . . . . . . . 2.6 Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Creare generatori con yield . . . . . . . . . . . . . . . 2.6.2 Funzioni semplici al volo: Lambdas . . . . . . . . . . 2.7 Classi, variabili e moduli . . . . . . . . . . . . . . . . . . . . 2.7.1 Variabili globali . . . . . . . . . . . . . . . . . . . . . 2.7.2 Accesso dinamico al nome delle variabili . . . . . . . 2.7.3 Inheritance dinamica di classi . . . . . . . . . . . . . 2.7.4 Importare moduli dinamicamente . . . . . . . . . . . 2.7.5 Estendere lassegnazione, lettura e cancellazione di un oggetto . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.6 Aggiungere la funzionalit di iteratore ad una classe . a 2 5 7 7 8 9 9 10 11 12 14 17 17 17 18 19 20 21 22 22 22 22 24 25 25 26 28 30

. . . . . . . . . . . . . . . . . . . . . . . . .

. 31 . 32

3 Console e I/O 3.1 Come togliere la newline dalla funzione print() . . . 3.2 Pulire lo schermo . . . . . . . . . . . . . . . . . . . 3.3 Come catturare loutput di un comando avviato con 3.4 Misurare un le a crudo . . . . . . . . . . . . . . 4 Sockets 4.1 Stream sockets . . . . . . . . . . . . . . . . . . 4.1.1 Listen su pi porte e un unico obiettivo . u 4.1.2 Indirizzo in uso e socket chiusa . . . . . 4.1.3 IPC con le socket in dominio UNIX . . . 4.2 World Wide Web . . . . . . . . . . . . . . . . . 4.2.1 Webserver senza les . . . . . . . . . . . 4.2.2 Ricavare il nome di un webserver al volo 4.2.3 Download con urllib . . . . . . . . . . .

. . . . . . . . . . python . . . . .

. . . .

36 36 37 37 38 40 40 40 42 42 44 44 47 48

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

5 DataBases 50 5.1 Accesso immediato e niente SQL . . . . . . . . . . . . . . . . 50 6 Interfaccia graca 6.1 GTK . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Utilizzo dei threads . . . . . . . . . . 6.1.2 Bottone con immagine . . . . . . . . 6.1.3 Come compilare le pygtk con py2exe 6.1.4 Navigazione tab nelle GtkTreeView . 6.2 wxPython . . . . . . . . . . . . . . . . . . . 6.2.1 Graca XP con py2exe . . . . . . . . 7 Audio 7.1 Beep dallaltoparlante 52 52 52 54 55 56 58 58

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

60 . . . . . . . . . . . . . . . . . . . . . . 60

8 Compressione 62 8.1 Comprimere con bz2 . . . . . . . . . . . . . . . . . . . . . . . 62 8.2 Comprimere con zlib . . . . . . . . . . . . . . . . . . . . . . . 63 9 Crittograa 65 9.1 Uso della libreria Crypto . . . . . . . . . . . . . . . . . . . . . 65 10 Programmazione su Windows 68 10.1 Arrestare Windows XP . . . . . . . . . . . . . . . . . . . . . . 68 10.2 No more shell . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3

11 Programmazione su UNIX 71 11.1 Demonizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . 71 12 Ottimizzazione, statistica e debug 73 12.1 Libreria prole . . . . . . . . . . . . . . . . . . . . . . . . . . 73 12.2 Controllare ogni operazione . . . . . . . . . . . . . . . . . . . 74 13 Decorazioni e vari trucchetti utili 13.1 Aggiungere e togliere elementi da un list con > 13.2 Da stringa a comando py: eval() . . . . . . . . . . . . 13.3 Coding delle funzioni . . . . . . . . . . . . . . . . . . 13.4 For, non fermiamoci alle apparenze . . . . . . . . . . 13.5 CongParser per i propri cong les . . . . . . . . . . 13.6 Come identicare il Sistema Operativo . . . . . . . . 13.7 Caricamento moduli da una cartella non predenita . 13.8 Commenti su pi righe . . . . . . . . . . . . . . . . . u 13.9 Questione di switch . . . . . . . . . . . . . . . . . . . 13.10Dividisioni perfette . . . . . . . . . . . . . . . . . . . 13.11Creare funzioni in runtime . . . . . . . . . . . . . . . 76 76 78 79 81 82 83 84 85 86 86 87

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

14 Stile di programmazione 89 14.1 Incongruenze tra moduli e variabili . . . . . . . . . . . . . . . 89 15 Note nali 16 Autori 17 Indice analitico A The GNU General Public License 90 91 92 95

4

Capitolo 1 PrefazioneLicenseThis work is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This work is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You can nd a copy of the GNU General Public License version 2 at Appendix A.

Introduzione al CookBookQuesto cookbook fornisce tips & tricks di varia natura, forniti direttamente dagli utenti IPUG (Italian Python User Group). Molti sono i motivi che ci hanno spinto a creare questo genere di documento, a partire dalla forza di collaborazione del nostro gruppo alla passione e alla voglia di far contribuire in un unico progetto ogni persona della community italiana sul Python. Molte volte i programmatori hanno bisogno di eettuare operazioni semplice e veloci che facciano al proprio caso, in modo da aggirare e rendere pi` chiaro u una parte di codice complessa. 5

Ci si trova quindi in condizioni di dover chiedere e ricercare nella rete anche piccolezze che per` possono salvare il programmatore da varie complicazioni. o Alch` si ` deciso di istituire questo progetto, con il quale ogni membro pu` e e o suggerire dei tips e renderne partecipe lintera community. Lintento quindi ` quello di provvedere ad uno scambio di idee in modo da fornire un aiuto e reciproco tra gli sviluppatori. Ognuno pu` quindi contribuire alla realizzazione di questo progetto e contribuirne o alla sua crescita. Ci` di cui si ha bisogno ` semplicemente di qualche minuto di tempo per o e scrivere qualche riga di codice e una spiegazione semplice e chiara di un qualsiasi problema incontrato e risolto nei propri programmi. Limportante ` non dare per scontato che i propri tips siano inutili, poich` i nuovi programmatori e e Python hanno bisogno di tutti i punti di riferimento possibili per risolvere anche piccoli errori e di conseguenza sciogliere dubbi e aumentare di un pizzico lesperienza. Gli articoli possono essere piccoli e scontati ma a volte sono miniere per chi ha bisogno di uno spunto veloce e semplice su come eettuare alcune operazioni. Ora vi lascio alla lettura del cookbook, e spero con questa piccola premessa di avervi indotto a partecipare al progetto.

6

Capitolo 2 Tipi di dati e oggetti2.1 Un aiuto rapido: help() & dir()

by The One Cosa diavolo fa quella data funzione? Come si usa? Qual la funzione di quel certo metodo? e In tutti questi casi Python ci viene in aiuto con dei semplici strumenti che fanno al caso nostro. Provate a digitare help dalla riga di comando: help Type help() for interactive help, or help(object) for help about object. Loutput dice tutto. Con help potete richiedere aiuto su qualsiasi funzione/classe digitandone semplicemente il nome! help() si basa sulla variabile doc , che restituisce una documentazione breve su di una funzione/classe specica: import math print math.pow. doc pow(x,y) Return x**y (x to the power of y).

7

Restituisce in pratica la stringa di documentazione della funzione stessa, visualizzabile anche con help(math.pow). Prendiamo in considerazione la seguente funzione f(): def f(): "funzione inutile" pass print f. doc funzione inutile Come vedete la stringa funzione inutile inserita allinizio della funzione viene usata come docstring in doc Ora la funzione help() ha anche altri pregi, ad es. quello di poter visualizzare la documentazione di un modulo senza importarlo, racchiudendo il nome del modulo tra gli apici: help(math). Inne, mettiamo che abbiate importato un modulo, chess, mettiamo math, o e ipotizziamo che non ricordiate quella data funzione di math che calcola il logaritmo di un numero, e supponiamo pure che non vi vada di cercare nella documentazione (sfaticati). . . Bene se da riga di comando digitate: import math dir(math) Vi verranno elencate tutte le funzioni del modulo. . . mica male eh?

2.2

Il tipo di dato char (carattere)

by Lethalman Vi sarete chiesti come mai in Python non vi il tipo di dato