Source :::: http://www.swaroopch.com/notes/python/#translation_howto
Un byte di Python
Swaroop C H[email protected]
Tabella dei Contenuti
- Welcome
- Dedication
- Preface
- Introduction
- Installation
- First Steps
- Basics
- Operators and Expressions
- Control Flow
- Functions
- Modules
- Data Structures
- Problem Solving
- Object Oriented Programming
- Input and Output
- Exceptions
- Standard Library
- More
- What Next
- Appendix: FLOSS
- Appendix: Colophon
- Appendix: History Lesson
- Appendix: Revision History
- Translations
- Translation Howto
“un Byte di Python è un libro gratuito sulla programmazione con il linguaggio Python. Essa serve come un tutorial o guida per il linguaggio Python per un principiante di pubblico. Se tutti voi sapete circa il computer è il modo per salvare i file di testo, allora questo è il libro che fa per voi.
1.1. Who reads A Byte of Python?
Qui sono che cosa la gente sta dicendo circa il libro:
Questo è il miglior principiante tutorial che io abbia mai visto! Vi ringrazio per il vostro impegno.
La cosa migliore che ho trovato è stato “un Byte di Python”, che è semplicemente un libro brillante per un principiante. Si tratta di ben scritta, i concetti sono ben spiegati con evidente esempi.
Dolce eccellente introduzione alla programmazione #Python per principianti
Migliore guida newbie a python
Inizio ad amare python con ogni singola pagina letta
Una perfetta guida dei principianti per python, darà il tasto u per sbloccare il magico mondo di python
– Dilip
Vorrei fare le mie attuali “lavoro” ma appena trovato “un Byte di Python”. Una grande guida con ottimi esempi.
Recentemente ha iniziato la lettura di un Byte di python. Fantastico lavoro. e che troppo gratuitamente. Altamente raccomandato per aspiranti pythonistas.
– Mangesh
Un byte di Python, scritto da Swaroop. (Questo è il libro che sto leggendo). Probabilmente il migliore per cominciare, e probabilmente il migliore del mondo per ogni novizio o anche più di un utente esperto.
Godendo la lettura #ByteOfPython da @swaroopch miglior libro mai
Vi ringrazio tanto per la scrittura di un Byte di Python. Ho appena iniziato ad apprendere come codice due giorni fa e sto già costruendo alcuni semplici giochi. La vostra guida è stato un sogno e volevo solo farti sapere quanto prezioso è stato.
– Franklin
Sto da Dayanandasagar College di Ingegneria (7° sem, CSE). In primo luogo voglio dire che il tuo libro “il byte di python” è troppo buono un libro per un principiante in python come me.i concetti sono così ben spiegato con semplici esempi che mi ha aiutato a imparare facilmente il python. Vi ringrazio tanto.
– Madhura
Io sono un 18 anni studente presso una università in Irlanda. Vorrei esprimere la mia gratitudine a voi per iscritto il tuo libro “Un byte di Python”, ho già avuto conoscenza di 3 programmazione langagues – C, Java e Javascript e Python è stata di gran lunga la più facile langague che io abbia mai imparato e che è stato principalmente perché il tuo libro è stato fantastico e reso learning python molto semplice ed interessante. Si tratta di uno dei migliori scritti e facile da seguire la programmazione i libri che ho mai letto. Congratulazioni e conservare il grande lavoro.
– Matt
Ciao, sto dalla Repubblica Dominicana. Il mio nome è Pavel, di recente ho letto il tuo libro un Byte di Python e considero ottima!! :). Ho imparato molto da tutti gli esempi. Il tuo libro è di grande aiuto per i neofiti come me…
Io sono uno studente dalla Cina, ora ,ho letto si prenota un byte di Python, Oh è bello. Il libro è molto semplice ma che può aiutare tutti i primi learnners. Sapete io sono interessanti in Java e il cloud computing molte volte, ho a codifica programm per il server, quindi penso che python è una buona scelta, terminare il tuo libro, penso proprio che non solo una buona scelta la sua deve usare il Python. Il mio inglese non è molto bene, l’e-mail a voi, i Just wanna grazie! Auguri per voi e la vostra famiglia.
– Roy Lau
Di recente ho finito di leggere il byte di Python, e ho pensato che dovrebbe davvero grazie. Ero molto triste per raggiungere le pagine finali come ho ora di tornare a opaco, noioso o oreilly ecc. MANUALI per imparare Python. Comunque, ho veramente apprezzato il tuo libro.
Cari Swaroop, sto prendendo una classe da un istruttore che non ha alcun interesse nell’insegnamento. Stiamo utilizzando Learning Python, seconda edizione, di O’Reilly. Non è un testo per principianti senza alcuna conoscenza di programmazione e di un istruttore che deve essere lavorato in un altro campo. La ringrazio molto per il tuo libro, senza di esso sarei clueless su Python e la programmazione. Un milione di grazie, siete in grado perinterrompere il messaggio verso un livello che i principianti possono comprendere e non tutti possono.
Io amo il tuo libro! È il più grande Python tutorial mai e un riferimento estremamente utile. Brillante, un vero capolavoro! Mantenere il buon lavoro!
– Chris-André Sommerseth
Prima di tutto voglio dire grazie a voi per questo greate libro. Penso che sia un buon libro per coloro che sono in cerca di un principiante tutorial per Python.
Si tratta di circa due o vi anni fa, credo, quando in primo luogo ho sentito parlare di questo libro. In quel momento, io non sono in grado di leggere qualche libro in inglese ancora, così ho avuto una traduzione cinese, che mi ha portato nel gate di programmazione Python.
Di recente ho riletto questo libro. Questo tempo, naturalmente, la versione in lingua inglese. Non potevo credere che io possa leggere il tutto senza il mio dizionario a portata di mano. Naturalmente, tutti i canoni per il vostro sforzo per rendere questo libro un facile da capire.
– myd7349
Sto solo l’invio di messaggi e-mail per ringraziarvi per la scrittura di byte di Python online. Mi era stato il tentativo Python per un paio di mesi prima di incrociare il tuo libro, e anche se ho fatto un successo limitato con pyGame, non ho mai portato a termine un programma.
Grazie al vostro semplificazione delle categorie, Python effettivamente sembra un obiettivo raggiungibile. Sembra che finalmente ho imparato le basi e posso continuare nel mio vero obiettivo, lo sviluppo di giochi.
…
Ancora una volta, Grazie molto per porre tali una strutturata e utile guida alla programmazione di base sul web. Essa mi ha spinto dentro e fuori della OOP con una comprensione in cui due libri di testo non era riuscita.
Vorrei ringraziarti per il tuo libro un Byte di Python che io stesso a trovare il modo migliore per imparare Python. Io sono un ragazzo quindicenne io vivo in Egitto il mio nome è Ahmed. Python è stata la mia seconda lingua di programmazione ho imparare visual basic 6 a scuola ma non godere di esso, però mi sono davvero divertito learning python. Ho fatto il programma addressbook e mi è stato apprezzabile. cercherò per iniziare a rendere più programmi e leggere i programmi python (se si poteva dire di me fonte che sarebbe utile). Mi permetterà anche di avviare sull apprendimento di java e se potete dirmi dove trovare un tutorial come buono come la vostra per java che aiuterebbe molto a me. Thanx.
Una meravigliosa risorsa per i principianti che vogliono saperne di più su Python è il 110-pagina tutorial PDF di un Byte di Python Swaroop C H. è ben scritto e facile da seguire e può essere la migliore introduzione alla programmazione Python disponibile.
Ieri ho ricevuto attraverso la maggior parte dei byte di Python per il mio Nokia N800 ed è il modo più semplice e concisa introduzione a Python non ho ancora incontrato. Altamente raccomandato come un punto di partenza per imparare Python.
Il byte di vim e Python da @swaroopch è di gran lunga il miglior opere in scrittura tecnica a me. Ottima legge #FeelGoodFactor
“Byte di python” uno migliore di gran lunga l’uomo
(in risposta alla domanda “chi può suggerire una buona risorsa economica per apprendere le nozioni fondamentali di Python? “)
Il Libro Byte di python è stata molto disponibile ..Grazie bigtime 🙂
– Chinmay
Sempre stato un fan di un Byte di Python – realizzato per entrambi i nuovi e programmatori esperti.
Ho iniziato a imparare Python pochi giorni fa dal vostro libro..grazie per questi un bel libro. È così ben scritta, hai reso la mia vita facile..in modo che avete trovato una nuova ventola del tuo..thats me 🙂 tonnellate di grazie.
Prima ho iniziato a imparare Python, ho acquisito la programmazione di base di competenze nell’assemblaggio, C, C++, C# e Java. Il motivo volevo imparare Python è il popolare (persone parlare di esso) e potente (realtà). Questo libro scritto dal sig. Swaroop è una buona guida per entrambi i brand-new programmatori e nuovi programmatori Python. Preso 10 mezze giornate di passare attraverso di esso. Grande aiuto!
– Fang Biyi (PhD Candidate ECE, Michigan State University)
Ringrazio sempre tanto per questo libro!!
Questo libro cancellata fino a molte domande che ho avuto circa taluni aspetti di Python come la programmazione orientata agli oggetti.
Non mi sento come un esperto a OO ma so che questo libro mi ha aiutato a su un primo passo o due.
Ora ho scritto diversi programmi Python che effettivamente fare cose reali per me come un amministratore di sistema. Essi sono tutti orientati procedurali ma sono piccole per la maggior parte dei popoli standard.
Ancora grazie per questo libro. La ringrazio per averlo sul web.
– Bob
Voglio soltanto ringraziarvi per la scrittura del primo libro sulla programmazione che io abbia mai letto davvero. Python è ora la mia prima lingua e posso solo immaginare tutte le possibilità. Quindi la ringrazio per avermi dato gli strumenti per creare le cose che non ho mai avrebbe immaginato che potevo fare prima.
– il Tricheco !
Volevo ringraziarvi per la scrittura di un Byte di Python (2 & 3 versioni). Esso è stato inestimabile per la mia esperienza di apprendimento in Python & programmazione in generale.
Inutile dire che io sono un principiante nel mondo della programmazione, un paio di mesi di studio autonomo fino a questo punto. Mi era stato utilizzando youtube tutorial e alcuni altri tutorial online inclusi altri libri gratuiti. Ho deciso di scavare nel tuo libro ieri e ho imparato di più sulle prime pagine rispetto a qualsiasi altro libro o tutorial. Un paio di cose che mi erano stati confusi circa, sono stati liquidati a destra con un ottimo esempio e spiegazione. Non vedo l’ora di leggere (e) imparare di più!!
Vi ringrazio tanto per non solo per scrivere il libro, ma per metterlo sotto la licenza creative commons (gratuito). Per fortuna ci sono altruisti persone come voi là fuori per aiutare e insegnare il resto di noi.
– Chris
Vi ho scritto indietro nel 2011 e mi è stato appena ottenere in Python e volevo ringraziarla per il tuo tutorial “un Byte di Python”. Senza di essa, mi sarebbe caduto nel dimenticatoio. Da allora ho continuato a programmare un numero di funzioni nella mia organizzazione con questa lingua con ancora più all’orizzonte. Non vorrei chiamare personalmente un programmatore avanzate da qualsiasi tratto ma ho notato che la richiesta di occasionale per assistenza ora da altri in quanto ho iniziato ad usarlo. Ho scoperto, durante la lettura di “byte” perché avevo smesso di studiare C e C[]+ ed era perché il libro dato a me ha cominciato fuori con un esempio contenente un’aumentata assegnazione. Naturalmente, non vi era alcuna spiegazione per questa disposizione degli operatori e caddi sulla mia testa cercando di dare un senso a ciò che è stato sulla pagina scritta. Come ricordo è stato molto frustrante esercizio che alla fine ho abbandonato. Non significa C o C+ è impossibile imparare, o addirittura che io sono stupido, ma questo non significa che la documentazione ho lavorato la mia strada attraverso non definire i simboli e parole che è una parte essenziale di ogni istruzione. Proprio come i computer non saranno in grado di capire una parola computer o simbolo di computer che viene fuori la sintassi per la lingua utilizzata, uno studente di nuovo a qualsiasi campo non afferrare il suo oggetto se egli incontra le parole o i simboli per i quali non esistono definizioni. Si ottiene una “schermata blu” come lo sono state in ogni caso. La soluzione è semplice, però: trovare la parola o simbolo e ottenere la corretta definizione o il simbolo ed ecco,il computer o lo studente può procedere. Il tuo libro era così ben messo insieme che ho trovato molto poco in esso non potevo afferrare. Così vi ringrazio. Vi incoraggio a continuare a includere tutte le definizioni di termini. La documentazione con Python è buona, una volta che si conosce, (gli esempi sono la sua forza da ciò che vedo) ma in molti casi sembra che dovete conoscere per poter comprendere la documentazione che a mio parere non è quello che dovrebbe essere. Terzo tutorial esprimono la necessità di un chiarimento della documentazione e il loro successo dipende in gran parte dalla parole che vengono utilizzate per descrivere la terminologia. Ho raccomandato il vostro libro per molti altri. Alcuni in Australia, alcuni nei Caraibi e in altri ancora in noi. Si riempie una nicchia non fanno gli altri. Mi auguro che si stanno facendo bene e vi auguriamo tutto il successo in futuro.
– Nick
Hey, questo è ankush(19). Mi è stata rivolta una grande difficoltà di iniziare con Python. Ho provato un sacco di libri ma tutti erano più ingombrante e non orientato al bersaglio; e poi ho trovato questo grazioso uno che mi ha fatto amare python in nessun tempo. Grazie mille per questo “bel pezzo di libro”.
– Ankush
Vi ringrazio per la vostra eccellente guida su Python. Io sono un biologo molecolare (con poco di programmazione background) e per il mio lavoro ho bisogno di gestire grandi insiemi di dati di sequenze di DNA e per analizzare le immagini al microscopio. Per entrambe le cose, Programmazione in Python è stata utile, se non indispensabile per completare e pubblicare un 6 anni di progetto.
Che una tale guida è liberamente disponibile è un chiaro segno che le forze del male non sono ancora pregiudiziale il mondo! 🙂
– Luca
Dato che questo sta andando essere la prima lingua si impara, si dovrebbe utilizzare un byte di Python. Esso offre veramente una corretta introduzione nella programmazione in Python ed è stimolato abbastanza bene per la media dei principianti. La cosa più importante da allora in poi sarà effettivo avvio alla pratica rendendo il vostro piccolo programmi.
Solo per dire un forte e felice la ringrazio molto per la pubblicazione di “un Byte di Python” e “un Byte di Vim”. Questi libri sono stati molto utili per me quattro o cinque anni fa quando ho iniziare imparare la programmazione. Proprio ora sto sviluppando un progetto che è stato un sogno per un lungo tempo e vogliono solo dire grazie. Continuate a camminare. Si sono una fonte di motivazione. Tutti i migliori.
– Jocimar
Terminata la lettura di un byte di Python in 3 giorni. È estremamente interessante. Non una sola pagina è stato noioso. Voglio capire l’Orca screen reader codice. Il tuo libro è auspicabilmente dotate di me.
– Dattatray
Ciao, ‘un byte di python’ è davvero una buona lettura per python principianti. Ancora una volta, bel lavoro!
Io sono un 4 anni esperti di Java&C sviluppatore dalla Cina. Recentemente, voglio fare un certo lavoro su zim-wiki progetto nota che utilizza pygtk per implementare.
Ho letto il tuo libro in 6 giorni e posso leggere e scrivere codice Python esempi ora. Grazie per il tuo contributo. Plz mantenere il vostro entusiasmo per rendere questo mondo migliore, questo è solo un po’ incoraggiare dalla Cina. Il tuo reader Lee
– LEE
Mi è lievitato da Taiwan, che è una laurea studente di dottorato di ricerca in Ingegneria Elettrica Dipartimento del National Taiwan University. Vi ringrazio per la vostra grande libro. Penso che non solo non è facile da leggere ma anche e completa e totale per un nuovo angolo di Python. Il motivo per cui ho letto il tuo libro è che sto iniziando a lavorare su GNU quadro Radio. Il tuo libro permettetemi di catturare la maggior parte del importante nucleo di idee e di abilità di Python con un minimo di tempo.
Ho anche visto che non ti dispiace che i lettori di inviare una nota di ringraziamento nel vostro libro. Così mi piace molto il tuo libro e lo apprezzano. Grazie.
Il libro è anche usato dalla NASA! Esso viene utilizzato in loro Jet Propulsion Laboratory con il loro spazio profondo progetto di rete.
Questo libro è/era stato usato come materiale didattico in vari istituti di istruzione:
- I principi dei linguaggi di programmazione’ in corso ‘Vrije Universiteit, Amsterdam’
- “i concetti di base di informatica’ in corso ‘University of California, Davis’
- “Programmazione con Python’ in corso ‘Harvard University’
- “Introduzione alla programmazione’ in corso ‘University of Leeds’
- “Introduzione alla programmazione di applicazione’ in corso ‘Boston University’
- “Competenze informatiche per la meteorologia’ in corso ‘University of Oklahoma’
- “Geoprocessing’ in corso ‘Michigan State University’
- ‘Multi Agent Web Semantico Sistemi ” corso presso il ‘University of Edinburgh’
- “Introduzione all’informatica e la programmazione’ a ‘MIT OpenCourseWare’
- “programmazione di base presso la Facoltà di Scienze Sociali, Università di Ljubljana, Slovenia” – Aleš ŽibernaDice “Io e il mio predecessore) sono state usando il tuo libro come la principale letteratura per questo corso”
Questo libro è pubblicato sotto una licenza Creative Commons Attribution-ShareAlike 4.0 International License.
Questo significa:
- Siete liberi di condividere cioè di copiare, distribuire e trasmettere questo libro
- Siete liberi di Remix cioè di apportare modifiche a questo libro (specialmente le traduzioni)
- Siete liberi di utilizzarlo per scopi commerciali
Si prega di notare:
- Si prega di non vendere elettroniche o stampate copie del libro a meno che non si presentano in modo chiaro e visibile menzionati nella descrizione che queste copie non sono da l’autore originale di questo libro.
- Attribuzione deve essere mostrato nella descrizione introduttiva e il lato anteriore della pagina del documento mediante collegamento indietrohttp://swaroopch.com/notes/pythone che indicano chiaramente che il testo originale può essere recuperati da questa posizione.
- Tutto il codice/script forniti in questo libro è autorizzato sotto la licenza 3-clause BSD Licensese non diversamente specificato.
È possibile leggere il libro online presso http://swaroopch.com/notes/python
Una copia stampata del libro può essere acquistato presso http://swaroopch.com/buybook per il tuo offline la lettura di piacere e per sostenere il continuo sviluppo e miglioramento di questo libro.
- PDF(per desktop lettura, ecc.)
- EPUB(per iPhone/iPad, lettori di ebook, ecc.)
- Mobi (for Kindle)
- GitHub(per materie testo, traduzione, ecc.)
Se si vuole sostenere lo sviluppo continuo di questo libro, si prega di considerare buying a hardcopy.
1.7. Read the book in your native language
Se siete interessati nella lettura o contribuendo con le traduzioni di questo libro per altri linguaggi umani, si prega di vedereTranslations.
A Kalyan Varma E molti altri seniors a PESIT chi ci ha introdotto a GNU/Linux e il mondo open source.
Alla memoria di Fornitura Atul Chitnis, un amico e guida che deve essere perso notevolmente.
Per il pioneers who made the Internet happen. Questo libro è stato inizialmente scritto in 2003. Essa rimane ancora popolare, grazie alla natura della condivisione di conoscenze su Internet come previsto dai pionieri.
Python è probabilmente uno dei pochi linguaggi di programmazione che sia semplice e potente. Questa è buona per i principianti così come per i più esperti e più importante, è divertente programma con. Questo libro si propone di aiutarvi a imparare questa lingua meravigliosa e mostrare come fare le cose in modo rapido e indolore – in effetti ‘l’Anti-venom ai vostri problemi di programmazione’.
Questo libro serve come una guida o un tutorial per il linguaggio Python. Esso è principalmente destinata ai neofiti. È utile per i programmatori esperti come bene.
Lo scopo è che se tutti sapete circa il computer è il modo per salvare i file di testo e quindi si può imparare Python da questo libro. Se si dispone di precedenti esperienze di programmazione, allora si può anche imparare Python da questo libro.
Se non hanno precedenti esperienze di programmazione, si sarà interessati a le differenze tra Python e i linguaggi di programmazione preferiti – mi hanno messo in evidenza molti di tali differenze. Un piccolo avvertimento però, Python è presto diventeranno i linguaggi di programmazione preferiti!
Il sito ufficiale del libro è http://swaroopch.com/notes/python dove è possibile leggere tutto il libro online, scaricare le ultime versioni del libro, buy a printed hard copy e anche inviare feedback a me.
Ci sono due modi per costruire un software design: un modo è quello di renderlo così semplice che vi sono ovviamente no deficienze; l’altra è per renderlo così complicato che non ci sono evidenti carenze.
– C. A. R. Hoare
Il successo nella vita è una questione non tanto di talento e di opportunità come di concentrazione e di perseveranza.
– C. W. Wendte
Python è uno di quei rari lingue che possono pretendere di essere semplice e potente. Vi troverete piacevolmente sorpresi di vedere come è facile concentrarsi sulla soluzione del problema piuttosto che la sintassi e la struttura del linguaggio di programmazione in.
La presentazione ufficiale di Python è:
Python è un facile da imparare e potente linguaggio di programmazione. Esso ha un efficiente ad alto livello le strutture di dati e una semplice ma efficace approccio alla programmazione object-oriented. Python’s elegante sintassi e la tipizzazione dinamica, insieme con la sua natura interpretata, ne fanno un ideale per il linguaggio di scripting e lo sviluppo rapido di applicazioni in molti settori sulla maggior parte delle piattaforme.
Vorrei discutere la maggior parte di queste funzioni più in dettaglio nella sezione successiva.
Storia dietro il nome
Guido van Rossum, il creatore del linguaggio Python, denominata la lingua dopo la BBC visualizza “Monty Python’s Flying Circus”. A lui non piace particolarmente serpenti che uccidono gli animali per il cibo avvolgendo i loro corpi lunghi intorno a loro e li di frantumazione.
Semplice
Python è un semplice e linguaggio minimalista. La lettura di un buon programma Python si sente quasi come la lettura in inglese, anche se molto rigorosa inglese!!! Questo pseudo-codice natura di Python è uno dei suoi maggiori punti di forza. Esso consente di concentrarsi sulla soluzione del problema piuttosto che il linguaggio stesso.
Facile da imparare
Come si vedrà, Python è estremamente facile da ottenere cominciato con. Python ha un straordinariamente semplice sintassi, come già accennato.
Gratuito e Open Source
Python è un esempio di un filo interdentale (libero/Libré e Software Open Source). In termini semplici, è possibile distribuire liberamente le copie di questo software, leggere il suo codice sorgente, apportare modifiche ad esso e utilizzare parti di esso in nuovi programmi liberi. Il filo interdentale è basato sul concetto di una comunità che condivide la conoscenza. Questo è uno dei motivi per cui Python è così buona – è stato creato ed è costantemente migliorato da una comunità che vuole solo vedere una migliore Python.
In un linguaggio di alto livello
Quando si scrivere programmi in Python, non si avrà mai bisogno di preoccuparsi circa la i dettagli di basso livello come la gestione della memoria utilizzata dal vostro programma, etc.
Portable
A causa della sua open-source di natura, Python è stato trasferito a (cioè modificato per farlo funzionare su) molte piattaforme. Tutti i tuoi programmi Python possono lavorare su una qualsiasi di queste piattaforme senza richiedere modifiche a tutti se siete abbastanza cauti per evitare qualsiasi dipendente dal sistema funzioni.
È possibile usare Python su GNU/Linux, Windows, FreeBSD, Macintosh, Solaris OS/2, Amiga, AROS, AS/400, BeOS, OS/390, z/OS, Palm OS QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE e PocketPC!
È possibile anche utilizzare una piattaforma come Kivy Per la creazione di giochi per il computer e per iPhone, iPad e Android.
Interpretato
Questo richiede un po’ di spiegazione.
Un programma scritto in un linguaggio compilato come C o C[]+ viene convertito dalla lingua di origine ovvero C o C+ in una lingua che è parlata da computer (codice binario cioè 0s e 1s) utilizzando un compilatore con vari flag e opzioni. Quando si esegue il programma, il linker/caricatore copie del software il programma dal disco fisso alla memoria e inizia l’esecuzione.
Python, d’altro canto, non ha bisogno di compilazione a binario. È sufficiente eseguire il programma direttamente dal codice sorgente. Internamente, Python converte il codice sorgente in un modulo intermedio chiamato bytecodes e quindi traduce questo nella lingua nativa del computer e poi ce ne corre. Tutto questo, effettivamente, rende utilizzando Python molto più semplice poiché non devi preoccuparti di compilazione del programma, assicurandosi che il corretto le librerie sono legati e caricato, ecc. Anche questo rende il tuo programmi Python molto più portatile, poiché è possibile solo copiare il vostro programma Python su un altro computer e funziona!
Object Oriented
Python supporta la procedura di programmazione orientato come pure programmazione object-oriented. Nella procedura-lingue orientate, il programma è costruito attorno a procedure o funzioni che non sono niente ma pezzi riutilizzabili dei programmi. In linguaggi object-oriented, il programma è costruito intorno a oggetti che combinano dati e funzionalità. Python ha una molto potente ma semplicistico modo di fare OOP, soprattutto se paragonato ai grandi lingue come il C++ o Java.
Extensible
Se avete bisogno di un pezzo di critica del codice da eseguire molto velocemente o si desidera avere qualche pezzo di algoritmo non deve essere aperto, è possibile scrivere il codice che parte del vostro programma in C o C\++ e quindi utilizzarlo dal vostro programma Python.
Integrabili
È possibile incorporare Python entro il vostro C/C\++ programmi per fornire capacità di scripting per il vostro programma di utenti.
Librerie estese
Il Python la libreria standard è davvero enorme. Essa può aiutare a fare varie cose che coinvolgono le espressioni regolari,per la generazione della documentazione, unit test, filettatura, database, web browser, CGI, FTP, e-mail, XML, XML-RPC, HTML, file WAV, la crittografia, la GUI (graphical user interface), e altri dipendono dal sistema roba. Ricordate, tutto questo è sempre disponibile ovunque Python è installato. Questo è chiamato il batterie incluse la filosofia di Python.
Oltre alla libreria standard, vi sono vari altri di alta qualità le librerie che si possono trovare in corrispondenza di Python Package Index.
Sommario
Python è un infatti un eccitante e potente linguaggio. Esso ha la giusta combinazione di prestazioni e caratteristiche che facilitano la scrittura di programmi in Python sia semplice e divertente.
È possibile ignorare questa sezione se non sei interessato a la differenza tra “Python versione 2” e “Python versione 3”. Ma la prego di non essere a conoscenza di quale versione si utilizza. Questo libro è scritto per Python 2.
Ricordate che una volta che hai capito correttamente e imparare a utilizzare una versione, si può facilmente imparare le differenze e utilizzare l’altra. La parte difficile è imparare la programmazione e la comprensione dei concetti base del linguaggio Python stesso. Questo è il nostro obiettivo in questo libro, e una volta raggiunto questo obiettivo, è possibile utilizzare facilmente Python 2 o Python 3 a seconda della situazione.
Per informazioni dettagliate sulle differenze tra Python 2 e Python 3, vedere:
Si possono trovare interessante leggere cosa grande hacker come ESR hanno da dire su Python:
- Eric S. Raymond è l’autore di “La Cattedrale e il Bazaar” ed è anche la persona che ha coniato il termine Open Source. Egli dice che Python has become his favorite programming language. Questo articolo è stato la vera fonte di ispirazione per il mio primo spazzolino con Python.
- Bruce Eckel è autore del famoso “Pensare in Java ” e ” pensando in C++’ libri. Egli afferma che nessuna lingua ha fatto di lui più produttive di Python. Egli dice che Python è forse la sola lingua che si concentra su come rendere le cose più facili per il programmatore. Leggere il complete interviewper ulteriori dettagli.
- Peter Norvig è un ben noto autore Lisp e direttore della qualità della ricerca a Google (grazie a Guido van Rossum per la segnalazione). Egli dice che writing Python is like writing in pseudocode. Egli dice che Python è sempre stata parte integrante di Google. È possibile verificare questa affermazione guardando la Google Jobspagina che elenca Python conoscenza come un requisito per ingegneri del software.
- Installation
Quando ci si riferisce a “Python 2” in questo libro, si farà riferimento per qualsiasi versione di Python uguale o maggiore rispetto alla versione2.7.
Visitare il sito Web https://www.python.org/downloads/ e scaricare la versione più recente. L’installazione è proprio come qualsiasi altro software basato su Windows.
Attenzione | Quando ti viene data la possibilità di deselezionare qualsiasi “opzionale” componenti, non deselezionare qualsiasi. |
Se si desidera essere in grado di usare Python dalla linea di comando di Windows cioè il prompt di DOS, quindi è necessario impostare la variabile PATH in modo appropriato.
Per Windows 2000, XP, 2003 , fare clic su Pannello di controllo → Sistema → Advanced → le variabili di ambiente. Fare clic sulla variabile denominata percorso in variabili di sistema sezione , quindi selezionare Modifica e aggiungere ;C:\Python27 (si prega di verificare che questa cartella esiste, sarà diverso per le versioni più recenti di Python) al fine di ciò che è già lì. Naturalmente, utilizzare la directory appropriata nome.
Per le versioni più vecchie di Windows, aprire il file C:\file AUTOEXEC.BAT e aggiungere la riga PATH=%PATH%;C:\Python33 e riavviare il sistema. Per Windows NT, utilizzare il file Autoexec.nt file.
Per Windows Vista:
- Fare clic su Start e scegliere Pannello di controllo
- Fare clic su Sistema, sulla destra vedrete “Visualizza le informazioni di base relative al computer”
- Sulla sinistra è un elenco di attività, l’ultimo dei quali è impostazioni di sistema avanzate. Fare clic su questo.
- La scheda Avanzate della finestra di dialogo Proprietà di sistema è mostrato. Fare clic su Variabili di ambiente pulsante in fondo a destra.
- Nel riquadro inferiore intitolata Le variabili di sistema scorrere verso il basso per il percorso e fare clic sul pulsante Modifica.
- Modificare il tuo percorso come necessario.
- Riavviare il sistema. Vista non ha mai preso in mano il sistema variabile di ambiente path modifica fino a quando ho riavviato.
Per Windows 7 e 8:
- Fare clic destro su Computer dal desktop e selezionare Proprietà oppure fare clic su Start e scegliere Pannello di controllo → Sistema e sicurezza → Sistema. Fare clic su Impostazioni di sistema avanzate a sinistra e fare clic sulla scheda Avanzate . In fondo fare clic su Variabili di ambiente e sotto variabili di sistema, cercare la variabile PATH, selezionare e premere Modifica.
- Andare alla fine della linea sotto il valore della variabile e aggiungere ;C:\Python27 (si prega di verificare che questa cartella esiste, sarà diverso per le versioni più recenti di Python) al fine di ciò che è già lì. Naturalmente, utilizzare nome della cartella desiderata.
- Se il valore è stato %SystemRoot%\system32; essa diventerà ora %SystemRoot%\system32;C:\Python27
- Fare clic su OK e si è fatto. Non è necessario riavviare il sistema, tuttavia potrebbe essere necessario chiudere e riaprire la linea di comando.
5.1.2. Running Python prompt on Windows
Per gli utenti di Windows, è possibile eseguire l’interprete della riga di comando se si dispone di set the PATH variable appropriately.
Per aprire il terminale in Windows, fare clic sul pulsante Start e fare clic su Esegui. Nella finestra di dialogo digitare cmd e premere il tasto di invio.
Quindi digitare python e accertarsi che non vi siano errori.
Per gli utenti di Mac OS X, Python deve essere già installato.
Per verificare, aprire il terminale premendo Comando+Spazio tasti (per aprire Spotlight Search), tipo terminale e premere il tasto di invio. Ora eseguite python e accertarsi che non vi siano errori.
5.3. Installation on GNU/Linux
Per gli utenti di GNU/Linux, Python deve essere già installato.
Per verificare, aprire il terminale aprendo l’applicazione Terminale o premendo Alt+F2 e di immissione di gnome-terminal. Se questo non funziona, si prega di fare riferimento alla documentazione del tuo particolare distribuzione GNU/Linux. Ora eseguite python e accertarsi che non vi siano errori.
È possibile vedere la versione di Python sullo schermo eseguendo:
$ python -V Python 2.7.6
Nota | $ è il prompt della shell. Sarà diverso per te a seconda delle impostazioni del sistema operativo sul vostro computer, quindi mi indicherà il prompt da solo il simbolo $. | |
Attenzione | Uscita può essere diverso sul vostro computer, a seconda della versione del software Python installato sul vostro computer. | |
Da ora in poi, assumeremo che avete Python installato sul vostro sistema.
Prossimo scriveremo il nostro primo programma Python.
Vediamo ora come eseguire un tradizionale “Ciao Mondo”, Programma in Python. Questo vi insegnerà come scrivere, salvare ed eseguire programmi Python.
Ci sono due modi di usare Python per eseguire il programma – utilizzando l’interprete interattivo di prompt o utilizzando un file di origine. Vediamo ora come utilizzare entrambi i metodi.
6.1. Using The Interpreter Prompt
Aprire il terminale nel vostro sistema operativo (come discusso in precedenza in questo Installation capitolo) e quindi aprire il prompt di Python digitando python e premendo il tasto invio.
Una volta che hai avviato Python, si dovrebbe vedere >>> dove è possibile iniziare a digitare roba. Questo è chiamato l’ interprete Python prompt.
Presso l’interprete Python prompt, digitare:
print "Hello World"
Seguito dal tasto Invio. Si dovrebbe vedere le parole Ciao mondo stampato sullo schermo.
Qui è un esempio di ciò che si dovrebbe vedere, quando si utilizza un computer Mac OS X. I dettagli circa il software Python sarà diverso basato sul vostro computer, ma la parte dal prompt (ossia da >>> in poi) dovrebbe essere la stessa indipendentemente dal sistema operativo.
$ python Python 2.7.6 (default, Feb 23 2014, 16:08:15) [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print "hello world" hello world >>>
Avviso che Python ti dà l’uscita della linea immediatamente!!!! Ciò che avete appena inserito è una singola istruzione di Python. Usiamo per stampa (unsurprisingly) stampare qualsiasi valore che potete fornire per esso. Qui, stiamo fornendo il testo hello world e questo viene prontamente stampato sullo schermo.
Nota | Come chiudere il prompt di interprete
Se si sta utilizzando un GNU/Linux o OS X shell, è possibile uscire dal prompt di interprete premendo ctrl+d o immettendo exit() (Nota: ricordarsi di includere le parentesi ()) seguito dal tasto Invio. Se si sta utilizzando il prompt dei comandi di Windows, premere Ctrl+z seguito dal tasto Invio. |
Non possiamo digitare il nostro programma al prompt di interprete ogni volta che vogliamo lanciare qualcosa, in modo che abbiamo per salvarli in un file e può eseguire i nostri programmi un numero qualsiasi di volte.
Per creare il nostro Python file sorgente, abbiamo bisogno di un editor software in cui è possibile immettere e salvare. Un buon programmatore di editor renderà la vostra vita più facile nella scrittura del file di origine. Di conseguenza, la scelta di un editor è infatti cruciale. Dovete scegliere un editor come si dovrebbe scegliere un auto che si dovrebbe comprare. Un buon editor ti aiuterà a scrivere programmi Python facilmente, rendendo il vostro viaggio più confortevole e vi aiuta a raggiungere la vostra destinazione (raggiungere il vostro obiettivo) in un modo molto più veloce e sicuro.
Uno dei requisiti di base è di evidenziazione della sintassi in cui tutte le diverse parti del vostro programma Python sono colorato in modo che si può vedere il tuo programma e visualizzare la sua esecuzione.
Se non avete idea di dove cominciare, consiglierei utilizzando il PyCharm Educational Edition software che è disponibile per Windows, Mac OS X e GNU/Linux. Maggiori dettagli nella sezione successiva.
Se si utilizza Windows, non utilizzare Blocco note – si tratta di una cattiva scelta perché non evidenziazione della sintassi e anche importante che non supporta il rientro del testo che è molto importante nel nostro caso come vedremo in seguito. Buona redattori automaticamente farà questo.
Se sei un programmatore esperto, quindi è necessario essere già utilizzando Vim o Emacs. Inutile dire che questi sono due dei più potenti di redattori e si trarranno beneficio dal loro utilizzo per scrivere i vostri programmi Python. Io personalmente uso sia per la maggior parte dei miei programmi e hanno scritto anche un entire book on Vim.
Nel caso in cui si è disposti a prendere il tempo per imparare vim o Emacs, poi mi consiglia di fare imparare a utilizzare uno di essi come sarà molto utile per voi nel lungo termine. Tuttavia, come ho detto prima, i principianti possono iniziare con PyCharm e concentrare l’apprendimento su Python piuttosto che l’editor in questo momento.
Per ribadire, si prega di scegliere un buon editor – si può semplificare la scrittura di programmi Python più facile e divertente.
PyCharm Educational Edition È un editor gratuito che è possibile utilizzare per la scrittura di programmi Python.
Quando si apre PyCharm, vedrete questo, fare clic su Crea nuovo progetto:
Selezionare puro Python:
Modificare untitled a helloworld come l’ubicazione del progetto, si dovrebbero vedere i dettagli simile a questo:
Fare clic sul pulsante Crea.
Fare clic con il pulsante destro sul helloworld nella barra laterale e selezionare Nuovo → File Python:
Vi verrà richiesto di digitare il nome digitare hello:
Ora è possibile vedere un file aperto per voi:
Eliminare le linee che sono già presenti e ora digitare il seguente:
print "hello world"
Ora fare clic destro su ciò che si è digitato (senza selezionare il testo), e fare clic su Esegui “hello”.
Ora dovresti vedere l’uscita (cosa) stampe del vostro programma:
Phew! Che era abbastanza pochi passaggi per iniziare, ma d’ora in poi, ogni volta che vi chiediamo di creare un nuovo file, ricordarsi di basta fare clic con il pulsante destro su helloworld sulla sinistra → Nuovo → File Python e continuare la stessa procedura per digitare ed eseguire come mostrato sopra.
È possibile trovare ulteriori informazioni su PyCharm nella PyCharm Quickstart pagina.
- Installare Vim
- Mac OS X gli utenti devono installare il pacchetto macvim via HomeBrew
- Gli utenti Windows dovranno scaricare il file eseguibile di installazione automatica” da http://www.vim.org/download.php
- Per gli utenti di GNU/Linux dovrebbe ottenere Vim dalla loro distribuzione del repository di software, ad es. Debian e Ubuntu gli utenti possono installare il vim
- Installare il jedi-vimplugin per il completamento automatico.
- Installare Emacs 24.
- Gli utenti di Mac OS X dovrebbe ottenere Emacs da http://emacsformacosx.com
- Gli utenti di Windows devono ottenere Emacs da http://ftp.gnu.org/gnu/emacs/windows/
- Per gli utenti di GNU/Linux dovrebbe ottenere Emacs dalla loro distribuzione del repository di software, ad es. Debian e Ubuntu gli utenti possono installare il emacs24
- Installare ELPY.
Ora torniamo alla programmazione. Vi è una tradizione che ogni volta che potete imparare un nuovo linguaggio di programmazione il primo programma che si scrive e run è il programma ‘Hello World’ programma – tutto ciò che fa è semplicemente dire “Ciao Mondo” quando si esegue. Come Simon Cozens [1] dice, è il “tradizionale incantesimo per la programmazione dei per aiutarvi a imparare la lingua meglio”.
Iniziate la vostra scelta di editor, immettere il seguente programma e salvarlo come hello.py.
Se si sta utilizzando PyCharm, abbiamo già discussed how to run from a source file.
Per altri editor, aprire un nuovo file hello.py e tipo questo:
print "hello world"
Dove si dovrebbe salvare il file? Per qualsiasi cartella per la quale si conosce la posizione della cartella. Se non si capisce che cosa significa, creare una nuova cartella e utilizzare tale posizione per salvare ed eseguire tutti i vostri programmi Python:
- /tmp/py su Mac OS X
- /tmp/py su GNU/Linux
- C:\\py su Windows
Per creare la cartella di cui sopra (per il sistema operativo che si sta utilizzando), utilizzare il comando mkdir nel terminale, per esempio, mkdir /tmp/py.
Importante | Assicuratevi sempre di dargli l’estensione del file .py, per esempio da foo.py. |
Per eseguire il programma Python:
- Aprire una finestra di terminale (vedere Installationcapitolo precedente su come farlo)
- Cambiare directory di dove è stato salvato il file, ad esempio, cd /tmp/py
- Eseguire il programma immettendo il comando python hello.py. L’uscita è illustrato di seguito.
$ python hello.py hello world
Se si ha l’uscita come mostrato sopra, complimenti !!!! – dovrete eseguire con successo il vostro primo programma Python. Aver attraversato la parte più difficile di apprendimento della programmazione, che è, come iniziare con il tuo primo programma!
Nel caso in cui avete ottenuto un errore, si prega di digitare il programma sopra descritto esattamente come indicato sopra ed eseguire nuovamente il programma. Nota che Python è case-sensitive cioè la stampa non è la stessa come la stampa – nota il minuscolo p nell’ex e la P maiuscola in quest’ultimo. Inoltre, assicurarsi che non vi siano spazi o tabulazioni prima del primo carattere di ogni riga – vedremo why this is importantpiù avanti.
Come funziona
Un programma Python è composto di dichiarazioni. Nel nostro primo programma, abbiamo solo un’istruzione. In questa dichiarazione, che chiamiamo l’ istruzione di stampa a cui forniamo il testo “Hello world”.
Se avete bisogno di informazioni su qualsiasi funzione o istruzione in Python, quindi è possibile utilizzare la guida integrata di funzionalità. Questo è molto utile specialmente quando si utilizza l’interprete prompt. Ad esempio, eseguire help(‘len’) – Visualizza la guida per la funzione len che viene utilizzato per contare il numero di elementi.
Suggerimento | Premere q per uscire dalla guida. |
Analogamente, è possibile ottenere informazioni su quasi tutto in Python. Utilizzare la guida() per saperne di più sull’utilizzo della guida stessa!!
In caso di necessità di assistenza per operatori come ritorno, allora avete bisogno di mettere quelle all’interno di virgolette come help(‘RETURN’)in modo che Python non confondersi su cosa stiamo cercando di fare.
Ora si dovrebbe essere in grado di scrivere, salvare ed eseguire programmi Python a proprio agio.
Ora che sei un utente di Python, impariamo alcune di più i concetti di Python.
Solo la stampa hello world non è sufficiente, è? Volete fare di più – si desidera prendere alcuni input, manipolare e ottenere qualcosa di fuori di esso. Possiamo raggiungere questo obiettivo in Python utilizzando le variabili e le costanti e impareremo alcuni altri concetti come pure in questo capitolo.
I commenti sono di qualsiasi testo a destra del simbolo # ed è utile principalmente come note per il lettore del programma.
Per esempio:
print 'hello world' # Note that print is a statement
O:
# Note that print is a statement
print 'hello world'
Uso come molti commenti utili come è possibile nel vostro programma per:
- Spiegare le ipotesi
- Spiegare le decisioni importanti
- Spiegare i dettagli importanti
- Spiegare il problema che si sta tentando di risolvere
- Spiegare i problemi che stai cercando di superare nel vostro programma, etc.
Code tells you how, comments should tell you why.
Questo è utile per i lettori del vostro programma di modo che essi possono facilmente comprendere che cosa il programma sta facendo. Ricordate che la persona può essere se stessi dopo sei mesi!!!
Un esempio di una costante letterale è un numero come 5, 1.23, o una stringa del tipo “Questa è una stringa ” o “è una stringa!”.
Esso è chiamato un letterale perché è il valore letterale – di utilizzare il suo valore letterale. Il numero 2 rappresenta sempre se stessa e niente altro – è una costante perché il suo valore non può essere modificato. Di conseguenza, tutti questi sono indicati come costanti letterali.
I numeri sono principalmente di due tipi – interi e galleggianti.
Un esempi di un intero è 2 che è semplicemente un numero intero.
Esempi di numeri a virgola mobile (o galleggianti per il breve) sono 3,23 e 52,3 E-4. La notazione e indica i poteri del 10. In questo caso, 52,3 E-4 significa 52,3 * 10^-4^.
Nota | Nota per i programmatori esperti
Non vi è alcun separato tipo lungo. Il tipo int può essere un numero intero di qualsiasi dimensione. |
Una stringa è una sequenza di caratteri. Le stringhe sono fondamentalmente solo un mucchio di parole.
Si utilizza le stringhe in quasi ogni programma Python che si scrive, in modo prestare attenzione alla seguente parte.
È possibile specificare le stringhe tra virgolette singole come ‘Preventivo di me su questo “.
Tutto lo spazio bianco cioè spazi e tabulazioni, all’interno di virgolette sono conservati così com’è.
Le stringhe tra virgolette doppie funzionano esattamente nello stesso modo come stringhe tra virgolette singole. Un esempio è “Qual è il tuo nome?”.
È possibile specificare il multi-line le stringhe utilizzando triple virgolette – (“”” o “”). È possibile utilizzare virgolette singole e doppie virgolette liberamente entro il triple virgolette. Un esempio è il seguente:
'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''
Ciò significa che una volta che hai creato una stringa, non è possibile modificarlo. Anche se questo potrebbe sembrare una cosa cattiva, in realtà non lo è. Vedremo perché questa non è una limitazione in vari programmi che vedremo in seguito.
Nota | Nota per i programmatori C/C++
Non vi è alcun separato tipo di dati char in Python. Non vi è alcuna reale necessità di esso e sono sicuro che non mancheranno di esso. |
Nota | Nota per il Perl/php programmatori
Ricordate che a singolo stringhe tra virgolette e doppio stringhe tra virgolette sono lo stesso – essi non differiscono in alcun modo. |
A volte si può voler costruire stringhe da altre informazioni. Questo è dove il formato() metodo è utile.
Salvare le seguenti righe in un file str_format.py:
age = 20
name = 'Swaroop'
print '{0} was {1} years old when he wrote this book'.format(name, age)
print 'Why is {0} playing with that python?'.format(name)
Uscita:
$ python str_format.py Swaroop was 20 years old when he wrote this book Why is Swaroop playing with that python?
Come funziona
Una stringa è possibile utilizzare determinate specifiche e successivamente il metodo format può essere chiamato a sostituire quelle specifiche con corrispondenti argomenti per il metodo format.
Osservare il primo utilizzo dove siamo utilizzare {0} e questo corrisponde al nome della variabile che è il primo argomento del metodo format. Analogamente la seconda specifica è {1} corrispondente all’età che è il secondo argomento per il metodo format. Nota che Python inizia il conteggio da 0 il che significa che la prima posizione è a indice 0, seconda posizione si trova nell’indice 1 e così via.
Notare che avremmo potuto ottenere lo stesso tramite la concatenazione delle stringhe:
name + ' is ' + str(age) + ' years old'
Ma che è molto più uglier e soggetta a errori. Secondo, la conversione in stringa dovrebbe essere effettuato automaticamente mediante il metodo format anziché la conversione esplicita in stringhe necessaria in questo caso. Terzo, quando si utilizza il metodo format, possiamo modificare il messaggio senza dover trattare con le variabili utilizzate e viceversa.
Notare anche che i numeri sono opzionali, così si potrebbe anche essere scritto come:
age = 20
name = 'Swaroop'
print '{} was {} years old when he wrote this book'.format(name, age)
print 'Why is {} playing with that python?'.format(name)
Che darà lo stesso output esatto come il precedente programma.
Che cosa fa Python nel formato metodo è che esso sostituisce ogni valore argomento in luogo della specifica. Vi possono essere più dettagliate specifiche quali:
# decimal (.) precision of 3 for float '0.333'
print '{0:.3f}'.format(1.0/3)
# fill with underscores (_) with the text centered
# (^) to 11 width '___hello___'
print '{0:_^11}'.format('hello')
# keyword-based 'Swaroop wrote A Byte of Python'
print '{name} wrote {book}'.format(name='Swaroop',
book='A Byte of Python')
Uscita:
0.333 ___hello___ Swaroop wrote A Byte of Python
Poiché stiamo discutendo di formattazione, nota che la stampa termina sempre con un invisibile “new line” carattere (\n) in modo che i ripetuti inviti per la stampa saranno tutti stampa su una riga separata ciascun. Per evitare che questo carattere di cambio riga venga stampato, è possibile terminare la dichiarazione con una virgola:
print "a",
print "b",
Uscita è:
A B
Si supponga di voler avere una stringa che contiene una virgoletta singola (‘), come sarà possibile specificare questa stringa? Ad esempio, la stringa è “Qual è il tuo nome?”. Non è possibile specificare “Qual è il tuo nome?” perché Python saranno confusi riguardo a dove la stringa inizia e termina. Così, dovrete specificare che questa virgoletta singola non indica la fine della stringa. Questo può essere fatto con l’aiuto di ciò che viene chiamata una sequenza di escape. È possibile specificare la virgoletta singola come \” : avviso il backslash. Ora, è possibile specificare la stringa come “Qual è il tuo nome?”.
Un altro modo per specificare questa stringa specifica sarebbe “Qual è il tuo nome?” cioè utilizzando le virgolette doppie. Analogamente, è necessario utilizzare una sequenza di escape per l’utilizzo di una virgoletta doppia se stesso in una doppia stringa tra virgolette. Inoltre, dovete indicare il backslash stesso usando la sequenza di escape \\.
Che accade se si desidera specificare un due-stringa di linea? Un modo è quello di utilizzare un triplo-stringa tra virgolette come mostrato previously o è possibile utilizzare una sequenza di escape per il carattere di ritorno a capo – \n per indicare l’inizio di una nuova riga. Un esempio è il seguente:
“Questa è la prima riga\nQuesto è la seconda linea’
Un altro utile sequenza di escape da conoscere è la scheda: \t. Ci sono molti di più sequenze di escape ma ho citato solo i più utili qui.
Una cosa da notare è che in una stringa, una singola barra rovesciata alla fine della linea indica che la stringa viene continuata nella riga successiva, ma nessun newline è aggiunto. Per esempio:
“Questa è la prima frase. \
Questa è la seconda frase”.
È equivalente a
“Questa è la prima frase. Questa è la seconda frase”.
Se è necessario specificare alcune stringhe dove alcuna elaborazione speciale come le sequenze di escape sono gestite, quindi che cosa avete bisogno è quello di specificare una stringa di greggio da prefissare r o R per la stringa. Un esempio è il seguente:
R”le righe vuote sono indicati da \n”
Nota | Nota per l’espressione regolare gli utenti
Utilizzare sempre le stringhe raw quando si tratta con le espressioni regolari. In caso contrario, un sacco di backwhacking può essere richiesto. Per esempio, i backreference può essere denominato ‘\\1′ o r’\1’. |
Utilizzando solo le costanti letterali possa presto diventare noioso – abbiamo bisogno di qualche modo di memorizzare tutte le informazioni e di manipolarli come bene. Questo è dove le variabili entrano nell’immagine. Le variabili sono esattamente ciò che suggerisce il nome – il loro valore può variare, cioè è possibile memorizzare qualcosa utilizzando una variabile. Le variabili sono solo alcune parti della memoria del computer in cui è possibile memorizzare alcune informazioni. A differenza di costanti letterali avete bisogno di qualche metodo di accesso a queste variabili e quindi si dà loro nomi.
Le variabili sono esempi di identificatori. Gli identificatori sono nomi dato per identificare qualcosa. Ci sono alcune regole che dovete seguire per gli identificatori di denominazione:
- Il primo carattere dell’identificatore deve essere una lettera dell’alfabeto (ASCII maiuscoli o minuscoli ASCII o Unicode Character) o un carattere di sottolineatura (_).
- Il resto del nome identificatore può essere composto da lettere ASCII maiuscole o minuscole ASCII o carattere Unicode), il segno di sottolineatura (_) o cifre (0-9).
- I nomi di identificativo sono sensibili alle maiuscole e alle minuscole. Per esempio, myname e myName non sono lo stesso. Nota il minuscolo n nell’ex e la lettera maiuscola N in quest’ultimo.
- Esempi di identificatore valido per i nomi sono io, nome_2_3. Esempi di identificativo non valido i nomi sono 2cose, questo è distanziato, il mio nome e >a1b2_C3.
Le variabili possono contenere valori di diversi tipi chiamati tipi di dati. I tipi di base sono numeri e stringhe, di cui abbiamo già discusso. Nei capitoli successivi vedremo come creare i nostri tipi utilizzando classes.
Ricordate, Python si riferisce a qualcosa di usato in un programma come un oggetto. Questo è inteso in senso generico. Invece di dire “l’ qualcosa“‘, diciamo “l’ oggetto“.
Nota | Nota per la programmazione orientata agli oggetti utenti
Python è fortemente orientato a oggetti nel senso che tutto è un oggetto compresi numeri, stringhe e funzioni. |
Vediamo ora come utilizzare le variabili lungo con costanti letterali. Salvare il seguente esempio ed eseguire il programma.
7.9. How to write Python programs
D ora in poi, la procedura standard per salvare ed eseguire un programma in Python è come segue:
- Aprire PyCharm.
- Creare un nuovo file con il nome del file menzionati.
- Digitare il codice di programma fornito nell’esempio.
- Fare clic con il pulsante destro ed eseguire il file corrente.
Nota | Ogni volta che si hanno per fornire command line arguments, fare clic su Esegui → modificare le configurazioni e il tipo degli argomenti in i parametri dello script: sezione e fare clic sul pulsante OK: |
- Apri il tuo editor di scelta.
- Digitare il codice di programma fornito nell’esempio.
- Salvarlo come un file con il nome del file menzionati.
- Eseguire l’interprete con il comando programma python.py per eseguire il programma.
7.12. Example: Using Variables And Literal Constants
Digitare ed eseguire il seguente programma:
# Filename : var.py
i = 5
print i
i = i + 1
print i
s = '''This is a multi-line string.
This is the second line.'''
print s
Uscita:
5 6 This is a multi-line string. This is the second line.
Come funziona
Ecco come questo programma funziona. Primo, assegniamo il costante letterale il valore 5 per la variabile i con l’operatore di assegnazione (=). Questa linea è chiamata una dichiarazione perché afferma che qualcosa deve essere fatto e in questo caso siamo in grado di collegare il nome della variabile i al valore 5. Abbiamo poi stampare il valore di i utilizzando l’istruzione di stampa che, unsurprisingly, appena stampa il valore della variabile per lo schermo.
Poi abbiamo aggiungere 1 al valore memorizzato nel i e riporla. Abbiamo poi stamparlo e expectedly, otteniamo il valore 6.
Analogamente, assegniamo il valore letterale stringa per la variabile s e quindi stamparlo.
Nota | Nota per il linguaggio statico di programmatori
Le variabili sono utilizzate da solo assegnando loro un valore. Nessuna dichiarazione o la definizione del tipo di dati è necessario/usato. |
7.13. Logical And Physical Line
Una linea fisica è ciò che si vede quando si scrive il programma. Una riga logica è ciò che Python vede come una singola istruzione. Python presuppone implicitamente che ogni linea fisica corrisponde a una riga logica.
Un esempio di una linea logica è una dichiarazione come print “ciao mondo” – se questo era su una riga (come lo si vede in un editor), allora questo corrisponde anche ad una linea fisica.
Implicitamente, Python incoraggia l’uso di una singola istruzione per linea che rende il codice più leggibile.
Se si desidera specificare più di una riga logica su una singola linea fisica, quindi è necessario specificare esplicitamente questo utilizzando un punto e virgola (;) che indica la fine di una riga logica/dichiarazione. Per esempio:
i = 5
print i
È effettivamente stesso come
I
i = 5;
print i;
Che è inoltre lo stesso come
i = 5; print i;
E lo stesso come
i = 5; print i
Tuttavia, mi consiglia vivamente di stick per la scrittura di un massimo di una singola riga logica su ogni singola linea fisica. L’idea è che non si dovrebbe mai utilizzare il punto e virgola. In realtà non ho mai usato o anche visto un punto e virgola in un programma Python.
Vi è un tipo di situazione in cui questo concetto è veramente utile: se avete una lunga linea di codice, è possibile suddividere in più linee fisiche utilizzando la barra rovesciata. Questo è indicato come esplicito congiungente:
s = 'This is a string. \
This continues the string.'
print s
Uscita:
This is a string. This continues the string.
Analogamente,
print \
i
È lo stesso come
print i
Talvolta vi è un presupposto implicito in cui non è necessario utilizzare una barra rovesciata. Questo è il caso in cui la linea logica ha una parentesi di partenza, a partire le parentesi quadre o iniziando un parentesi graffe ma non un fine. Questo viene chiamato linea implicita la giunzione. È possibile vedere in azione quando noi scrivere programmi utilizzando lists in capitoli successivi.
Gli spazi sono importanti in Python. In realtà, gli spazi all’inizio della linea è importante. Questo è chiamatodentellatura. Principali spazi vuoti (spazi e tabulazioni) all’inizio della riga logica viene utilizzata per determinare il livello di indentazione della linea logica, che a sua volta è utilizzato per determinare il raggruppamento delle dichiarazioni.
Questo significa che le dichiarazioni che vanno insieme devono avere la stessa impronta. Ciascuna di tali serie di istruzioni è chiamato unblocco. Vedremo esempi di come i blocchi sono importanti in capitoli successivi.
Una cosa che si dovrebbe ricordare è che sbagliato indentazione può dar luogo ad errori. Per esempio:
i = 5
# Error below! Notice a single space at the start of the line
print 'Value is ', i
print 'I repeat, the value is ', i
Quando si esegue questo, si ottiene il seguente errore:
File "whitespace.py", line 5 print 'Value is ', i ^ IndentationError: unexpected indent
Si noti che esiste un unico spazio all’inizio della seconda linea. Il messaggio di errore indicato da Python ci dice che la sintassi del programma non è valido vale a dire che il programma non è stato scritto correttamente. Cosa significa questo per voi è che non è possibile avviare arbitrariamente i nuovi blocchi di istruzioni (tranne che per l’impostazione predefinita del blocco principale che state utilizzando tutti insieme, naturalmente). Casi in cui è possibile utilizzare i nuovi blocchi sarà dettagliata nei capitoli successivi come Control Flow.
Come trattino
Utilizzare quattro spazi per il rientro. Questo è il funzionario di linguaggio Python raccomandazione. Buona redattori automaticamente farà questo per voi. Assicurarsi di utilizzare un consistente numero di spazi per il rientro, altrimenti il vostro programma mostrerà gli errori.
Nota | Nota per il linguaggio statico di programmatori
Python utilizzerà sempre la dentellatura per blocchi e non verranno mai utilizzate le parentesi graffe. Eseguire da __future__ import bretelle per saperne di più. |
Ora che siamo passati attraverso molti dettagli di fondo, si può passare alle più roba interessante come flusso di controllo Dichiarazioni. Accertarsi di acquisire familiarità con ciò che avete letto in questo capitolo.
La maggior parte delle dichiarazioni (linee logiche) che si scrive dovrà contenere espressioni. Un semplice esempio di espressione è 2 + 3. Un’espressione può essere scomposto in operatori e operandi.
Gli operatori sono funzionalità che fare qualcosa e possono essere rappresentati da simboli come + o da particolari parole chiave. Gli operatori richiedono alcuni dati per operare su e tali dati è chiamato operandi. In questo caso, 2 e 3 sono gli operandi.
Vogliamo brevemente esaminiamo gli operatori e il loro utilizzo.
Si noti che è possibile valutare le menzioni che figurano negli esempi utilizzando l’interprete in modo interattivo. Per esempio, per testare l’espressione 2 + 3, utilizzare il interactive interprete Python prompt:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
Ecco una rapida panoramica degli operatori disponibili:
+
(plus)
Aggiunge due oggetti
3 + 5
gives 8
. 'a' + 'b'
gives 'ab'
.
– (meno)
Dà la sottrazione del numero uno dall’altro; se il primo operando è assente è assunto pari a zero.
-5,2 dà un numero negativo e 50 – 24 dà 26.
* (multiply)
Dà la moltiplicazione di due numeri o restituisce la stringa ripetuta che molte volte.
2 * 3 dà 6. “la” * 3 dà ‘lalala’.
** (alimentazione)
Restituisce x alla potenza di y
3 ** 4 dà 81 (es. 3 * 3 * 3 * 3)
/ (divisione)
Dividere x di y
13 / 3 dà 4. 13.0 / 3 dà 4.333333333333333
% (modulo)
Restituisce il resto della divisione
13 % 3 dà 1. -25,5 % 2,25 dà 1.5.
<< (MAIUSC sinistro)
Sposta i bit del numero a sinistra del numero di bit specificato. (Ogni numero è rappresentato in memoria in bit o di cifre binarie cioè 0 e 1)
2 << 2 dà 8. 2 è rappresentato con 10 in bit.
Spostamento a sinistra da 2 bit dà 1000 che rappresenta la cifra decimale 8.
>> (spostamento a destra)
Sposta i bit del numero a destra del numero di bit specificato.
11 >> 1 dà 5.
11 è rappresentata in bit da 1011 che quando è spostato verso destra di 1 bit dà 101′ che è la cifra decimale ” 5.
& (bit-wise e)
In bit e dei numeri
5 & 3 dà 1.
| (bit-wise o)
Operatore OR bit per bit dei numeri
5 | 3 dà 7
^ (bit XOR).
XOR bit per bit dei numeri
5 ^ 3 dà 6
~ (bit-wise inverti)
Il bit inversione di x è -(x+1)
~5 dà -6. Maggiori dettagli a http://stackoverflow.com/a/11810203
< (minore di)
Restituisce se x è minore di y. Tutti gli operatori di confronto di restituire True o False. Nota la capitalizzazione di questi nomi.
5 < 3 dà false e 3 < 5 dà il vero.
Confronti possono essere concatenati arbitrariamente: 3 < 5 < 7 dà il vero.
> (maggiore di)
Restituisce se x è maggiore di y
5 > 3 restituisce il valore True. Se entrambi gli operandi sono numeri, vengono prima convertiti in un tipo comune. In caso contrario, essa restituisce sempre False.
⇐ (inferiore o uguale a)
Restituisce se x è inferiore o uguale a y
X = 3; y = 6; x ⇐ y restituisce True.
>= (maggiore di o uguale a)
Restituisce se x è maggiore o uguale a y
X = 4; y = 3; x >= 3 restituisce il valore True.
== (uguale a)
Confronta se gli oggetti sono uguali
X = 2; y = 2; x == y restituisce True.
X = “tr”; y = “tR”; x == y restituisce False.
X = “tr”; y = “tr”; x == y restituisce True.
!= (non uguale a)
Confronta se gli oggetti non sono uguali
X = 2; y = 3; x != y restituisce True.
Non (non booleano)
Se x è true, restituisce False. Se x è false, che restituisce True.
X = True; non x restituisce False.
E (boolean e)
X e y restituisce False se x è false, altrimenti restituisce la valutazione di y
X = False; y = True; x e y restituisce False poiché x è false. In questo caso, Python non valutano y poiché sa che il lato sinistro del ‘e l’ espressione è falso che implica che l’intera espressione sarà Falseindipendentemente dagli altri valori. Questo è chiamato corto-circuito di valutazione.
O (boolean o)
Se x è true, che restituisce true, altrimenti restituisce la valutazione di y
X = True; y = False; x o y restituisce True. Corto circuito valutazione vale anche qui.
8.2. Shortcut for math operation and assignment
È comune per eseguire una operazione matematica su una variabile e poi assegnare il risultato dell’operazione torna alla variabile e quindi non vi è un tasto di scelta rapida per queste espressioni:
A = 2
A = a * 3
Può essere scritto come:
A = 2
Un *= 3
Nota che VAR = var funzionamento diventa espressione operazione var= expression.
Se avete avuto una espressione come 2 + 3 * 4, è l’aggiunta fatta prima o la moltiplicazione? La nostra scuola di alta matematica ci dice che la moltiplicazione deve essere fatto prima. Questo significa che l’operatore di moltiplicazione ha una precedenza superiore a l’operatore di addizione.
La tabella seguente riporta la tabella delle precedenze per Python, da la precedenza più bassa (meno vincolanti) la precedenza più alta (più vincolante). Questo significa che in una determinata espressione, Python verrà prima di valutare gli operatori e le espressioni inferiore nella tabella prima di quelli elencati più elevato nella tabella.
La tabella seguente, presa dalla Python reference manual, viene fornita per completezza. È molto meglio utilizzare le parentesi per raggruppare gli operatori e operandi in modo appropriato al fine di specificare in modo esplicito la precedenza. Questo rende il programma più leggibile. Vedere di Changing the Order of Evaluation seguito per dettagli.
Lambda
Espressione Lambda
Se – altro
L’espressione condizionale
O
Valore booleano o
E
Boolean e
Non x
Non booleani
In, non è, non è, <, ⇐, >, >= !=, ==
I confronti, compresa l’appartenenza test e prove di identità
|
Operatore OR bit per bit
^
XOR bit per bit
&
E bit per bit
<< e >>
Sposta
+, –
Addizione e sottrazione
*, / //, %
La moltiplicazione e la divisione, piano di divisione e resto
+x, -x, ~x
Positivo, negativo, non bit per bit
**
L’elevamento a potenza
X[indice], x[indice:indice], x(argomenti…), x.attribute
Abbonamento, affettatura, chiamata, Riferimento attributo
(espressioni…), [espressioni…], {chiave: valore…} {espressioni…}
Il legame o tuple display, display elenco dizionario, display, impostare su display
Gli operatori che non abbiamo già imbattuti in sarà spiegato nei capitoli successivi.
Gli operatori con la stessa precedenza sono elencati nella stessa riga nella tabella di cui sopra. Per esempio, + e – hanno la stessa precedenza.
8.4. Changing the Order Of Evaluation
Per rendere le espressioni più leggibile, possiamo utilizzare le parentesi. Per esempio, 2 + (3 * 4) è decisamente più facile da comprendere rispetto a 2 + 3 * 4 che richiede la conoscenza dell’operatore le precedenze. Come con tutto il resto, le parentesi dovrebbe essere utilizzato in modo ragionevole (non strafare) e non dovrebbe essere ridondanti, come in (2 + (3 * 4)).
Vi è un ulteriore vantaggio per l’uso di parentesi – ci aiuta a cambiare l’ordine di valutazione. Se ad esempio si desidera che oltre a essere valutati prima della moltiplicazione in un’espressione, quindi è possibile scrivere qualcosa di simile (2 + 3) * 4.
Gli operatori sono solitamente associati da sinistra a destra. Questo significa che gli operatori con la stessa precedenza vengono valutati in una sinistra a destra modo. Per esempio, 2 + 3 + 4 è valutata come (2
3) + 4. Alcuni operatori come operatori di assegnazione sono da destra a sinistra associatività ovvero A = b = c è trattata come a = b = c).
Esempio (salva come espressione.py):
length = 5
breadth = 2
area = length * breadth
print 'Area is', area
print 'Perimeter is', 2 * (length + breadth)
Uscita:
$ python expression.py Area is 10 Perimeter is 14
Come funziona
La lunghezza e la larghezza del rettangolo sono memorizzati in variabili con lo stesso nome. Usiamo questi per calcolare area e perimetro del rettangolo con l aiuto di espressioni. Noi memorizzare il risultato dell’espressione lunghezza * larghezza nella zona variabile e quindi stamparlo utilizzando la funzione di stampa. Nel secondo caso, si utilizza direttamente il valore dell’espressione 2 * (lunghezza + larghezza) nell’istruzione di stampa.
Si noti inoltre come Python pretty-stampa l’uscita. Anche se non abbiamo specificato uno spazio tra “Area è’ e l’ area variabile, Python mette per noi in modo che possiamo ottenere una bella e pulita di uscita e il programma è molto più leggibile in questo modo (poiché non abbiamo bisogno di preoccuparsi di spaziatura in stringhe che utilizziamo per output). Questo è un esempio di come Python rende la vita facile per il programmatore.
Abbiamo visto come utilizzare gli operatori, gli operandi ed espressioni – questi sono i blocchi di costruzione di base di qualsiasi programma. Successivamente, vedremo come fare uso di questi nei nostri programmi utilizzando dichiarazioni.
Nei programmi che abbiamo visto fino ad ora, vi è sempre stata una serie di affermazioni fedelmente eseguito da Python in esatta top-down ordine. Che cosa succede se si voleva cambiare il flusso di come funziona? Ad esempio, si desidera che il programma di prendere alcune decisioni e fare cose diverse a seconda delle diverse situazioni, come ad esempio la stampa “Buongiorno” o “Buona sera” a seconda del momento della giornata?
Come si può immaginare, questo è ottenuto mediante flusso di controllo Dichiarazioni. Ci sono tre flusso di controllo dichiarazioni in Python – se per e mentre.
L’ istruzione if è utilizzato per verificare una condizione: se la condizione è vera, abbiamo eseguito un blocco di dichiarazioni (chiamato se-blocco), altrimentipossiamo elaborare un altro blocco di istruzioni (chiamato il resto-blocco). La clausola else è opzionale.
number = 23
guess = int(raw_input('Enter an integer : '))
if guess == number:
# New block starts here
print 'Congratulations, you guessed it.'
print '(but you do not win any prizes!)'
# New block ends here
elif guess < number:
# Another block
print 'No, it is a little higher than that'
# You can do whatever you want in a block ...
else:
print 'No, it is a little lower than that'
# you must have guessed > number to reach here
print 'Done'
# This last statement is always executed,
# after the if statement is executed.
Altro:
$ python if.py Enter an integer : 50 No, it is a little lower than that Done $ python if.py Enter an integer : 22 No, it is a little higher than that Done $ python if.py Enter an integer : 23 Congratulations, you guessed it. (but you do not win any prizes!) Done
Come funziona
In questo programma, prendiamo a indovinare da parte dell’utente e controllare se è il numero che abbiamo. Abbiamo impostato il numero variabile di un qualsiasi numero intero che vogliamo dire, 23. Quindi prendiamo la dell’utente indovinare usando il raw_input() funzione. Le funzioni sono solo pezzi riutilizzabili dei programmi. Daremo maggiori informazioni su di essi in next chapter.
Forniamo una stringa per il built-in raw_input funzione che lo stampa sullo schermo e attende l’input da parte dell’utente. Una volta che avremo qualcosa di invio e premere il tasto invio, il raw_input() restituisce ciò che siamo entrati, come una stringa. Abbiamo poi convertire la stringa in un valore integer utilizzando int e quindi memorizzarlo nella variabile indovinare. In realtà la int è una classe ma tutto quello che devi sapere adesso è che è possibile utilizzarlo per convertire una stringa in un valore integer (supponendo che la stringa contiene un intero valido nel testo).
Abbiamo poi confrontare i guess dell’utente con il numero che abbiamo scelto. Se essi sono uguali, ci stampa un messaggio di operazione riuscita. Si noti che usiamo i livelli di indentazione per raccontare Python quali affermazioni appartengono a quale blocco. Questo è il motivo per cui indentazione è così importante in Python. Spero che vi aderiscano al “coerente” di indentazione regola. Siete?
Notate come se la dichiarazione contiene due punti alla fine – ci sono indicativi di Python che un blocco di istruzioni seguente.
Abbiamo poi verificare se la congettura è minore del numero, e se è così, ci informa l’utente che essi devono indovinare un po’ più elevata di quella. Che cosa abbiamo qui usato è la clausola di Jonathan che effettivamente combina due correlati se il resto-se il resto delle dichiarazioni in uno combinato se-elif-else . Questo rende il programma più semplice e riduce la quantità di indentazione richiesto.
Il Jonathan e il resto delle dichiarazioni deve avere anche un segno di due punti alla fine della riga logica seguita dalla loro corrispondente blocco di istruzioni (con una corretta indentazione, ovviamente)
È possibile avere un’altra istruzione if all’interno della se-blocco di una istruzione if e così via – questo è chiamato una nested istruzione if.
Ricordate che il Jonathan e altri componenti sono opzionali. Una minima valida se la dichiarazione è:
Se vero:
Stampa ‘Sì, è vero’
Dopo Python ha finito di eseguire il completo se la dichiarazione con i relativi a Jonathan e il resto clausole, esso si sposta su per la successiva istruzione nel blocco contenente l’ istruzione if. In questo caso è il blocco principale (in cui l’esecuzione del programma si avvia), e l’istruzione successiva è la stampa di ‘done’ istruzione. Dopo questo, Python vede le estremità del programma e semplicemente finisce.
Anche se si tratta di un programma molto semplice, mi sono stati rivolti fuori un sacco di cose che si dovrebbero notare. Tutti questi sono piuttosto semplici (e sorprendentemente semplice per quelle di voi dal C/C++ sfondi). Hai bisogno di diventare consapevole di tutte queste cose inizialmente, ma dopo una certa pratica diventerai confortevole con loro e si sente tutti ” naturale ” per voi.
Nota | Nota per i programmatori C/C++
Non vi è alcuna istruzione switch in Python. È possibile utilizzare un Se..Jonathan..Else per fare la stessa cosa (e in alcuni casi, utilizzare dictionary per farlo rapidamente) |
L’ istruzione While consente di eseguire ripetutamente un blocco di istruzioni come lungo come una condizione è vera. Una dichiarazione mentre è un esempio di quello che è chiamato un loop di dichiarazione. Un’ istruzione While può avere una condizione facoltativa Else.
number = 23
running = True
while running:
guess = int(raw_input('Enter an integer : '))
if guess == number:
print 'Congratulations, you guessed it.'
# this causes the while loop to stop
running = False
elif guess < number:
print 'No, it is a little higher than that.'
else:
print 'No, it is a little lower than that.'
else:
print 'The while loop is over.'
# Do anything else you want to do here
print 'Done'
Altro:
$ python while.py Enter an integer : 50 No, it is a little lower than that. Enter an integer : 22 No, it is a little higher than that. Enter an integer : 23 Congratulations, you guessed it. The while loop is over. Done
Come funziona
In questo programma, siamo ancora a giocare il gioco degli indovinelli, ma il vantaggio è che l’utente è autorizzato a conservare indovinare fino a quando egli intuisce correttamente – non vi è alcuna necessità di eseguire più volte il programma per ogni ipotesi, come abbiamo fatto nella precedente sezione. Questo appropriatamente dimostra l’uso dell’ Istruzione while.
Dobbiamo spostare il raw_input e se le affermazioni e all’interno del loop while e impostare la variabile in esecuzione su true prima il ciclo while. Primo, dobbiamo verificare se la variabile acceso è true e quindi procedere per eseguire la corrispondente mentre-blocco. Dopo questo blocco viene eseguito, la condizione è nuovamente verificato che in questo caso è la variabile in esecuzione. Se è vero, si esegue la fase di bloccare nuovamente, altrimenti continueremo ad eseguire la facoltativa else-blocco e poi continuare con il prossimo estratto conto.
Blocco else viene eseguita quando il loop while condizione diventa False – questa potrebbe anche essere la prima volta che la condizione è verificata. Se vi è una clausola else per un ciclo while è sempre eseguita a meno di non rompere il ciclo con una istruzione break.
Il vero e il falso sono chiamati tipi booleani e si può considerare il loro equivalente al valore 1 e 0rispettivamente.
Nota | Nota per i programmatori C/C++
Ricordare che è possibile avere una clausola else per il ciclo while. |
Il per..nella dichiarazione è un’altra dichiarazione di loop che scorre su una sequenza di oggetti cioè passare attraverso ciascun elemento in una sequenza. Vedremo più sequences in dettaglio nei capitoli successivi. Cosa è necessario sapere ora è che una sequenza è semplicemente una raccolta ordinata di elementi.
for i in range(1, 5):
print i
else:
print 'The for loop is over'
Altro:
$ python for.py 1 2 3 4 The for loop is over
Come funziona
In questo programma ci sono la stampa di una sequenza di numeri. Noi generare questa sequenza di numeri utilizzando la gamma integrata difunzione.
Ciò che facciamo qui è lo alimentano due numeri e la gamma restituisce una sequenza di numeri a partire dal primo numero e fino al secondo numero. Per esempio, gamma(1,5) fornisce la sequenza [1, 2, 3, 4]. Per impostazione predefinita, gamma compie un passo di conteggio 1. Se forniamo un terzo numero di gamma, che poi diventa la fase di conteggio. Per esempio, gamma(1,5,2) conferisce[1,3]. Ricordate che la gamma si estende fino al secondo numero cioè non includono il secondo numero.
Nota che la gamma() genera una sequenza di numeri tutti in una volta, in modo questo è sicuro da utilizzare solo per piccoli intervalli. Se si desidera un intervallo lungo ma generato un solo numero alla volta, quindi utilizzare xrange(). Gli elenchi sono spiegate in data structures chapter.
Il ciclo for itera poi oltre questo intervallo – per i nella gamma(1,5) è equivalente a per i in [1, 2, 3, 4] che è come assegnare ciascun numero (o oggetto) nella sequenza di i, uno alla volta e poi esegue il blocco di istruzioni per ogni valore di i. In questo caso abbiamo semplicemente stampare il valore nel blocco di istruzioni.
Ricordate che la parte else è opzionale. Quando incluso, viene sempre eseguita una volta dopo il ciclo for è finita a meno che unabreak dichiarazione è incontrato.
Ricordate che il PER..in ansa funziona per qualsiasi sequenza. Qui abbiamo un elenco di numeri generati dallagamma integrata di funzione, ma in generale si può utilizzare qualsiasi tipo di sequenza di qualsiasi tipo di oggetti! Esploreremo questa idea in dettaglio nei capitoli successivi.
Nota | Nota per C/C++/Java/C# programmatori
Python per loop è radicalmente diverso da C/C++ per loop. C# programmatori nota che il loop for in Python è simile per il loop foreach di C#. I programmatori Java si nota che lo stesso è simile a per (int i : IntArray) in Java 1.5. In C/C, se si desidera scrivere ” per (int i = 0 ; i < 5; i), poi in Python di scrivere solo ‘per i nella gamma(0,5). Come si può vedere, il ciclo for è più semplice e più espressivo e meno incline agli errori in Python. |
L’ istruzione break viene utilizzata per uscire di un istruzione di ciclo ossia arrestare l’esecuzione di un loop di istruzione, anche se la condizione di loop non è diventato falso o la sequenza di elementi non è stato completamente iterato oltre.
Una nota importante è che se si rompe al di fuori di un per o loop while, qualsiasi loop corrispondente blocco else non viene eseguito.
Esempio (salva come break.py):
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
print 'Length of the string is', len(s)
print 'Done'
Uscita:
$ python break.py Enter something : Programming is fun Length of the string is 18 Enter something : When the work is done Length of the string is 21 Enter something : if you wanna make your work also fun: Length of the string is 37 Enter something : use Python! Length of the string is 11 Enter something : quit Done
Come funziona
In questo programma, più volte abbiamo dovuto prendere l’input utente e stampare la lunghezza di ciascun ingresso di ogni tempo. Stiamo fornendo una condizione speciale per arrestare il programma verificando se l’input utente è ‘quit’. Noi lo stop del programma mediante rottura del loop e raggiungere la fine del programma.
La lunghezza della stringa di input può essere rilevato utilizzando il built-in funzione len.
Ricordate che l’ istruzione break può essere utilizzato con il ciclo for come bene.
Swaroop della poetica Python
L’ingresso ho usato qui è una mini poesia che ho scritto:
La programmazione è divertente
Quando il lavoro è fatto
Se volete rendere il vostro lavoro anche divertente:
Usare Python!
L’ istruzione continue viene usato per dire a Python per saltare il resto delle dichiarazioni nel loop di corrente di blocco e di continuarecon la prossima iterazione del loop.
Esempio (salva come continuare.py):
Mentre la vera:
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
print 'Too small'
continue
print 'Input is of sufficient length'
# Do other kinds of processing here...
Uscita:
$ python continue.py Enter something : a Too small Enter something : 12 Too small Enter something : abc Input is of sufficient length Enter something : quit
Come funziona
In questo programma, possiamo accettare input da parte dell’utente, ma possiamo elaborare la stringa di input solo se è di almeno 3 caratteri. Abbiamo così utilizzare il built-in funzione len per ottenere la lunghezza e se la lunghezza è inferiore a 3, abbiamo saltare il resto delle istruzioni nel blocco utilizzando l’ istruzione continue. In caso contrario, il resto delle dichiarazioni nel ciclo sono eseguiti, fare qualsiasi tipo di elaborazione che vogliamo fare qui.
Si noti che l’ istruzione continue opere con il ciclo for come bene.
Abbiamo visto come utilizzare il controllo tre dichiarazioni di flusso – se, mentre e per lungo con loro associati pausa econtinuare le dichiarazioni. Questi sono alcuni dei più comunemente utilizzato parti di Python e quindi entrare in confidenza con loro è essenziale.
Successivamente, vedremo come creare e utilizzare le funzioni.
Funzioni riutilizzabili sono pezzi di programmi. Essi consentono di assegnare un nome a un blocco di dichiarazioni, consentendo di eseguire tale blocco con il nome specificato in qualsiasi punto del programma e un numero qualsiasi di volte. Questo è noto come la chiamata della funzione. Abbiamo già utilizzato molte funzioni incorporate come len e gamma.
Il concetto di funzione è probabilmente il più importante edificio blocco di qualsiasi software non banali (in qualsiasi linguaggio di programmazione), così potremo esplorare vari aspetti delle funzioni in questo capitolo.
Le funzioni sono definite utilizzando la parola chiave DEF. Dopo questa parola chiave viene fornito un nome identificativo per la funzione, seguita da una coppia di parentesi che può racchiudere alcuni nomi di variabili e dal colon finale che termina la linea. In seguito il blocco di istruzioni che fanno parte di questa funzione. Un esempio dimostrerà che questo è in realtà molto semplice:
Esempio (salva come funzione1.py):
def say_hello():
# block belonging to the function
print 'hello world'
# End of function
say_hello() # call the function
say_hello() # call the function again
Uscita:
$ python function1.py hello world hello world
Come funziona
Dobbiamo definire una funzione denominata dire_ciao utilizzando la sintassi come spiegato sopra. Questa funzione non accetta parametri e quindi non vi sono le variabili dichiarate in parentesi. Parametri per le funzioni sono solo input per la funzione in modo che si può passare in diversi valori e tornare i risultati corrispondenti.
Notare che si può chiamare la stessa funzione due volte il che significa che non abbiamo per scrivere lo stesso codice di nuovo.
Una funzione può assumere parametri che sono valori forniti per la funzione in modo che la funzione possa fare qualcosa utilizzando tali valori. Questi parametri sono proprio come le variabili ad eccezione che i valori di queste variabili sono definite quando si chiama la funzione e sono già stati assegnati i valori quando la funzione viene eseguita.
I parametri sono specificati entro la coppia di parentesi nella definizione di funzione, separati da virgole. Quando si chiama la funzione, forniamo i valori nello stesso modo. Nota la terminologia utilizzata – i nomi indicati nella definizione di funzione sono chiamati parametri considerando i valori forniti nella chiamata di funzione sono denominati argomenti.
Esempio (salva come funzione_param.py):
def print_max(a, b):
if a > b:
print a, 'is maximum'
elif a == b:
print a, 'is equal to', b
else:
print b, 'is maximum'
# directly pass literal values
print_max(3, 4)
x = 5
y = 7
# pass variables as arguments
print_max(x, y)
Uscita:
$ python function_param.py 4 is maximum 7 is maximum
Come funziona
Qui dobbiamo definire una funzione denominata print_max che utilizza due parametri denominati a e b. Vogliamo trovare il maggior numero utilizzando un semplice Se..Else e quindi stampare il numero più grande.
La prima volta che noi chiamiamo la funzione print_max, possiamo fornire direttamente i numeri come argomenti. Nel secondo caso si richiama la funzione con variabili come argomenti. Print_max(x,y) determina il valore di argomento x per essere assegnato al parametroa e il valore di argomento y per essere assegnato al parametro b. Il print_ funzione max funziona allo stesso modo in entrambi i casi.
Quando si dichiarano variabili all’interno di una definizione di funzione, essi non sono in alcun modo collegata alle altre variabili con gli stessi nomi utilizzati al di fuori della funzione – cioè i nomi delle variabili sono locali per la funzione. Questo è chiamato il campo della variabile. Tutte le variabili hanno il campo di applicazione del blocco in cui sono stati dichiarati a partire dal punto di definizione del nome.
Esempio (salva come funzione_local.py):
x = 50
def func(x):
print 'x is', x
x = 2
print 'Changed local x to', x
func(x)
print 'x is still', x
Uscita:
$ python function_local.py x is 50 Changed local x to 2 x is still 50
Come funziona
La prima volta che si stampa il valore del nome x con la prima linea nel corpo della funzione, Python utilizza il valore del parametro dichiarato nel blocco principale, sopra la definizione di funzione.
Quindi, assegniamo il valore 2 per x. Il nome x è locale per la nostra funzione. Quando si modifica il valore di x nella funzione, la x definito nel blocco principale rimane inalterata.
Con l’ultima istruzione di stampa, viene visualizzato il valore di x come definito nel blocco principale, confermando in tal modo che essa è in realtà non influenzata dall’assegnazione locale entro la precedentemente chiamato funzione.
Se si desidera assegnare un valore a un nome definito al livello superiore del programma (cioè non all’interno di un qualunque tipo di campo come funzioni o classi), allora devi dire Python che il nome non è locale, ma è globale. Lo facciamo utilizzando l’ istruzione global. È impossibile assegnare un valore a una variabile definita al di fuori di una funzione senza l’ istruzione global.
È possibile utilizzare i valori di tali variabili definite al di fuori della funzione (assumendo che non vi sia nessuna variabile con lo stesso nome all’interno della funzione). Tuttavia questo non è incoraggiata e dovrebbe essere evitato poiché diventa chiaro al lettore del programma per quanto riguarda dove tale variabile della definizione è. Utilizzando l’ istruzione global rende ampiamente chiaro che la variabile è definita in un blocco più esterno.
Esempio (salva come funzione_global.py):
x = 50
def func():
global x
print 'x is', x
x = 2
print 'Changed global x to', x
func()
print 'Value of x is', x
Uscita:
$ python function_global.py x is 50 Changed global x to 2 Value of x is 2
Come funziona
La dichiarazione globale viene utilizzata per dichiarare che x sia una variabile globale – e quindi quando si assegna un valore di x all’interno della funzione, tale modifica viene apportata anche quando si usa il valore di x nel blocco principale.
È possibile specificare più di una variabile globale utilizzando la stessa istruzione global ad es. Global x, y, z.
Per alcune funzioni, è possibile che si desideri rendere alcuni parametri opzionali e utilizzare i valori di default nel caso in cui l’utente non desidera fornire valori per loro. Questo viene fatto con l’aiuto di argomento predefinito di valori. È possibile specificare argomento predefinito i valori per i parametri aggiungendo al nome del parametro nella definizione della funzione l’operatore di assegnazione (=) seguito dal valore predefinito.
Nota che l’argomento predefinito valore deve essere una costante. Più precisamente, l’argomento predefinito valore dovrebbe essere immutabile – questo è spiegato in dettaglio nei capitoli successivi. Per ora basta ricordare questo.
Esempio (salva come funzione_default.py):
def say(message, times=1):
print message * times
say('Hello')
say('World', 5)
Uscita:
$ python function_default.py Hello WorldWorldWorldWorldWorld
Come funziona
La funzione denominata dire è utilizzata per la stampa di una stringa come molte volte come specificato. Se non si forniscono un valore, quindi per impostazione predefinita, la stringa viene stampata solo una volta. Possiamo raggiungere questo specificando un argomento predefinito valore di 1 per il parametro volte.
Al primo utilizzo di dire, forniamo solo la stringa e stampa la stringa una volta. In secondo utilizzo di dire, forniamo sia la stringa e un argomento 5 affermando che vogliamo dire il messaggio stringa 5 volte.
Attenzione | Solo i parametri che sono alla fine dell’elenco di parametri può essere fornita di default valori argomento cioè non è possibile avere un parametro con un argomento predefinito precedente il valore di un parametro senza un argomento predefinito valore nel parametro della funzione Elenco.
Questo perché i valori vengono assegnati ai parametri dalla posizione. Per esempio,def func(a, b=5) è valido, ma def func(a=5, b) non è valida. |
Se si dispone di alcune funzioni con molti parametri e si desidera specificare solo alcuni di essi, allora è possibile fornire valori per tali parametri dalla loro denominazione – questo è chiamato keyword argomentazioni – usiamo il nome (parola chiave) invece della posizione (che ci sono state utilizzando tutti lungo) per specificare gli argomenti della funzione.
Ci sono due vantaggi – uno, utilizzando la funzione è più semplice in quanto non abbiamo bisogno di preoccuparsi circa l’ordine degli argomenti. Due, siamo in grado di fornire valori solo a quei parametri a cui vogliamo, a condizione che gli altri parametri sono argomento predefinito di valori.
Esempio (salva come funzione_keyword.py):
def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, c=24)
func(c=50, a=100)
Uscita:
$ python function_keyword.py a is 3 and b is 7 and c is 10 a is 25 and b is 5 and c is 24 a is 100 and b is 5 and c is 50
Come funziona
La funzione denominata func ha un parametro senza un argomento predefinito valore, seguita da due parametri di default con valori di argomento.
Al primo utilizzo, func(3, 7), il parametro a ottiene il valore 3, il parametro b ottiene il valore 7 e c ottiene il valore predefinito di 10.
Nella seconda usage func(25, c=24), la variabile a prende il valore di 25 a causa della posizione dell’argomento. Quindi, il parametro c diventa il valore di 24 dovuto alla denominazione cioè argomenti per parola chiave. La variabile b ottiene il valore predefinito di 5.
In terzo usage func(c=50, a=100), possiamo utilizzare la parola chiave argomenti per tutti i valori specificati. Si noti che vengono specificando il valore per il parametro c prima che per un anche se è stato definito un prima c nella definizione di funzione.
Talvolta è possibile che si desideri definire una funzione che può assumere un qualsiasi numero di parametri, ossia Variable numero diarguments, questo può essere ottenuto usando le stelle (salva come funzione_varargs.py):
def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print total(10, 1, 2, 3, vegetables=50, fruits=100)
Uscita:
$ python function_varargs.py 166
Come funziona
Quando si dichiara una stella il parametro come *param, quindi tutti gli argomenti posizionali da quel punto fino alla fine vengono raccolti come una tupla chiamato “param’.
Analogamente, quando dichiariamo un doppio-starred parametro come **param, quindi tutti gli argomenti per parola chiave da questo punto fino alla fine vengono raccolti come un dizionario denominato “param’.
Esploreremo tuple e dizionari in un later chapter.
L’ istruzione return è usata per tornare da una funzione cioè spezzare la funzione. Si può eventualmente riportare un valoredalla funzione come bene.
Esempio ( funzione salva con nome_return.py):
def maximum(x, y):
if x > y:
return x
elif x == y:
return 'The numbers are equal'
else:
return y
print maximum(2, 3)
Uscita:
$ python function_return.py 3
Come funziona
La funzione Maximum restituisce il numero massimo di parametri, in questo caso i numeri forniti alla funzione. Esso utilizza un semplice Se..Else per trovare il valore maggiore e quindi restituisce il valore.
Si noti che un’ istruzione return senza un valore è equivalente a tornare nessuno. Nessuno è un tipo speciale in Python che rappresenta il nulla. Per esempio è usato per indicare che una variabile non ha alcun valore se essa ha un valore di nessuno.
Ogni funzione contiene implicitamente un ritorno nessuna dichiarazione alla fine a meno che avete scritto il vostro proprio l’ istruzione return. È possibile vedere questo eseguendo stampa alcuni_function() dove la funzione alcuni_funzione non utilizzare l’ istruzione return come:
Def alcuni_funzione():
Pass
Il pass istruzione è utilizzata in Python per indicare un blocco vuoto delle dichiarazioni.
Suggerimento | Vi è integrata una funzione denominata max che implementa già ‘Trova’ massima funzionalità, quindi utilizzare questa funzione ogni qualvolta possibile. |
Python ha una funzione nifty chiamati stringhe di documentazione, solitamente indicati dal suo nome più breve docstrings. DocStrings sono uno strumento importante che si dovrebbe fare uso di dal momento che consente di documentare il programma migliore e rende più facile la comprensione. Sorprendentemente, si può anche ottenere il docstring indietro da, dire una funzione, quando il programma viene effettivamente eseguito!
Esempio (salva come funzione_docstring.py):
def print_max(x, y):
'''Prints the maximum of two numbers.
The two values must be integers.'''
# convert to integers, if possible
x = int(x)
y = int(y)
if x > y:
print x, 'is maximum'
else:
print y, 'is maximum'
print_max(3, 5)
print print_max.__doc__
Uscita:
$ python function_docstring.py 5 is maximum Prints the maximum of two numbers. The two values must be integers.
Come funziona
Una stringa sulla prima riga logica di una funzione è la docstring per quella funzione. Nota che DocStrings si applicano anche a modulese classes che impareremo circa nei rispettivi capitoli.
La convenzione seguita per una docstring è una stringa multiriga dove la prima linea inizia con una lettera maiuscola e termina con un punto. Quindi la seconda riga è vuota seguita da qualsiasi spiegazione dettagliata a partire dalla terza linea. Si consiglia vivamente di seguire questa convenzione per tutti i vostri docstrings per tutti i vostri non banali di funzioni.
Siamo in grado di accedere alla docstring del print_max funzione utilizzando il doc (avviso la doppia sottolineatura) attributo (nome appartenente a) della funzione. Basta ricordare che Python considera tutto come un oggetto e questo include le funzioni. Impareremo a conoscere meglio gli oggetti nel capitolo sul classes.
Se hai usato la Guida() in Python, allora avete già visto l’utilizzo di docstrings! Ciò che fa è semplicemente recuperare l’ attributo doc di tale funzione e lo visualizza in una maniera pulita per voi. È possibile provarlo sulla funzione di cui sopra – appena includonohelp(print_max) nel tuo programma. Ricordarsi di premere il tasto q per uscire dalla guida.
Strumenti automatici può recuperare la documentazione del programma in questo modo. Pertanto, mi consiglia vivamente diutilizzare docstrings per qualsiasi non banali di funzione che tu scrivi. Il comando di pydoc che viene fornito con la vostra distribuzione Python funziona in modo analogo alla guida() utilizzando docstrings.
Abbiamo visto tanti aspetti di funzioni ma nota che non abbiamo ancora coperti tutti gli aspetti della loro. Abbiamo tuttavia già coperto la maggior parte di ciò che ti uso per quanto riguarda le funzioni di Python su una base quotidiana.
Successivamente, vedremo come usare così come creare moduli Python.
Avete visto in che modo è possibile riutilizzare il codice nel vostro programma mediante la definizione di funzioni una sola volta. Che accade se si desidera riutilizzare un numero di funzioni in altri programmi che tu scrivi? Come si può immaginare, la risposta è moduli.
Vi sono vari metodi di scrittura di moduli, ma il modo più semplice è quello di creare un file con un file .py Extension che contiene funzioni e variabili.
Un altro metodo è quello di scrivere i moduli nella lingua nativa in cui l’interprete Python stesso è stato scritto. Ad esempio, è possibile scrivere moduli in C programming language e una volta compilato, essi possono essere utilizzati dal tuo codice Python quando si utilizza lo standard interprete Python.
Un modulo può essere importato da un altro programma di utilizzare le sue funzionalità. Questo è il modo in cui possiamo utilizzare gli standard di Python library e. Primo, vedremo come usare la libreria standard di moduli.
Esempio (salva come modulo_using_sys.py):
import sys
print('The command line arguments are:')
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
Uscita:
$ python module_using_sys.py we are arguments The command line arguments are: module_using_sys.py we are arguments The PYTHONPATH is ['/tmp/py', # many entries here, not shown here '/Library/Python/2.7/site-packages', '/usr/local/lib/python2.7/site-packages']
Come funziona
Primo, dobbiamo importare il modulo sys utilizzando l’ istruzione import. In sostanza, questo si traduce in noi raccontando Python che vogliamo utilizzare questo modulo. Il modulo sys contiene funzionalità correlate all’interprete Python e il suo ambiente cioè ilsystem.
Quando Python esegue l’ importazione dichiarazione sys, sembra che per il modulo sys. In questo caso è uno dei built-in moduli e quindi Python sa dove trovare.
Se non è stato un modulo compilato ovvero un modulo scritto in Python, quindi l’interprete Python verrà cercata nella directory elencate nella sua sys.path variabile. Se il modulo si trova, allora le dichiarazioni nel corpo del modulo che vengono eseguiti e il modulo è reso disponibile per l’uso. Nota che l’inizializzazione viene eseguita solo la prima volta che l’importazione di un modulo.
Il argv variabile nel modulo sys è accessibile utilizzando la notazione puntata cioè Sys.argv. Essa indica chiaramente che questo nome è parte del modulo sys. Un altro vantaggio di questo approccio è che il nome non si scontrano con qualsiasi argvvariabile utilizzata nel vostro programma.
Il sys.argv variabile è un elenco di stringhe (elenchi sono spiegati in dettaglio in una later chapter. Specificamente, il sys.argvcontiene l’elenco di argomenti della riga di comando cioè gli argomenti passati al programma utilizzando la riga di comando.
Se si sta utilizzando un IDE per scrivere ed eseguire tali programmi, e di cercare un modo per specificare gli argomenti della riga di comando per il programma nel menu.
Qui, quando eseguiamo il modulo python_using_sys.py ci sono argomenti, abbiamo eseguito il modulo modulo_using_sys.pycon il comando python e tutte le altre cose che seguono sono gli argomenti passati al programma. Python memorizza gli argomenti della riga di comando in sys.argv variabile per noi per l’uso.
Ricordate, il nome dello script in esecuzione è sempre il primo argomento in sys.argv elenco. Così, in questo caso avremo’module_using_sys.py” come sys.argv[0], ‘noi’ come sys.argv[1], ‘sono’ come sys.argv[2] E ‘argomenti’ comesys.argv[3]. Avviso che Python inizia il conteggio da 0 e non da 1.
Il sys.path contiene la lista dei nomi delle directory in cui i moduli vengono importati da. Osservare che la prima stringa insys.path è vuoto – questa stringa vuota indica che la directory corrente è anche parte del sys.path che è lo stesso come l’ ambiente PYTHONPATH variabile. Questo significa che è possibile importare direttamente i moduli collocati nella directory corrente. In caso contrario sarà necessario posizionare il modulo in una delle directory elencate in sys.path.
Nota che la directory corrente è la directory in cui il programma viene lanciato. Eseguire importazione os; print os.getcwd() per trovare la directory corrente del vostro programma.
11.1. Byte-compiled .pyc files
Importazione di un modulo è un relativamente costosa a vicenda, in modo Python fa alcuni trucchi per renderlo più veloce. Un modo è quello di creare byte compilati i file con estensione .pyc che è una forma intermedia che Python trasforma il programma in (ricordate la introduction section su come funziona Python?). Questo .pyc file è utile quando si importa il modulo la prossima volta da un programma diverso – sarà molto più veloce poiché una porzione di elaborazione richiesta in importazione di un modulo è già fatto. Inoltre questi byte-file compilati sono indipendenti dalla piattaforma.
Nota | Questi .pyc file sono di solito creato nella stessa directory come il corrispondente file .py file. Se Python non hanno il permesso di scrivere i file nella directory, quindi .pyc file non saranno create. |
11.2. The from … import statement
Se si desidera importare direttamente le variabili argv nel vostro programma (per evitare di digitare il sys. Ogni volta che per esso), quindi è possibile utilizzare il dal sys import argv dichiarazione.
In generale, è consigliabile evitare di utilizzare questa dichiarazione e utilizzare l’ istruzione import invece dal vostro programma consentirà di evitare scontri nome e sarà più leggibile.
Esempio:
from math import sqrt
print "Square root of 16 is", sqrt(16)
Ogni modulo ha un nome e le affermazioni contenute in un modulo può trovare il nome del loro modulo. Questo è comodo per il particolare scopo di capire se il modulo è in esecuzione standalone o importati. Come menzionato in precedenza, quando un modulo viene importato per la prima volta il codice in esso contenuto viene eseguito. Possiamo utilizzare questo per rendere il modulo comportarsi in modi diversi a seconda se esso viene impiegato di per sé o essere importati da un altro modulo. Questo può essere ottenuto usando il nome attributo del modulo.
Esempio (salva come modulo_using_name.py):
if __name__ == '__main__':
print 'This program is being run by itself'
else:
print 'I am being imported from another module'
Uscita:
$ python module_using_name.py This program is being run by itself $ python >>> import module_using_name I am being imported from another module >>>
Come funziona
Ogni modulo Python ha il suo nome definito. Se questo è ‘principale‘, il che significa che il modulo è in esecuzione standalone dall’utente e possiamo intraprendere le azioni appropriate.
La creazione di propri moduli è facile, che hai fatto tutti insieme! Questo è perché ogni programma Python è anche un modulo. Basta assicurarsi che esso ha un .py estensione. Il seguente esempio dovrebbe rendere chiaro.
Esempio (salva come mymodule.py):
def say_hi():
print 'Hi, this is mymodule speaking.'
__version__ = '0.1'
Quanto sopra è stato un esempio di modulo. Come si può vedere, non vi è nulla di particolarmente speciale su di esso rispetto al nostro consueto programma Python. Ci sarà accanto a vedere come utilizzare questo modulo in altri nostri programmi Python.
Ricordare che il modulo deve essere posizionato nella stessa directory del programma da cui importiamo, o in una delle directory elencate in sys.path.
Un altro modulo (salva come mymodule_demo.py):
import mymodule
mymodule.say_hi()
print 'Version', mymodule.__version__
Uscita:
$ python mymodule_demo.py Hi, this is mymodule speaking. Version 0.1
Come funziona
Si noti che usiamo la stessa notazione decimale con punti di accesso membri del modulo. Python rende bene il riutilizzo della stessa notazione per dare il caratteristico ‘Pythonic’ per sentire in modo che non dobbiamo continuare a imparare nuovi modi di fare le cose.
Qui è una versione utilizzando il da..import sintassi (salva come mymodule_demo2.py):
from mymodule import say_hi, __version__
say_hi()
print 'Version', __version__
L’uscita di mymodule_demo2.py è la stessa come l’uscita di mymodule_demo.py.
Notare che se vi è già stata una versione nome dichiarato nel modulo che le importazioni mymodule, vi sarebbe uno scontro. Anche questo è probabilmente perché è pratica comune per ogni modulo per dichiarare che è il numero di versione utilizzando questo nome. Quindi, è sempre raccomandato di preferire la dichiarazione d’importazione anche se potrebbe rendere il vostro programma un po’ più a lungo.
Si potrebbe anche usare:
Da mymodule importare *
Ciò consentirà di importare tutti i nomi pubblici come dire_hi ma non versione di importazione perché inizia con doppia sottolineatura.
Avvertenza | Ricorda che bisogna evitare di utilizzare import-star, cioè Da mymodule importare *. |
Zen di Python
Uno di Python’s principi guida è che “esplicita è meglio di implicito”. Eseguire importare questo in Python per saperne di più.
È possibile utilizzare la funzione dir incorporata per elencare gli identificatori che un oggetto definisce. Per esempio, per un modulo, gli identificatori comprendono le funzioni, le classi e le variabili definite in tale modulo.
Quando si forniscono il nome di un modulo per la’dir()’, la funzione restituisce la lista dei nomi definiti nel modulo. Quando nessun argomento è applicato ad esso, restituisce la lista dei nomi definiti nel modulo corrente.
Esempio:
$ python >>> import sys # get names of attributes in sys module >>> dir(sys) ['__displayhook__', '__doc__', 'argv', 'builtin_module_names', 'version', 'version_info'] # only few entries shown here # get names of attributes for current module >>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] # create a new variable 'a' >>> a = 5 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'a'] # delete/remove a name >>> del a >>> dir() ['__builtins__', '__doc__', '__name__', '__package__']
Come funziona
Primo, possiamo vedere l’utilizzo di dir sul importati modulo sys. Possiamo vedere il grande lista di attributi che esso contiene.
Successivamente, utilizziamo la funzione dir senza passaggio di parametri ad essa. Per impostazione predefinita, essa restituisce l’elenco di attributi per il modulo corrente. Notare che la lista dei moduli importati è anche parte di questo elenco.
Al fine di osservare la dir in azione, definiamo una nuova variabile a e assegnarle un valore e quindi controllare dir e possiamo constatare che vi è un valore aggiuntivo nell’elenco dello stesso nome. Dobbiamo rimuovere la variabile/attributo del modulo corrente utilizzando la dichiarazione del e il cambiamento si riflette nuovamente nell’output della funzione dir.
Una nota su del – questa affermazione viene utilizzato per eliminare una variabile/nome e dopo la dichiarazione è stata eseguita, in questo caso del un, non è più possibile accedere alla variabile a – è come se non fosse mai esistito prima a tutti.
Nota che la dir() funziona su qualsiasi oggetto. Ad esempio, eseguire dir(str) per gli attributi della str (stringa) classe.
Vi è anche una vars() funzione che sono potenzialmente in grado di darvi gli attributi e i loro valori, ma non funziona per tutti i casi.
A questo punto lei deve avere iniziato osservando la gerarchia di organizzare i vostri programmi. Le variabili di solito andare all’interno delle funzioni. Funzioni e variabili globali di solito andare all’interno di moduli. Cosa succede se avete voluto organizzare i moduli? Ecco dove entrano i pacchetti nell’immagine.
I pacchetti sono solo le cartelle dei moduli con una speciale init.py file che indica di Python che questa cartella è speciale perché contiene moduli Python.
Si supponga di voler creare un pacchetto chiamato ‘world’ con il sottoconfezionamento ‘Asia’, ‘l’Africa”, ecc. e questi sottopacchetti a sua volta contiene i moduli come ” India “, il ” Madagascar “, ecc.
In questo modo si avrebbe la struttura di cartelle:
- <some folder present in the sys.path>/ - world/ - __init__.py - asia/ - __init__.py - india/ - __init__.py - foo.py - africa/ - __init__.py - madagascar/ - __init__.py - bar.py
I pacchetti sono solo una comodità per organizzare gerarchicamente i moduli. Vedrete molte istanze di questo in standard library.
Proprio come le funzioni sono parti riutilizzabili di programmi e moduli sono programmi riutilizzabili. I pacchetti sono un’altra gerarchia per organizzare i moduli. La libreria standard che viene fornito con Python è un esempio di una tale serie di pacchetti e moduli.
Abbiamo visto come utilizzare questi moduli e creare i nostri moduli.
Successivamente, impareremo circa alcuni interessanti concetti chiamato strutture di dati.
Strutture di dati sono fondamentalmente solo che – sono strutture che può contenere alcuni dati insieme. In altre parole essi sono utilizzati per memorizzare un insieme di dati correlati.
Ci sono quattro built-in strutture di dati in Python – elenco, tupla, dizionario e impostare. Vedremo come usare ciascuno di loro e come essi rendono la vita più facile per noi.
Una lista è una struttura di dati che contiene un insieme ordinato di elementi cioè è possibile memorizzare una sequenza di elementi in un elenco. Questo è facile da immaginare se si può pensare a una lista della spesa di cui si dispone di un elenco di elementi da acquistare, tranne che probabilmente avete ogni voce su una riga separata nella vostra lista della spesa che in Python hai messo le virgole tra di loro.
L’elenco degli articoli deve essere racchiuso tra parentesi quadre in modo che Python capisce che si stanno specificando un elenco. Una volta creato un elenco, è possibile aggiungere, rimuovere o cercare elementi nell’elenco. Poiché siamo in grado di aggiungere e rimuovere gli elementi, diciamo che una lista è un mutevole tipo dati cioè di questo tipo può essere alterato.
12.2. Quick Introduction To Objects And Classes
Anche se mi è stato generalmente ritardare la discussione degli oggetti e delle classi fino ad ora, una piccola spiegazione è necessaria proprio ora in modo che sia possibile comprendere meglio gli elenchi. Esploreremo questo argomento più in dettaglio in un later chapter.
Un elenco è un esempio di utilizzo degli oggetti e delle classi. Quando si usa una variabile i e di assegnare un valore a, dire intero 5 , si può pensare a come creare un oggetto (cioè Esempio) i di classe (cioè tipo) int. Infatti, è possibile leggere la guida(int) per capire meglio questo.
Una classe può anche disporre di metodi ovvero funzioni definite per l’utilizzo rispetto a quella classe solo. È possibile utilizzare questi pezzi di funzionalità solo quando si dispone di un oggetto di tale classe. Ad esempio, Python fornisce un metodo append per la classe List che consente di aggiungere un elemento alla fine dell’elenco. Per esempio, mylist.append(‘un elemento’) consentirà di aggiungere tale stringa all’elenco mylist. Nota l’uso di notazione per accedere ai metodi degli oggetti.
Una classe può avere anche i campi che non sono altro che le variabili definite per l’utilizzo rispetto a quella classe solo. È possibile utilizzare queste variabili/nomi solo quando si dispone di un oggetto di tale classe. I campi sono accessibili anche mediante la notazione decimale con punti, per esempio, mylist.field.
Esempio (salva come ds_using_list.py):
# This is my shopping list
shoplist = ['apple', 'mango', 'carrot', 'banana']
print 'I have', len(shoplist), 'items to purchase.'
print 'These items are:',
for item in shoplist:
print item,
print '\nI also have to buy rice.'
shoplist.append('rice')
print 'My shopping list is now', shoplist
print 'I will sort my list now'
shoplist.sort()
print 'Sorted shopping list is', shoplist
print 'The first item I will buy is', shoplist[0]
olditem = shoplist[0]
del shoplist[0]
print 'I bought the', olditem
print 'My shopping list is now', shoplist
Uscita:
$ python ds_using_list.py I have 4 items to purchase. These items are: apple mango carrot banana I also have to buy rice. My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice'] I will sort my list now Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice'] The first item I will buy is apple I bought the apple My shopping list is now ['banana', 'carrot', 'mango', 'rice']
Come funziona
La variabile shoplist è una lista della spesa per qualcuno che sta andando al mercato. In shoplist, abbiamo solo memorizzare stringhe di nomi di elementi da acquistare ma è possibile aggiungere qualsiasi tipo di oggetto da un elenco che include i numeri e anche altri elenchi.
Abbiamo anche utilizzato il per..in loop per scorrere gli elementi dell’elenco. A questo punto lei deve avere capito che un elenco è anche una sequenza. La specialità di sequenze saranno discusse in una later section.
Si noti l’utilizzo della virgola finale in l’ istruzione di stampa per indicare che si desidera terminare l’uscita con uno spazio invece del solito interruzione di riga. Pensate alla virgola come Python dicendo che ci sono più elementi da stampare sulla stessa linea.
Abbiamo poi aggiungere una voce all’elenco utilizzando il metodo append dell’elenco oggetti, come già discusso in precedenza. Abbiamo poi verificare che la voce è stata infatti aggiunta alla lista da stampare il contenuto della lista semplicemente passando l’elenco per l’ istruzione di stampa che stampa it ordinatamente.
Abbiamo poi ordinare l’elenco utilizzando il metodo di ordinamento dell’elenco. È importante comprendere che questo metodo riguarda la lista stessa e non restituisce un elenco modificato – questo è diversa dal modo in cui le stringhe funzionano. Questo è ciò che si intende dicendo che gli elenchi sono mutabili e che le stringhe sono immutabili.
Successivamente, quando si è terminato di acquistare un elemento nel mercato, vogliamo per rimuoverlo dall’elenco. Possiamo raggiungere questo mediante la dichiarazione del. Qui dobbiamo menzionare quale elemento della lista si desidera rimuovere e la dichiarazione del lo rimuove dall’elenco per noi. Abbiamo specificato che si desidera rimuovere il primo elemento dalla lista e quindi dobbiamo usare Canc shoplist[0] (ricordate che Python inizia il conteggio da 0).
Se si desidera conoscere tutti i metodi definiti dall’elenco oggetti, vedere la guida(elenco) per ulteriori dettagli.
Tuple sono utilizzate per tenere insieme gli oggetti multipli. Pensare a loro come simili agli elenchi, ma senza le funzionalità complete che la classe List ti dà. Una delle principali caratteristiche di tuple è che essi sono immutabili come stringhe ovvero non è possibile modificare tuple.
Tuple sono definiti dalla specifica di elementi separati da virgole all’interno opzionale per coppia di parentesi.
Tuple vengono solitamente utilizzati nei casi in cui una dichiarazione o una funzione definita dall’utente può tranquillamente supporre che la raccolta di valori ovvero il tuple di valori utilizzati non cambierà.
Esempio (salva come ds_using_tupla.py):
# I would recommend always using parentheses
# to indicate start and end of tuple
# even though parentheses are optional.
# Explicit is better than implicit.
zoo = ('python', 'elephant', 'penguin')
print 'Number of animals in the zoo is', len(zoo)
new_zoo = 'monkey', 'camel', zoo
print 'Number of cages in the new zoo is', len(new_zoo)
print 'All animals in new zoo are', new_zoo
print 'Animals brought from old zoo are', new_zoo[2]
print 'Last animal brought from old zoo is', new_zoo[2][2]
print 'Number of animals in the new zoo is', \
len(new_zoo)-1+len(new_zoo[2])
Uscita:
$ python ds_using_tuple.py Number of animals in the zoo is 3 Number of cages in the new zoo is 3 All animals in new zoo are ('monkey', 'camel', ('python', 'elephant', 'penguin')) Animals brought from old zoo are ('python', 'elephant', 'penguin') Last animal brought from old zoo is penguin Number of animals in the new zoo is 5
Come funziona
La variabile zoo si riferisce ad una tupla di elementi. Possiamo vedere che la funzione len può essere utilizzato per ottenere la lunghezza della tupla. Ciò indica anche che una tupla è un sequence come bene.
Ora stiamo spostando questi animali a un nuovo zoo poiché il vecchio zoo viene chiuso. Pertanto il nuovo_zoo tupla contiene alcuni animali che sono già lì insieme con gli animali portato dal vecchio zoo. Ritorno alla realtà, nota che una tupla entro una tupla non perde la sua identità.
Si può accedere alle voci dell’tupla specificando l’elemento di posizione entro una coppia di parentesi quadre come abbiamo fatto per le liste. Questo è chiamato l ‘ operatore di indicizzazione. Possiamo accedere alla terza voce in new_zoo specificando new_zoo[2] e abbiamo accesso la terza voce entro la terza voce nel nuovo_zoo tupla specificando new_zoo[2][2]. Questo è abbastanza semplice una volta che hai capito idioma.
Nota | Tuple con 0 o 1 elementi
Vuota una tupla è costruito da una coppia di parentesi vuote come myempty = (). Tuttavia, una tupla con un singolo elemento non è così semplice. È necessario specificare di esso utilizzando una virgola seguendo il primo (e solo) voce in modo che Python è in grado di distinguere tra una tupla e una coppia di parentesi che circonda l’oggetto in un’espressione cioè dovete specificare singleton = (2 , ) se significa che si desidera una tupla contenente il punto2. |
Nota | Nota per programmatori Perl
Un elenco entro un elenco non perde la sua identità cioè elenchi non vengono appiattite come in Perl. Lo stesso vale per una tupla entro una tupla o una tupla entro un elenco o una lista entro una tupla, ecc. Per quanto riguarda Python è interessato, sono solo gli oggetti memorizzati utilizzando un altro oggetto, che è tutto. |
Un dizionario è come una rubrica dove è possibile trovare l’indirizzo o i dettagli di contatto di una persona conoscendo solo il suo nome ovvero possiamo associare i tasti (nome) con valori (dettagli). Nota che la chiave deve essere unico, come non è possibile trovare le informazioni corrette se si hanno due persone con lo stesso nome.
Notare che è possibile utilizzare solo oggetti immutabili (come stringhe) per le chiavi di un dizionario ma è possibile utilizzare sia immutabile o mutable oggetti per i valori del dizionario. Questo si traduce in sostanza per dire che si dovrebbero utilizzare solo gli oggetti semplici per le chiavi.
Coppie di chiavi e valori sono specificati in un dizionario utilizzando la notazione D = {key1 : valore1, Key2 : valore2 }. Notare che le coppie chiave-valore sono separati da un segno di due punti e le coppie sono si sono separati da virgole e tutto questo è racchiuso in una coppia di parentesi graffe.
Ricordate che coppie chiave-valore in un dizionario non sono ordinati in qualsiasi modo. Se si desidera un particolare ordine, quindi dovrete ordinarli te stesso prima di utilizzarlo.
I dizionari che si utilizza sono istanze/oggetti della classe dict.
Esempio (salva come ds_using_dict.py):
# 'ab' is short for 'a'ddress'b'ook
ab = { 'Swaroop' : [email protected]',
'Larry' : [email protected]',
'Matsumoto' : [email protected]',
'Spammer' : [email protected]'
}
print "Swaroop's address is", ab['Swaroop']
# Deleting a key-value pair
del ab['Spammer']
print '\nThere are {} contacts in the address-book\n'.format(len(ab))
for name, address in ab.items():
print 'Contact {} at {}'.format(name, address)
# Adding a key-value pair
ab['Guido'] = [email protected]'
if 'Guido' in ab:
print "\nGuido's address is", ab['Guido']
Uscita:
$ python ds_using_dict.py Swaroop's address is [email protected] There are 3 contacts in the address-book Contact Swaroop at [email protected] Contact Matsumoto at [email protected] Contact Larry at [email protected] Guido's address is [email protected]
Come funziona
Possiamo creare il dizionario ab utilizzando la notazione già discusso. Abbiamo quindi accedere alle coppie chiave-valore specificando la chiave utilizzando l’operatore di indicizzazione come discusso nel contesto delle liste e tuple. Osservare la sintassi semplice.
Siamo in grado di eliminare coppie chiave-valore utilizzando il nostro vecchio amico – la dichiarazione del. Abbiamo semplicemente specificare il dizionario e l’operatore di indicizzazione per la chiave per essere rimosso e lo passa alla dichiarazione del. Non vi è alcun bisogno di sapere il valore corrispondente alla chiave per questa operazione.
Abbiamo poi accedere a ogni coppia chiave-valore del dizionario utilizzando il metodo di voci del dizionario che restituisce un elenco di tuple dove ogni tupla contiene una coppia di elementi – la chiave di seguito dal valore. Dobbiamo recuperare questa coppia e assegnarle alle variabili Nome e indirizzo corrispondentemente per ogni coppia utilizzando la per..in loop e poi stampare questi valori nell’per-blocco.
Possiamo aggiungere nuove coppie chiave-valore semplicemente utilizzando l’operatore di indicizzazione di accedere a una chiave e assegnare tale valore, come abbiamo fatto per Guido in caso di cui sopra.
Siamo in grado di verificare se una coppia chiave-valore esistente utilizzando l ‘operatore in.
Per la lista dei metodi della classe dict, vedere la guida(dict).
Suggerimento | La parola chiave degli argomenti e dei dizionari
Se hai usato la parola chiave argomenti nel vostro funzioni, hai già utilizzato i dizionari! Pensate un po’ – la coppia chiave-valore è specificato da voi nella lista dei parametri della definizione di funzione e quando si accede alle variabili in funzione, essa è solo una chiave di accesso di un dizionario (che è chiamato la tabella dei simboli nel design del compilatore terminologia). |
Elenchi, tuple e le stringhe sono esempi di sequenze, ma che cosa sono le sequenze e che cosa è così speciale circa loro?
Le principali caratteristiche sono le prove di appartenenza, (cioè la in e non nelle espressioni) e le operazioni di indicizzazione, che ci permettono di recuperare un particolare elemento della sequenza direttamente.
I tre tipi di sequenze sopra menzionato – elenchi, tuple e stringhe, dispongono anche di una operazione di taglio che ci permette di recuperare una fetta della sequenza cioè una parte della sequenza.
Esempio (salva come ds_seq.py):
# Indexing or 'Subscription' operation #
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]
print 'Character 0 is', name[0]
# Slicing on a list #
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]
# Slicing on a string #
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
print 'characters start to end is', name[:]
Uscita:
$ python ds_seq.py Item 0 is apple Item 1 is mango Item 2 is carrot Item 3 is banana Item -1 is banana Item -2 is carrot Character 0 is s Item 1 to 3 is ['mango', 'carrot'] Item 2 to end is ['carrot', 'banana'] Item 1 to -1 is ['mango', 'carrot'] Item start to end is ['apple', 'mango', 'carrot', 'banana'] characters 1 to 3 is wa characters 2 to end is aroop characters 1 to -1 is waroo characters start to end is swaroop
Come funziona
Primo, vediamo come utilizzare gli indici per ottenere i singoli elementi di una sequenza. Questo è anche indicato come l’ operazione di sottoscrizione. Quando si specifica un numero di sequenza entro le parentesi quadre come mostrato sopra, Python vi accompagnerà la voce corrispondente a tale posizione nella sequenza. Ricordate che Python inizia a contare i numeri da 0. Quindi,shoplist[0] ottiene il primo elemento e shoplist[3] ottiene il quarto elemento della ‘shoplist’ssequenza.
L’indice può anche essere un numero negativo, nel qual caso la posizione viene calcolata a partire dalla fine della sequenza. Pertanto, shoplist[-1] si riferisce all’ultimo elemento nella sequenza e shoplist[-2] ottiene il secondo ultimo elemento nella sequenza.
L’operazione di affettatura è utilizzato specificando il nome della sequenza seguita da una eventuale coppia di numeri separati dai due punti entro le parentesi quadre. Nota che questo è molto simile per l’operazione di indicizzazione è stata utilizzata fino ad ora. Ricordare i numeri sono facoltative ma il colon non è.
Il primo numero (prima del colon) nell’operazione di taglio si riferisce alla posizione da cui la fetta si avvia e il secondo numero (dopo i due punti) indica il punto in cui la fetta si fermerà a. Se il primo numero non è specificato, Python comincerà all’inizio della sequenza. Se il secondo numero è lasciato fuori, Python si arresta alla fine della sequenza. Nota che la sezione restituito inizia alla posizione di inizio e si concluderà poco prima della posizione finale ossia la posizione di partenza è inclusa ma la posizione finale è escluso dalla sequenza slice.
Così, shoplist[1:3] restituisce una fetta della sequenza partendo dalla posizione 1, include la posizione 2 ma si arresta in posizione 3 e quindi una fetta di due elementi è tornato. Analogamente, shoplist[]: restituisce una copia di tutta la sequenza.
È anche possibile fare per affettare con posizioni negative. I numeri negativi sono usati per le posizioni dalla fine della sequenza. Per esempio, shoplist[:-1] restituirà una fetta della sequenza che esclude l’ultima voce della sequenza ma contiene tutto il resto.
È anche possibile prevedere un terzo argomento per la fetta, che è la fase di parzializzazione (per impostazione predefinita, la dimensione del passo è di 1):
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> shoplist[::1]
['apple', 'mango', 'carrot', 'banana']
>>> shoplist[::2]
['apple', 'carrot']
>>> shoplist[::3]
['apple', 'banana']
>>> shoplist[::-1]
['banana', 'carrot', 'mango', 'apple']
Notare che quando il passo è 2, otteniamo le voci con la posizione 0, 2, … quando la dimensione del passo è 3, otteniamo le voci con la posizione 0, 3, etc.
Provare varie combinazioni di tali specifiche di fetta utilizzando l’interprete Python interattivamente cioè il prompt in modo che è possibile vedere immediatamente il risultato. La cosa fantastica di sequenze è che è possibile accedere a tuple, elenchi e stringhe tutti nello stesso modo!
Imposta non sono ordinati delle collezioni di oggetti semplici. Queste vengono utilizzate quando l’esistenza di un oggetto in una collezione è più importante della fine o quante volte si verifica.
Utilizzando set, è possibile il test di adesione, se si tratta di un sottoinsieme di un altro insieme, trovare l’intersezione tra due insiemi e così via.
>>> bri = set(['brazil', 'russia', 'india'])
>>> 'india' in bri
True
>>> 'usa' in bri
False
>>> bric = bri.copy()
>>> bric.add('china')
>>> bric.issuperset(bri)
True
>>> bri.remove('russia')
>>> bri & bric # OR bri.intersection(bric)
{'brazil', 'india'}
Come funziona
L’esempio è piuttosto autoesplicativa perché implica l’impostazione di base sulla teoria matematica insegnata nella scuola.
Quando si crea un oggetto e assegnarlo a una variabile, la variabile si riferisce solo all’oggetto e non rappresentano l’oggetto stesso! Che è il nome della variabile che punti a quella parte della memoria del computer in cui l’oggetto viene memorizzato. Questo è chiamato il legame del nome per l’oggetto.
In generale, non hai bisogno di essere preoccupati per questo, ma non vi è un sottile effetto dovuto a riferimenti a cui è necessario essere a conoscenza di:
Esempio (salva come ds_riferimento.py):
print 'Simple Assignment'
shoplist = ['apple', 'mango', 'carrot', 'banana']
# mylist is just another name pointing to the same object!
mylist = shoplist
# I purchased the first item, so I remove it from the list
del shoplist[0]
print 'shoplist is', shoplist
print 'mylist is', mylist
# Notice that both shoplist and mylist both print
# the same list without the 'apple' confirming that
# they point to the same object
print 'Copy by making a full slice'
# Make a copy by doing a full slice
mylist = shoplist[:]
# Remove first item
del mylist[0]
print 'shoplist is', shoplist
print 'mylist is', mylist
# Notice that now the two lists are different
Uscita:
$ python ds_reference.py Simple Assignment shoplist is ['mango', 'carrot', 'banana'] mylist is ['mango', 'carrot', 'banana'] Copy by making a full slice shoplist is ['mango', 'carrot', 'banana'] mylist is ['carrot', 'banana']
Come funziona
La maggior parte della spiegazione è disponibile nei commenti.
Ricordate che se si vuole fare una copia di un elenco o di tali tipi di sequenze o di oggetti complessi (non semplici oggetti come numeri interi), quindi è necessario utilizzare l’operazione di taglio per effettuare una copia. Se è sufficiente assegnare il nome di una variabile da un altro nome, sia di loro sarà ”refer” per lo stesso oggetto e questo potrebbe essere guasto se non si fa attenzione.
Nota | Nota per programmatori Perl
Ricordate che un’istruzione di assegnazione per gli elenchi non crea una copia. Dovete usare la operazione di taglio per effettuare una copia della sequenza. |
Abbiamo già discusso di stringhe in dettaglio in precedenza. Ciò che più ci può essere sapere? Bene, sapete che le stringhe sono anche oggetti e disporre di metodi che fare tutto dal controllo di parte di una stringa a strippaggio spazi!
Le stringhe che si utilizza in programma sono tutti gli oggetti della classe str. Alcuni metodi utili di questa classe sono dimostrato nel prossimo esempio. Per un elenco completo di tali metodi, vedere la guida(str).
Esempio (salva come ds_str_methods.py):
# This is a string object
name = 'Swaroop'
if name.startswith('Swa'):
print 'Yes, the string starts with "Swa"'
if 'a' in name:
print 'Yes, it contains the string "a"'
if name.find('war') != -1:
print 'Yes, it contains the string "war"'
delimiter = '_*_'
mylist = ['Brazil', 'Russia', 'India', 'China']
print delimiter.join(mylist)
Uscita:
$ python ds_str_methods.py Yes, the string starts with "Swa" Yes, it contains the string "a" Yes, it contains the string "war" Brazil_*_Russia_*_India_*_China
Come funziona
Qui possiamo vedere un sacco di metodi string in azione. Il metodo startswith è utilizzato per scoprire se la stringa inizia con la stringa data. L ‘operatore in è utilizzato per verificare se una data stringa è una parte della stringa.
Il metodo find viene utilizzato per individuare la posizione del dato sottostringa all’interno di stringa; ricerca restituisce -1 se esso non è riuscito a trovare la sottostringa. La str classe dispone inoltre di un utile metodo per unire gli elementi di una sequenza con la stringa che agisce come un delimitatore tra ogni elemento della sequenza e restituisce una stringa più grande generati da questo.
Abbiamo esaminato le varie built-in strutture di dati di Python in dettaglio. Queste strutture di dati sarà essenziale per la scrittura di programmi di dimensioni ragionevoli.
Ora che abbiamo un sacco di nozioni di base di Python nel luogo, ci sarà accanto a vedere come progettare e scrivere un mondo reale programma Python.
Abbiamo esplorato varie parti del linguaggio Python e ora daremo un’occhiata a come tutte queste parti montare insieme, per la progettazione e la scrittura di un programma che fa qualcosa di utile. L idea è quella di imparare a scrivere uno script Python sul proprio.
Il problema che si desidera risolvere è:
Voglio un programma che crea una copia di backup di tutti i miei file importanti.
Anche se questo è un problema semplice, non c’è abbastanza informazioni per noi per ottenere iniziato con la soluzione. Un po’ più dianalisi è necessario. Per esempio, come possiamo specificare quali sono i file da sottoporre a backup? Come vengono memorizzati? Dove vengono archiviate?
Dopo aver analizzato il problema correttamente, progettiamo il nostro programma. Dobbiamo fare un elenco delle cose circa come il nostro programma dovrebbe funzionare. In questo caso, ho creato il seguente elenco di come ho voglia di lavorare. Se non la progettazione, potrebbe non venire con lo stesso tipo di analisi dato che ogni persona ha il proprio modo di fare le cose in modo che sia perfettamente in buone condizioni.
- Le directory e i file di backup sono specificati in un elenco.
- Il backup deve essere memorizzata in una delle principali directory di backup.
- I file di backup vengono salvati in un file zip.
- Il nome dell’archivio zip è la data e ora correnti.
- Utilizziamo la zip standard di comando disponibile per impostazione predefinita in qualsiasi standard GNU/Linux o Unix e distribuzione. Notare che è possibile utilizzare qualsiasi comando di archiviazione che si desidera come lungo come ha una interfaccia a riga di comando.
Nota | Per gli utenti di Windows
Gli utenti di Windows possono install il comando zip dalla GnuWin32 project page e aggiungere C:\Programmi\GnuWin32\bin al percorso di sistema variabile di ambiente simile a what we did for recognizing the python command itself. |
Come il design del nostro programma è ora ragionevolmente stabile, si può scrivere il codice che è un’ implementazione della nostra soluzione.
Salva come backup_ver1.py:
import os
import time
# 1. The files and directories to be backed up are
# specified in a list.
# Example on Windows:
# source = ['"C:\\My Documents"', 'C:\\Code']
# Example on Mac OS X and Linux:
source = ['/Users/swa/notes']
# Notice we had to use double quotes inside the string
# for names with spaces in it.
# 2. The backup must be stored in a
# main backup directory
# Example on Windows:
# target_dir = 'E:\\Backup'
# Example on Mac OS X and Linux:
target_dir = '/Users/swa/backup'
# Remember to change this to which folder you will be using
# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + os.sep + \
time.strftime('%Y%m%d%H%M%S') + '.zip'
# Create target directory if it is not present
if not os.path.exists(target_dir):
os.mkdir(target_dir) # make directory
# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -r {0} {1}".format(target,
' '.join(source))
# Run the backup
print "Zip command is:"
print zip_command
print "Running:"
if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'
Output:
$ python backup_ver1.py Zip command is: zip -r /Users/swa/backup/20140328084844.zip /Users/swa/notes Running: adding: Users/swa/notes/ (stored 0%) adding: Users/swa/notes/blah1.txt (stored 0%) adding: Users/swa/notes/blah2.txt (stored 0%) adding: Users/swa/notes/blah3.txt (stored 0%) Successful backup to /Users/swa/backup/20140328084844.zip
Ora siamo in fase di test in cui ci prova che il nostro programma funziona correttamente. Se essa non si comporta come previsto, allora abbiamo per eseguire il debug del nostro programma ovvero rimuovere i bug (errori) dal programma.
Se il programma di cui sopra non funziona per voi, Copia la linea stampata dopo il comando zip è la linea in uscita, incollarlo nella shell (su GNU/Linux e Mac OS X) / cmd (su Windows), vedere cosa sia l’errore e cercare di risolvere il problema. Controllare anche il comando zip manuale su cosa potrebbe essere sbagliato. Se questo comando ha esito positivo, il problema potrebbe essere nel programma Python stesso, quindi verificare se essa corrisponde esattamente al programma scritto sopra.
Come funziona
Si noterà come abbiamo trasformato il nostro design in codice in un passo-passo modo.
Noi facciamo uso di os e moduli di tempo dalla prima di importarle. Abbiamo poi specificare le directory e i file da sottoporre a backup nell’ elenco sorgente. La directory di destinazione è il punto in cui memorizzare tutti i file di backup e questo viene specificato nel target_dirvariabile. Il nome dell’archivio zip che stiamo andando a creare è la data corrente e il tempo che possiamo generare utilizzandotime.strftime() . Essa avrà anche l’ estensione .zip e verrà memorizzato in target_dir directory.
Notare l’utilizzo di os.sep variabile – questo dà il separatore di directory in base al tuo sistema operativo ovvero sarà’/’ in GNU/Linux e Unix, sarà ‘\\’ in Windows e ‘:’ in Mac OS. Utilizzo di os.sep invece di questi caratteri direttamente renderà il nostro programma portable e il lavoro di tutti questi sistemi.
Il tempo.strftime(), funzione richiede una specifica come quella che abbiamo usato nel suddetto programma. %Yspecifica verrà sostituito dall’anno con il secolo. %m specifica verrà sostituito dal mese come numero decimale tra 01 e 12 e così via. L’elenco completo di tali specifiche possono essere trovati nella Python Reference Manual.
Possiamo creare il nome della destinazione del file zip utilizzando l’operatore di addizione che concatena le stringhe cioè si unisce assieme due stringhe e restituisce una nuova. Quindi si crea una stringa zip_command che contiene il comando che ci accingiamo ad eseguire. È possibile verificare se questo comando funziona mediante l’esecuzione in guscio (GNU/Linux terminale o prompt di DOS).
Il comando zip che stiamo usando ha alcune opzioni e parametri passati. L’ opzione -r specifica che il comando zip dovrebbe funzionare recursively per directory ossia dovrebbe includere tutte le sottodirectory e file. Le due opzioni sono combinati e specificato in un collegamento come -qr. Le opzioni sono seguiti dal nome dell’archivio zip per creare seguito da un elenco di file e directory per eseguire il backup. Noi convertire l’ elenco sorgente in una stringa utilizzando il metodo join di stringhe che abbiamo già visto come utilizzare.
Quindi, abbiamo finalmente eseguire il comando utilizzando il sistema operativo.La funzione di sistema che esegue il comando come se fosse stato eseguito dalsistema cioè nel guscio – restituisce il valore 0 se il comando è stato correttamente, altrimenti restituisce un numero di errore.
A seconda del risultato del comando, possiamo stampare il messaggio appropriato che il backup non è riuscito o è riuscita.
Ecco, abbiamo creato uno script per tenere una copia di backup dei nostri file importanti!
Nota | Nota per gli utenti di Windows
Invece di doppi backslash sequenze di escape, è anche possibile utilizzare stringhe di greggio. Per esempio, utilizzare’C:\\Documents’ o R’C:\Documenti “. Tuttavia, non utilizzare ‘C:\Documents” poiché si finisce per utilizzare un ignoto sequenza di escape \D. |
Ora che abbiamo un lavoro di script di backup, siamo in grado di utilizzare ogni volta che ci vuoi fare una copia di backup del file. Questo è chiamato ilfunzionamento di fase o la fase di distribuzione del software.
Il programma di cui sopra funziona correttamente, ma (di solito) primi programmi non funzionano esattamente come ci si aspetta. Per esempio, ci potrebbero essere problemi se non avete progettato il programma correttamente o se si è commesso un errore durante la digitazione del codice, ecc. Opportunamente, dovrete tornare alla fase di progettazione o sarà necessario eseguire il debug del programma.
La prima versione del nostro script funziona. Tuttavia, siamo in grado di apportare alcuni miglioramenti ad esso in modo che esso possa funzionare meglio su una base quotidiana. Questa è la cosiddetta fase di manutenzione del software.
Uno dei perfezionamenti mi sembrava utile è una migliore per la denominazione dei file meccanismo – utilizzando il tempo come il nome del file in una directory con la data corrente come una directory all’interno delle principali directory di backup. Il primo vantaggio è che i backup sono memorizzati in modo gerarchico e quindi è molto più facile da gestire. Il secondo vantaggio è che i nomi dei file sono molto più brevi. Il terzo vantaggio è che la directory separate vi aiuterà a controllare se hai fatto un backup per ogni giorno poiché la directory potrebbe essere creato solo se hai fatto un backup per quel giorno.
Salva come backup_ver2.py:
import os
import time
# 1. The files and directories to be backed up are
# specified in a list.
# Example on Windows:
# source = ['"C:\\My Documents"', 'C:\\Code']
# Example on Mac OS X and Linux:
source = ['/Users/swa/notes']
# Notice we had to use double quotes inside the string
# for names with spaces in it.
# 2. The backup must be stored in a
# main backup directory
# Example on Windows:
# target_dir = 'E:\\Backup'
# Example on Mac OS X and Linux:
target_dir = '/Users/swa/backup'
# Remember to change this to which folder you will be using
# Create target directory if it is not present
if not os.path.exists(target_dir):
os.mkdir(target_dir) # make directory
# 3. The files are backed up into a zip file.
# 4. The current day is the name of the subdirectory
# in the main directory.
today = target_dir + os.sep + time.strftime('%Y%m%d')
# The current time is the name of the zip archive.
now = time.strftime('%H%M%S')
# The name of the zip file
target = today + os.sep + now + '.zip'
# Create the subdirectory if it isn't already there
if not os.path.exists(today):
os.mkdir(today)
print 'Successfully created directory', today
# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -r {0} {1}".format(target,
' '.join(source))
# Run the backup
print "Zip command is:"
print zip_command
print "Running:"
if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'
Output:
$ python backup_ver2.py Successfully created directory /Users/swa/backup/20140329 Zip command is: zip -r /Users/swa/backup/20140329/073201.zip /Users/swa/notes Running: adding: Users/swa/notes/ (stored 0%) adding: Users/swa/notes/blah1.txt (stored 0%) adding: Users/swa/notes/blah2.txt (stored 0%) adding: Users/swa/notes/blah3.txt (stored 0%) Successful backup to /Users/swa/backup/20140329/073201.zip
Come funziona
La maggior parte del programma rimane lo stesso. I cambiamenti sono che dobbiamo verificare se esiste una directory con il giorno corrente come il suo nome all’interno della principale directory di backup utilizzando l’ os.Path. funzione exists. Se non esiste, possiamo creare usando ilos.mkdir funzione.
La seconda versione funziona bene quando faccio molti backup, ma quando ci sono un sacco di backup, trovo difficile distinguere ciò che i backup sono state per! Per esempio, forse ho fatto alcuni importanti cambiamenti per un programma o una presentazione, quindi voglio associare ciò che tali modifiche sono con il nome dell’archivio zip. Ciò può essere facilmente ottenuto mediante fissaggio di un utente commento fornito per il nome dell’archivio zip.
Avvertenza | Il programma seguente non funziona, quindi non essere allarmato, si prega di seguire lungo perché c’è una lezione qui. |
Salva come backup_ver3.py:
import os
import time
# 1. The files and directories to be backed up are
# specified in a list.
# Example on Windows:
# source = ['"C:\\My Documents"', 'C:\\Code']
# Example on Mac OS X and Linux:
source = ['/Users/swa/notes']
# Notice we had to use double quotes inside the string
# for names with spaces in it.
# 2. The backup must be stored in a
# main backup directory
# Example on Windows:
# target_dir = 'E:\\Backup'
# Example on Mac OS X and Linux:
target_dir = '/Users/swa/backup'
# Remember to change this to which folder you will be using
# Create target directory if it is not present
if not os.path.exists(target_dir):
os.mkdir(target_dir) # make directory
# 3. The files are backed up into a zip file.
# 4. The current day is the name of the subdirectory
# in the main directory.
today = target_dir + os.sep + time.strftime('%Y%m%d')
# The current time is the name of the zip archive.
now = time.strftime('%H%M%S')
# Take a comment from the user to
# create the name of the zip file
comment = raw_input('Enter a comment --> ')
# Check if a comment was entered
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' +
comment.replace(' ', '_') + '.zip'
# Create the subdirectory if it isn't already there
if not os.path.exists(today):
os.mkdir(today)
print 'Successfully created directory', today
# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -r {0} {1}".format(target,
' '.join(source))
# Run the backup
print "Zip command is:"
print zip_command
print "Running:"
if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'
Output:
$ python backup_ver3.py File "backup_ver3.py", line 39 target = today + os.sep + now + '_' + ^ SyntaxError: invalid syntax
Questo programma non funziona! Python afferma che vi è un errore di sintassi che significa che lo script non soddisfano la struttura che Python si aspetta di vedere. Quando si osserva l’errore fornito da Python, esso ci dice anche il luogo in cui è stato rilevato l’errore. Così abbiamo avviato il debug il nostro programma da quella linea.
Da un attenta osservazione, possiamo vedere che la singola riga logica è stata suddivisa in due linee fisiche ma non abbiamo specificato che queste due linee fisiche appartengono insieme. Fondamentalmente, Python ha trovato l’operatore di addizione (+) senza alcun operando in tale linea logica e quindi non sa come fare per continuare. Ricordate che si può specificare che la linea logica continua nella prossima linea fisica mediante l’uso di una barra rovesciata alla fine della linea fisica. Abbiamo così apportare questa correzione al nostro programma. Questa correzione del programma quando si riscontrano errori è chiamato il bug fixing.
Salva come backup_ver4.py:
import os
import time
# 1. The files and directories to be backed up are
# specified in a list.
# Example on Windows:
# source = ['"C:\\My Documents"', 'C:\\Code']
# Example on Mac OS X and Linux:
source = ['/Users/swa/notes']
# Notice we had to use double quotes inside the string
# for names with spaces in it.
# 2. The backup must be stored in a
# main backup directory
# Example on Windows:
# target_dir = 'E:\\Backup'
# Example on Mac OS X and Linux:
target_dir = '/Users/swa/backup'
# Remember to change this to which folder you will be using
# Create target directory if it is not present
if not os.path.exists(target_dir):
os.mkdir(target_dir) # make directory
# 3. The files are backed up into a zip file.
# 4. The current day is the name of the subdirectory
# in the main directory.
today = target_dir + os.sep + time.strftime('%Y%m%d')
# The current time is the name of the zip archive.
now = time.strftime('%H%M%S')
# Take a comment from the user to
# create the name of the zip file
comment = raw_input('Enter a comment --> ')
# Check if a comment was entered
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + \
comment.replace(' ', '_') + '.zip'
# Create the subdirectory if it isn't already there
if not os.path.exists(today):
os.mkdir(today)
print 'Successfully created directory', today
# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -r {0} {1}".format(target,
' '.join(source))
# Run the backup
print "Zip command is:"
print zip_command
print "Running:"
if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'
Output:
$ python backup_ver4.py Enter a comment --> added new examples Zip command is: zip -r /Users/swa/backup/20140329/074122_added_new_examples.zip /Users/swa/notes Running: adding: Users/swa/notes/ (stored 0%) adding: Users/swa/notes/blah1.txt (stored 0%) adding: Users/swa/notes/blah2.txt (stored 0%) adding: Users/swa/notes/blah3.txt (stored 0%) Successful backup to /Users/swa/backup/20140329/074122_added_new_examples.zip
Come funziona
Ora questo programma funziona! Lasciatevi andare attraverso i miglioramenti effettivi che avevamo fatto in versione 3. Prendiamo in dell’utente commenti utilizzando la funzione di ingresso e poi verificare se l’utente effettivamente entrato qualcosa dalla ricerca della lunghezza di ingresso utilizzando la funzione len. Se l’utente ha appena premuto Invio senza inserire nulla (forse era solo un backup di routine o particolari non sono state apportate modifiche), allora procediamo come abbiamo fatto prima.
Tuttavia, se un commento è stato fornito, quindi questo è attaccato al nome dell’archivio zip appena prima l’ estensione .zip . Notare che ci sono in sostituzione degli spazi nel commento con caratteri di sottolineatura – questo è perché la gestione dei nomi di file senza spazi è molto più facile.
La quarta versione è un lavoro in modo soddisfacente di script per la maggior parte degli utenti, ma c’è sempre spazio per migliorare. Ad esempio, è possibile includere un livello di verbosità per il programma in cui è possibile specificare un ‘opzione -v per rendere il vostro programma diventa più loquace o un -q per renderlo silenzioso.
Un altro miglioramento possibile sarebbe quella di consentire ulteriori file e directory per essere passato allo script nella riga di comando. Possiamo ottenere questi nomi da sys.argv elenco e possiamo aggiungere al nostro elenco di origine utilizzando il metodo di estensione fornito dall’ elenco classe.
Il più importante perfezionamento sarebbe quella di non utilizzare il sistema operativo. modo del sistema di creazione di archivi e di utilizzare invece il zipfileo tarfile incorporata nei moduli per creare questi archivi. Essi sono parte della libreria standard e già disponibile per voi da usare senza dipendenze esterne sul programma zip per essere disponibile sul computer in uso.
Tuttavia, mi sono state utilizzando il sistema operativo. modo del sistema di creazione di un backup negli esempi di cui sopra per puro scopo pedagogico, in modo che l’esempio è abbastanza semplice da poter essere compreso da tutti ma abbastanza reale per essere utile.
Si può provare a scrivere la quinta versione che utilizza il zipfile modulo al posto della os.La chiamata di sistema?
13.7. The Software Development Process
Siamo ora passati attraverso le varie fasi del processo di scrittura di un software. Queste fasi possono essere riassunte come segue:
- Cosa (Analisi)
- Come (progettazione)
- Fare (implementazione)
- Test (test e debug)
- Utilizzo (funzionamento o di distribuzione)
- Mantenere (Refinement)
Il modo consigliato di scrivere programmi è la procedura che abbiamo seguito nella creazione di script di backup: fare l’analisi e progettazione. Iniziare a implementare con una versione semplice. Eseguire il test e il debug. Utilizzarla per verificare che funzioni come previsto. Ora, aggiungere tutte le funzionalità che desiderate e continuare a ripetere il fare It-Test-ciclo di utilizzo come il numero di volte necessario.
Ricordate:
Il software è cresciuta, non costruito.
Abbiamo visto come creare i nostri propri programmi Python/scripts e le varie fasi coinvolte nella scrittura di tali programmi. Si possono trovare utile per creare il vostro programma personalizzato come abbiamo fatto in questo capitolo in modo che si diventa confortevole con Python come pure di problem-solving.
Ora discuteremo programmazione object-oriented.
In tutti i programmi che abbiamo scritto fino ad ora, abbiamo progettato il nostro programma intorno a funzioni cioè blocchi di istruzioni che manipolano dati. Questa è la cosiddetta procedura orientata a modo di programmazione. Vi è un altro modo di organizzare il vostro programma che è quello di combinare i dati e la funzionalità e avvolgerla dentro qualcosa che si chiama un oggetto. Questo è chiamato la programmazione orientata a oggetti paradigma. La maggior parte del tempo è possibile utilizzare la programmazione procedurale, ma durante la scrittura di programmi di grandi dimensioni o di avere un problema che è più adatta a questo metodo, è possibile utilizzare tecniche di programmazione orientata agli oggetti.
Le classi e gli oggetti sono i due aspetti principali della programmazione orientata agli oggetti. La classe crea un nuovo tipo in cui gli oggettisono istanze della classe. Una analogia è che è possibile avere variabili di tipo int che si traduce in dicendo che le variabili che memorizzano numeri interi sono variabili che sono istanze (oggetti) della classe int.
Nota | Nota per il linguaggio statico di programmatori
Si noti che anche interi sono trattate come oggetti ( int classe). Questo è a differenza di C++ e Java (prima versione 1.5) dove interi sono primitiva tipi nativi. Vedere la guida(int) per ulteriori dettagli sulla classe. In C# e Java 1.5 i programmatori troveranno questo simile a boxing e unboxing di concetto. |
Gli oggetti possono memorizzare dati utilizzando le variabili di ordinaria che appartengono all’oggetto. Le variabili che appartengono a un oggetto o una classe sono denominati campi. Gli oggetti possono anche avere funzionalità utilizzando le funzioni che appartengono a una classe. Tali funzioni vengono chiamatii metodi della classe. Questa terminologia è importante perché ci aiuta a distinguere tra le funzioni e le variabili che sono indipendenti e quelli che appartengono a una classe o un oggetto. Collettivamente, i campi e i metodi possono essere indicati come gli attributi di quella classe.
I campi sono di due tipi – essi possono appartenere a ogni istanza/oggetto della classe o essi possono appartenere alla classe stessa. Essi sono chiamati variabili di istanza e variabili di classe rispettivamente.
Una classe viene creata utilizzando la parola chiave class. I campi e i metodi della classe sono elencati in un blocco dentellata.
Metodi di classe hanno solo una differenza specifica da funzioni comuni – devono avere un ulteriore primo nome che deve essere aggiunta all’inizio dell’elenco di parametri, ma non potete dare un valore per questo parametro quando si chiama il metodo, Python la fornirà. Questa particolare variabile si riferisce all’oggetto stesso, e per convenzione, si è dato il nome di auto.
Anche se è possibile dare un nome qualsiasi per questo parametro, si consiglia di utilizzare il nome di auto – qualsiasi altro nome è sicuramente disapprovato. Ci sono molti vantaggi di utilizzare un nome standard – qualsiasi lettore del vostro programma sarà immediatamente riconoscere e specializzati anche IDEs (ambienti di sviluppo integrato) può aiutare se si usaAuto.
Nota | Nota per C++/Java/C# programmatori
La self in Python è equivalente a questo puntatore in C++ e in questo riferimento in Java e C#. |
Ti starai chiedendo come Python dà il valore per auto e il motivo per cui non è necessario fornire un valore per l’IT. Ecco un esempio per chiarire questo concetto. Dire di avere una classe denominata MyClass e un’istanza di questa classe denominata myobject. Quando si chiama un metodo di questo oggetto Come myobject.metodo(arg1, arg2), questo è automaticamente convertito da Python inMyClass.metodo(myobject, Arg1, arg2) – tutto questo è la speciale auto è di circa.
Questo significa anche che se si dispone di un metodo che non accetta argomenti, allora avete ancora di avere un solo argomento – ilsé.
La classe più semplice possibile è mostrato nel seguente esempio (salva come oop_simplestclass.py).
Classe persona:
Pass # un blocco vuoto
P = persona()
Stampa(p)
Uscita:
$ python oop_simplestclass.py
<__main__.Persona esempio a 0x10171f518>
Come funziona
Abbiamo creato una nuova classe utilizzando la dichiarazione della classe e il nome della classe. Questo è seguito da un blocco frastagliato delle dichiarazioni che costituiscono il corpo della classe. In questo caso abbiamo un blocco vuoto che è indicato utilizzando il passdichiarazione.
Abbiamo poi creare un oggetto/istanza di questa classe utilizzando il nome della classe seguita da una coppia di parentesi. (impareremo more about instantiation nella sezione successiva). Per la nostra verifica, dobbiamo confermare il tipo della variabile con la semplice stampa. Esso ci dice che abbiamo un’istanza della classe Person nel modulo principale .
Notare che l’indirizzo di memoria del computer in cui il tuo scopo è memorizzata viene anche stampato. L’indirizzo avrà un valore diverso sul computer poiché Python può memorizzare l’oggetto ovunque si trova spazio.
Abbiamo già discusso del fatto che le classi/oggetti possono avere metodi appena come le funzioni eccetto che abbiamo un extra selfvariabile. Vediamo ora un esempio (salva come oop_method.py).
Classe persona:
class Person:
pass # An empty block
p = Person()
print(p)
Uscita:
$ python oop_simplestclass.py <__main__.Person instance at 0x10171f518>
Qui possiamo vedere l’ auto in azione. Notare che il dire_hi metodo non accetta parametri ma ha ancora il sé nella definizione di funzione.
Ci sono molti nomi di metodo che hanno un significato speciale in Python classi. Vedremo il significato del metodo init ora.
Il metodo init viene eseguito non appena un oggetto di una classe viene istanziato. Il metodo è utile per fare qualsiasi inizializzazione si desidera fare con il vostro oggetto. Avviso la doppia sottolineatura sia all’inizio e alla fine del nome.
Esempio (salva come oop_init.py):
class Person:
def __init__(self, name):
self.name = name
def say_hi(self):
print 'Hello, my name is', self.name
p = Person('Swaroop')
p.say_hi()
# The previous 2 lines can also be written as
# Person('Swaroop').say_hi()
Output:
$ python oop_init.py Hello, my name is Swaroop
Come funziona
Qui dobbiamo definire il metodo init come prendendo il nome di un parametro (insieme con la consueta auto). Qui abbiamo semplicemente creare un nuovo campo chiamato anche il nome. Avviso di queste sono due variabili diverse anche se entrambe sono chiamati ‘Nome’. Non vi è alcun problema poiché la notazione puntata self.name significa che vi è qualcosa chiamato “Nome” che è parte dell’oggetto chiamato “self” e l’altro è il nome di una variabile locale. Siccome noi esplicitamente indicare il cui nome ci si riferisce, non vi è nessuna confusione.
La cosa più importante, notare che non possiamo chiamare in modo esplicito il metodo init ma passare gli argomenti in parentesi che segue il nome della classe quando si crea una nuova istanza della classe. Questo è il significato particolare di questo metodo.
Ora siamo in grado di utilizzare il campo self.name nei nostri metodi che è dimostrata nel metodo sayHi.
14.5. Class And Object Variables
Abbiamo già discusso la funzionalità parte di classi e oggetti (ovvero metodi), ora impariamo circa la parte di dati. La parte di dati, cioè i campi, sono niente ma ordinario variabili che sono legati a spazi dei nomi di classi e oggetti. Questo significa che questi nomi sono valide nel contesto di queste classi e oggetti solo. Ecco perché essi sono chiamatigli spazi dei nomi.
Ci sono due tipi di campi – variabili di classe e variabili oggetto che sono classificati a seconda se la classe o l’oggetto possiede le variabili rispettivamente.
Variabili di classe sono condivise – essi possono essere accessibili da tutte le istanze di tale classe. Vi è solo una copia della variabile di classe e quando un qualsiasi oggetto apporta una modifica a una variabile di classe, che il cambiamento sarà visto da tutte le altre istanze.
Variabili oggetto sono di proprietà di ciascun oggetto individuo/istanza della classe. In questo caso, ogni oggetto ha una propria copia del campo e cioè non sono condivise e non sono legati in alcun modo per il campo con lo stesso nome in una diversa istanza. Un esempio potrà rendere di facile comprensione (salva come oop_objvar.py):
Robot di classe:
class Robot:
"""Represents a robot, with a name."""
# A class variable, counting the number of robots
population = 0
def __init__(self, name):
"""Initializes the data."""
self.name = name
print "(Initializing {})".format(self.name)
# When this person is created, the robot
# adds to the population
Robot.population += 1
def die(self):
"""I am dying."""
print "{} is being destroyed!".format(self.name)
Robot.population -= 1
if Robot.population == 0:
print "{} was the last one.".format(self.name)
else:
print "There are still {:d} robots working.".format(
Robot.population)
def say_hi(self):
"""Greeting by the robot.
Yeah, they can do that."""
print "Greetings, my masters call me {}.".format(self.name)
@classmethod
def how_many(cls):
"""Prints the current population."""
print "We have {:d} robots.".format(cls.population)
droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()
droid2 = Robot("C-3PO")
droid2.say_hi()
Robot.how_many()
print "\nRobots can do some work here.\n"
print "Robots have finished their work. So let's destroy them."
droid1.die()
droid2.die()
Robot.how_many()
Output:
$ python oop_objvar.py (Initializing R2-D2) Greetings, my masters call me R2-D2. We have 1 robots. (Initializing C-3PO) Greetings, my masters call me C-3PO. We have 2 robots. Robots can do some work here. Robots have finished their work. So let's destroy them. R2-D2 is being destroyed! There are still 1 robots working. C-3PO is being destroyed! C-3PO was the last one. We have 0 robots.
Come funziona
Questo è un esempio di lunga ma aiuta a dimostrare la natura di classe e variabili oggetto. Qui, la popolazione appartiene alla classe di robot e quindi è una variabile di classe. Il nome della variabile appartiene all’oggetto (è assegnato utilizzando auto) e quindi è una variabile oggetto.
Così, ci riferiamo alla popolazione variabile di classe come Robot.popolazione e non come auto.la popolazione. Ci riferiamo alla variabile oggetto nome utilizzando la notazione self.name nei metodi di quell’oggetto. Ricordare questa semplice differenza tra classe e variabili oggetto. Notare anche che una variabile oggetto con lo stesso nome di una variabile di classe si nasconde la variabile di classe!
Invece di Robot.la popolazione, abbiamo potuto anche usato auto.__class__.popolazione perché ogni oggetto si riferisce alla classe tramite l’auto.__class__ attributo.
Come_molti è effettivamente un metodo che appartiene alla classe e non all’oggetto. Questo significa che si può definire come unclassmethod o un staticmethod a seconda se abbiamo bisogno di sapere a quale classe siamo parte del. Poiché si fa riferimento a una variabile di classe, utilizziamo classmethod.
Abbiamo segnato la come_molte metodo come un metodo di classe utilizzando un decorator.
Decoratori può essere immaginato come un tasto di scelta rapida per chiamare una funzione wrapper, quindi applicare [email protected] è la stessa chiamata:
Come_molti = classmethod(come_molti)
Osservare che il metodo Init viene utilizzato per inizializzare il robot istanza con un nome. In questo metodo, abbiamo aumentare il conteggio della popolazione da 1 poiché abbiamo uno più robot essendo aggiunto. Inoltre osservare che i valori di self.name è specifica per ogni oggetto che indica la natura delle variabili oggetto.
Ricordare che è necessario fare riferimento alle variabili e metodi dello stesso oggetto utilizzando l’ auto solo. Questo è chiamato unattributo di riferimento.
In questo programma, possiamo anche vedere l’uso di docstrings per le classi come pure metodi. Siamo in grado di accedere alla classe docstring in fase di runtime utilizzando robot.doc e il metodo docstring come Robot.dire_hi.doc
Nella matrice di metodo, si limita a diminuire il Robot.il conteggio della popolazione da 1.
Tutti i membri della classe sono pubblici. Unica eccezione: se si utilizzano i membri dati con i nomi utilizzando la doppia sottolineatura prefisso come __privatevar, Python utilizza nome-mangling per effettivamente rendere una variabile privata.
Così, la convenzione seguita è che qualsiasi variabile che deve essere utilizzato solo entro la classe o l’oggetto deve iniziare con un carattere di sottolineatura e tutti gli altri nomi sono pubblici e possono essere utilizzati da altre classi/oggetti. Ricordate che questa è solo una convenzione e non è imposto da Python (tranne che per la doppia sottolineatura prefisso).
Nota | Nota per C++/Java/C# programmatori
Tutti i membri della classe (compresi i membri dati) sono pubblici e tutti i metodi sono virtuali in Python. |
Uno dei principali vantaggi della programmazione orientata a oggetti è il riutilizzo del codice e uno dei modi in cui questo viene ottenuto è attraverso il meccanismo di ereditarietà. Ereditarietà può essere meglio immaginato come implementare un tipo e un sottotipo relazione tra le classi.
Si supponga di voler scrivere un programma che ha per tenere traccia degli insegnanti e studenti di un college. Essi hanno alcune caratteristiche in comune come il nome, l’età e l’indirizzo. Essi hanno anche caratteristiche specifiche come lo stipendio, corsi e foglie di insegnanti e, segni e tasse per gli studenti.
È possibile creare due classi indipendenti per ogni tipo di processo e di loro ma aggiungendo una nuova caratteristica comune significherebbe aggiunta ad entrambe queste classi indipendenti. Questo diventa rapidamente la loro pesantezza.
Un modo migliore sarebbe quella di creare una classe comune chiamato SchoolMember e hanno quindi l’insegnante e studente classiereditano da questa classe si faranno cioè sotto-tipi di questo tipo (classe) e poi possiamo aggiungere le caratteristiche specifiche di questi sotto-tipi.
Ci sono molti vantaggi a questo approccio. Se dobbiamo aggiungere/modificare alcuna funzionalità in SchoolMember, questo viene automaticamente riportato in sottotipi come bene. Ad esempio, è possibile aggiungere una nuova scheda ID campo sia per gli insegnanti che per gli studenti semplicemente aggiungendo alla classe SchoolMember. Tuttavia i cambiamenti in sottotipi non influiscono sugli altri sottotipi. Un altro vantaggio è che se si può fare riferimento ad un insegnante o studente oggetto come un oggetto SchoolMember che potrebbero essere utili in alcune situazioni come il conteggio del numero di membri della scuola. Questo è chiamato il polimorfismo dove un sub-type può essere sostituito in qualsiasi situazione in cui un genitore è previsto un tipo cioè l’oggetto può essere trattata come una istanza della classe padre.
Inoltre osservare che abbiamo il riutilizzo del codice della classe principale e non abbiamo bisogno di ripetere in diverse classi come avremmo dovuto nel caso avessimo usato classi indipendenti.
La classe SchoolMember in questa situazione è nota come la classe di base o la superclasse. L’ insegnante e gli studentidelle classi sono chiamati classi derivate o sottoclassi.
Ora staremo a vedere questo esempio come un programma (salva come oop_sottoclasse.py):
Classe SchoolMember:
class SchoolMember:
'''Represents any school member.'''
def __init__(self, name, age):
self.name = name
self.age = age
print '(Initialized SchoolMember: {})'.format(self.name)
def tell(self):
'''Tell my details.'''
print 'Name:"{}" Age:"{}"'.format(self.name, self.age),
class Teacher(SchoolMember):
'''Represents a teacher.'''
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print '(Initialized Teacher: {})'.format(self.name)
def tell(self):
SchoolMember.tell(self)
print 'Salary: "{:d}"'.format(self.salary)
class Student(SchoolMember):
'''Represents a student.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print '(Initialized Student: {})'.format(self.name)
def tell(self):
SchoolMember.tell(self)
print 'Marks: "{:d}"'.format(self.marks)
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)
# prints a blank line
print
members = [t, s]
for member in members:
# Works for both Teachers and Students
member.tell()
Output:
$ python oop_subclass.py (Initialized SchoolMember: Mrs. Shrividya) (Initialized Teacher: Mrs. Shrividya) (Initialized SchoolMember: Swaroop) (Initialized Student: Swaroop) Name:"Mrs. Shrividya" Age:"40" Salary: "30000" Name:"Swaroop" Age:"25" Marks: "75"
Come funziona
Utilizzare l’ereditarietà, specifichiamo la classe base nomi in una tupla che segue il nome della classe nella definizione della classe. Abbiamo poi osservare che il metodo Init della classe base viene chiamato esplicitamente utilizzando la variabile auto in modo che possiamo inizializzare la classe base parte dell’oggetto. Questo è molto importante ricordare – Python non si chiama automaticamente il costruttore della classe base, è necessario chiamare in modo esplicito da te.
Abbiamo anche osservare che possiamo chiamare i metodi della classe di base da utilizzato come prefisso per il nome della classe per la chiamata del metodo e poi passa in sé variabile lungo con argomenti.
Notare che è possibile trattare le istanze di insegnante o studente come solo istanze di SchoolMember quando utilizziamo il metodo dicono della classe SchoolMember.
Osservare inoltre che il metodo di raccontare del sottotipo è chiamato e non il metodo dicono della classe SchoolMember. Un modo per capire questo è che Python inizia sempre alla ricerca per i metodi del tipo effettivo, che in questo caso non. Se non è riuscito a trovare il metodo, si inizia a guardare i metodi appartenenti a classi di base uno per uno nell’ordine in cui sono specificati nella tupla nella definizione della classe.
Una nota sulla terminologia – se più di una classe è elencato in eredità tupla, allora è chiamato ereditarietà multipla.
La virgola finale viene utilizzato alla fine del comunicato stampa in la superclasse di tell() metodo per stampare una linea e consentire la successiva stampa di continuare sulla stessa linea. Questo è un trucco per rendere la stampa non stampa una \n (newline) simbolo alla fine della stampa.
Ora abbiamo esplorato i vari aspetti delle classi e oggetti così come le varie terminologie ad esso associato. Abbiamo visto anche i vantaggi e le insidie della programmazione object-oriented. Python è altamente object-oriented e la comprensione di questi concetti con attenzione vi aiuterà molto a lungo termine.
Avanti, dovremo imparare a trattare con l’ingresso/uscita e modalità di accesso ai file in Python.
Vi sono situazioni in cui il tuo programma ha per interagire con l’utente. Per esempio, si potrebbe desiderare di prendere input da parte dell’utente e quindi stampare alcuni risultati indietro. Si può ottenere questo risultato utilizzando il raw_input(), funzione e istruzione di stampa rispettivamente.
Per l’uscita, possiamo anche utilizzare i vari metodi della str (stringa) classe. È ad esempio possibile utilizzare il metodo rjust per ottenere una stringa che è giustificato a destra per una larghezza specificata. Vedere la guida(str) per ulteriori dettagli.
Un altro tipo comune di ingresso/uscita è trattare con i file. La capacità di creare, leggere e scrivere file è essenziale per molti programmi e analizzeremo questo aspetto in questo capitolo.
Salvare questo programma come io_input.py:
def reverse(text):
return text[::-1]
def is_palindrome(text):
return text == reverse(text)
something = raw_input("Enter text: ")
if is_palindrome(something):
print "Yes, it is a palindrome"
else:
print "No, it is not a palindrome"
Output:
$ python io_input.py Enter text: sir No, it is not a palindrome $ python io_input.py Enter text: madam Yes, it is a palindrome $ python io_input.py Enter text: racecar Yes, it is a palindrome
Come funziona
Utilizziamo la funzione di affettatura ad invertire il testo. Abbiamo già visto come si può fare slices from sequences utilizzando ilseq[a:b] Codice a partire dalla posizione a alla posizione b. Siamo inoltre in grado di fornire un terzo argomento che determina la fase con cui il sezionamento è effettuato. La fase di default è 1, a causa della quale si restituisce una parte continua di testo. Dando una fase negativa, cioè -1 restituirà il testo in senso inverso.
La raw_input() funzione prende una stringa come argomento e li visualizza per l’utente. Quindi attende per l’utente a digitare qualcosa e premere il tasto di invio. Una volta che l’utente ha inserito e premuto il tasto Ritorno, la raw_input(), funzione ritornerà poi che il testo che l’utente ha immesso.
Dobbiamo assumere che il testo e la retromarcia. Se il testo originale e il testo invertito sono uguali, allora il testo è una palindrome.
Per controllare se un testo è un palindromo dovrebbe anche ignorare la punteggiatura, gli spazi e il caso. Per esempio, “luogo di voto, sir.” è anche un palindromo ma il nostro programma attuale non dicono che è. È possibile migliorare il suddetto programma di riconoscere questo palindromo?
Se avete bisogno di un suggerimento, l’idea è che… [2]
È possibile aprire e utilizzare i file per la lettura o la scrittura con la creazione di un oggetto della classe file e utilizzando le sue leggi, readlineo metodi di scrittura in modo appropriato per leggere da o scrivere sul file. La capacità di leggere o scrivere nel file dipende dalla modalità che hai specificato per il file di apertura. Infine, quando si è finito con il file, è possibile chiamare il metodo Close per raccontare Python che abbiamo fatto usando il file.
Esempio (salva come io_using_file.py):
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
# Open for 'w'riting
f = open('poem.txt', 'w')
# Write text to file
f.write(poem)
# Close the file
f.close()
# If no mode is specified,
# 'r'ead mode is assumed by default
f = open('poem.txt')
while True:
line = f.readline()
# Zero length indicates EOF
if len(line) == 0:
break
# The `line` already has a newline
# at the end of each line
# since it is reading from a file.
print line,
# close the file
f.close()
Output:
$ python io_using_file.py Programming is fun When the work is done if you wanna make your work also fun: use Python!
Come funziona
Per prima cosa, aprire un file utilizzando il built-in funzione apri e specificando il nome del file e la modalità in cui si desidera aprire il file. La modalità può essere una modalità di lettura (“R”), modalità scrittura (‘W’) o modalità append (‘a’). Si può anche specificare se ci sono la lettura, la scrittura, o aggiungendo in modalità testo (‘T’) o modalità binaria (‘b’). In realtà vi sono molte più modalità disponibili e aiutare(aperto) vi darà maggiori dettagli su di loro. Per impostazione predefinita, open() considera il file per essere un ‘t’ext file e lo apre in ‘r’ead modalità.
Nel nostro esempio abbiamo prima di aprire il file in scrittura in modalità testo e utilizzare il metodo di scrittura del file oggetto per scrivere il file e poi abbiamo finalmente chiudere il file.
Abbiamo poi aprire lo stesso file di nuovo per la lettura. Non abbiamo bisogno di specificare una modalità perché ‘read file di testo” è la modalità predefinita. Abbiamo letto in ciascuna riga del file utilizzando il metodo readline in un loop. Questo metodo restituisce una linea completa compreso il carattere di ritorno a capo alla fine della linea. Quando viene restituita una stringa vuota, significa che abbiamo raggiunto la fine del file e abbiamo ‘rompere’ fuori del loop.
Alla fine abbiamo finalmente chiudere il file.
Controllare ora il contenuto del poema.txt per confermare che il programma abbia effettivamente scritte e lette dal file.
Python fornisce un modulo standard chiamato pickle tramite il quale è possibile memorizzare qualsiasi pianura Python oggetto in un file e poi farlo tornare più tardi. Questo è chiamato memorizzare l’oggetto persistente.
Esempio (salva come io_pickle.py):
import pickle
# The name of the file where we will store the object
shoplistfile = 'shoplist.data'
# The list of things to buy
shoplist = ['apple', 'mango', 'carrot']
# Write to the file
f = open(shoplistfile, 'wb')
# Dump the object to a file
pickle.dump(shoplist, f)
f.close()
# Destroy the shoplist variable
del shoplist
# Read back from the storage
f = open(shoplistfile, 'rb')
# Load the object from the file
storedlist = pickle.load(f)
print storedlist
Output:
$ python io_pickle.py ['apple', 'mango', 'carrot']
Come funziona
Per memorizzare un oggetto in un file, dobbiamo innanzitutto aprire il file nel rito w binary mode e poi chiamare la funzione di scarico del modulo di salamoia. Questo processo è chiamato il decapaggio di.
Abbiamo poi recuperare l’oggetto utilizzando la funzione di caricamento del modulo di salamoia che restituisce l’oggetto. Questo processo è chiamato unpickling.
Finora, quando ci è stato iscritto e utilizzando le stringhe, o di lettura e di scrittura in un file, abbiamo utilizzato una semplice solo caratteri in inglese. Se vogliamo essere in grado di leggere e scrivere in altre lingue non-inglesi, abbiamo bisogno di utilizzare il tipo di unicode e tutto inizia con il carattere u:
>>> "hello world" 'hello world' >>> type("hello world") <type 'str'> >>> u"hello world" u'hello world' >>> type(u"hello world") <type 'unicode'>
Utilizziamo il tipo unicode invece di stringhe per assicurarsi che siamo noi a gestire lingue non-inglesi nei nostri programmi. Tuttavia, quando abbiamo di leggere o scrivere in un file o quando parliamo con altri computer su Internet, abbiamo bisogno di convertire il nostro stringhe Unicode in un formato che può essere inviato e ricevuto e che formato è chiamato “UTF-8”. Siamo in grado di leggere e scrivere in tale formato utilizzando una semplice parola chiave tesi al nostro standard funzione apri:
# encoding=utf-8
import io
f = io.open("abc.txt", "wt", encoding="utf-8")
f.write(u"Imagine non-English language here")
f.close()
text = io.open("abc.txt", encoding="utf-8").read()
print text
Come funziona
È possibile ignorare l’ istruzione import per ora esploreremo che in dettaglio nella modules chapter.
Ogni volta che si scrive un programma che utilizza Unicode letterali come abbiamo usato in precedenza, dobbiamo assicurarci che Python stesso è stato detto che il nostro programma utilizza la codifica UTF-8, e dobbiamo mettere la codifica #=utf-8 commento alla sommità del nostro programma.
Dobbiamo usare io.open e fornire il “codifica” e “decodifica” tesi a raccontare Python che stiamo usando unicode, e in effetti abbiamo a passare in una stringa in forma di u”” per chiarire che stiamo utilizzando le stringhe Unicode.
Si dovrebbe imparare di più su questo argomento leggendo:
- “The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets”
- Python Unicode Howto
- Pragmatic Unicode talk by Nat Batchelder
Abbiamo discusso di vari tipi di input/output, circa il trattamento dei file, circa la salamoia modulo e su Unicode.
Successivamente, esploreremo il concetto delle eccezioni.
Le eccezioni si verificano quando situazioni eccezionali che si verificano nel vostro programma. Per esempio, cosa succede se si sta leggendo un file e il file non esiste? O che cosa se eliminato accidentalmente quando il programma era in esecuzione? Tali situazioni vengono gestiti utilizzando le eccezioni.
Analogamente, cosa fare se il tuo programma ha avuto alcune dichiarazioni non valido? Questo viene gestito da Python che alza le mani e ti dice si è verificato un errore.
Considerare una semplice funzione di stampa chiamata. Che cosa succede se abbiamo misspelt stampa come stampa? Nota la capitalizzazione. In questo caso, Pythonsolleva un errore di sintassi.
>>> Print "Hello World" File "<stdin>", line 1 Print "Hello World" ^ SyntaxError: invalid syntax >>> print "Hello World" Hello World
Osservare che una SyntaxError è sollevato e anche la posizione in cui è stato rilevato l’errore viene stampato. Questo è ciò che un handler di errore per questo errore non.
>>> s = raw_input('Enter something --> ') Enter something --> Traceback (most recent call last): File "<stdin>", line 1, in <module> EOFError
EOFError
Python genera un errore chiamato EOFError che sostanzialmente significa che ha trovato un estremità del simbolo di file (che è rappresentata dactrl-d) quando non si aspettano di vedere.
Siamo in grado di gestire le eccezioni utilizzando il provare..Salvo dichiarazione. Sostanzialmente abbiamo messo il nostro solito dichiarazioni entro il cerca-blocco e mettere tutti i nostri gestori di errore in salvo-blocco.
Esempio (salva come eccezioni_handle.py):
try:
text = raw_input('Enter something --> ')
except EOFError:
print 'Why did you do an EOF on me?'
except KeyboardInterrupt:
print 'You cancelled the operation.'
else:
print 'You entered {}'.format(text)
Output:
# Press ctrl + d $ python exceptions_handle.py Enter something --> Why did you do an EOF on me? # Press ctrl + c $ python exceptions_handle.py Enter something --> ^CYou cancelled the operation. $ python exceptions_handle.py Enter something --> No exceptions You entered No exceptions
Come funziona
Abbiamo messo tutte le dichiarazioni che potrebbero sollevare eccezioni/errori all’interno del blocco try e poi mettere i gestori per le opportune errori/eccezioni nel ad eccezione della clausola/blocco. La clausola di eccezione può gestire un singolo errore specificato o eccezione o una fra parentesi elenco di errori/eccezioni. Se nessun nome di errori o eccezioni sono forniti, sarà in grado di gestire tuttigli errori e le eccezioni.
Nota che non vi deve essere almeno una clausola di eccezione associato ad ogni prova clausola. In caso contrario, qual è il punto di avere un blocco try?
Se un errore o qualsiasi eccezione non gestita, allora il valore di default del gestore di Python è chiamato che appena si arresta l’esecuzione del programma e stampa un messaggio di errore. Abbiamo già visto in azione al di sopra.
È possibile avere anche una clausola else associato con una prova..tranne il blocco. La clausola else viene eseguita se non fa eccezione si verifica.
Nel prossimo esempio, possiamo anche vedere come ottenere l’oggetto di eccezione in modo che possiamo recuperare informazioni aggiuntive.
È possibile sollevare eccezioni utilizzando la dichiarazione di sollevamento fornendo il nome di errore/eccezione e l’oggetto di eccezione che deve essere gettata.
Il messaggio di errore o di eccezione che è possibile sollevare dovrebbe essere una classe che direttamente o indirettamente deve essere una classe derivata della classe di eccezione.
Esempio (salva come eccezioni_sollevamento.py):
Classe ShortInputException(eccezione):
class ShortInputException(Exception):
'''A user-defined exception class.'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try:
text = raw_input('Enter something --> ')
if len(text) < 3:
raise ShortInputException(len(text), 3)
# Other work can continue as usual here
except EOFError:
print 'Why did you do an EOF on me?'
except ShortInputException as ex:
print ('ShortInputException: The input was ' + \
'{0} long, expected at least {1}')\
.format(ex.length, ex.atleast)
else:
print 'No exception was raised.'
Output:
$ python exceptions_raise.py Enter something --> a ShortInputException: The input was 1 long, expected at least 3 $ python exceptions_raise.py Enter something --> abc No exception was raised.
Come funziona
Qui stiamo creando i nostri tipo di eccezione. Questo nuovo tipo di eccezione è chiamato ShortInputException. Esso ha due campi -lunghezza che è la lunghezza del dato in ingresso, e atleast che è la lunghezza minima che il programma si aspettava.
In salvo clausola, ricordiamo la classe di errore che verrà memorizzato come il nome della variabile per contenere il corrispondente errore/oggetto di eccezione. Questo è analogo ai parametri e argomenti in una chiamata di funzione. In questa particolare ad eccezione dellaclausola, utilizziamo la lunghezza e almeno i campi dell’oggetto di eccezione per stampare un messaggio appropriato per l’utente.
Supponiamo che si sta leggendo un file nel tuo programma. In che modo è possibile assicurarsi che il file oggetto è chiuso correttamente se o non un eccezione è stata sollevata? Questo può essere fatto usando il blocco finally.
Salvare questo programma come eccezioni_infine.py:
import sys
import time
f = None
try:
f = open("poem.txt")
# Our usual file-reading idiom
while True:
line = f.readline()
if len(line) == 0:
break
print line,
sys.stdout.flush()
print "Press ctrl+c now"
# To make sure it runs for a while
time.sleep(2)
except IOError:
print "Could not find file poem.txt"
except KeyboardInterrupt:
print "!! You cancelled the reading from the file."
finally:
if f:
f.close()
print "(Cleaning up: Closed the file)"
Output:
$ python exceptions_finally.py Programming is fun Press ctrl+c now ^C!! You cancelled the reading from the file. (Cleaning up: Closed the file)
Come funziona
Facciamo il solito file-leggere roba, ma abbiamo introdotto arbitrariamente dormire per 2 secondi dopo la stampa di ogni linea utilizzando il tempo.La funzione di stop in modo che il programma viene eseguito lentamente (Python è molto veloce per natura). Quando il programma è ancora in esecuzione, premere ctrl + c per interrompere o annullare il programma.
Osservare che la KeyboardInterrupt eccezione viene generata e il programma si chiude. Tuttavia, prima che il programma esce, la clausola infine viene eseguito e il file oggetto è sempre chiuso.
Notare che si utilizza sys.stdout.flush() dopo la stampa in modo che venga stampato a schermo immediatamente.
Acquisizione di una risorsa nel blocco try e successivamente il rilascio della risorsa nel blocco finally è un modello comune. Quindi vi è anche una con la dichiarazione che permette a questo di essere fatto in una maniera pulita:
Salva come eccezioni_using_con.py:
with open("poem.txt") as f:
for line in f:
print line,
Come funziona
L’uscita dovrebbe essere lo stesso come il precedente esempio. La differenza qui è che stiamo utilizzando la funzione Apri con l affermazione – abbiamo lasciato la chiusura del file per essere eseguito automaticamente da con open.
Cosa succede dietro le quinte è che vi è un protocollo utilizzato da con dichiarazione. Esso recupera l’oggetto restituito dalla dichiarazione aperta, chiamiamolo “il file” in questo caso.
Si chiama sempre il il file.immettere funzione prima di avviare il blocco di codice al di sotto di esso e chiama sempre il file.Usciredopo la finitura del blocco di codice.
Quindi il codice che avremmo scritto in un blocco finally dovrebbe essere presa cura di automaticamente mediante il metodo exit. Questo è ciò che ci aiuta a evitare di dover utilizzare esplicito di provare..infine istruzioni ripetutamente.
Ulteriori discussioni su questo argomento è oltre la portata di questo libro, quindi si prega di fare riferimento PEP 343 ad una esauriente spiegazione.
Abbiamo discusso l’utilizzo di provare..tranne e provare a..infine le dichiarazioni. Abbiamo visto come creare i nostri propri tipi di eccezione e come sollevare eccezioni come bene.
Successivamente, esploreremo il Python libreria Standard.
Il Python libreria Standard contiene un enorme numero di moduli utili ed è parte di ogni standard di installazione di Python. È importante acquisire familiarità con il Python libreria standard poiché molti problemi possono essere risolti velocemente se si ha familiarità con la gamma di cose che queste librerie possono fare.
Esploreremo alcune delle comunemente utilizzati moduli in questa libreria. È possibile trovare i dettagli completi per tutti i moduli in Python la libreria standard nella ‘Library Reference’ section documentazione fornita con la vostra installazione di Python.
Consentono di esplorare alcuni utili moduli.
Attenzione | Se si trova negli argomenti di questo capitolo troppo avanzata, si può saltare questo capitolo. Tuttavia, consiglio vivamente di ritornare su questo capitolo quando vi sentite più a vostro agio con la programmazione utilizzando Python. |
Il modulo sys contiene specifici del sistema funzionalità. Abbiamo già visto che il sys.argv elenco contiene gli argomenti della riga di comando.
Si supponga di voler verificare la versione del software Python utilizzato, il modulo sys ci dà le informazioni.
$ python
>>> import sys >>> sys.version_info sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0) >>> sys.version_info.major == 2 True
Come funziona
Il sys modulo ha una versione_info tupla che ci fornisce le informazioni sulla versione. La prima voce è la versione principale. Possiamo estrarre questa informazione per utilizzarlo.
Che cosa succede se si voleva avere alcuni dei messaggi di debug o messaggi importanti per essere immagazzinati da qualche parte in modo che sia possibile verificare se il programma è stato eseguito come vi aspettate? Come fare per “memorizzare da qualche parte” questi messaggi? Questo può essere ottenuto usando il modulo di registrazione.
Salva come stdlib_logging.py:
import os, platform, logging
if platform.platform().startswith('Windows'):
logging_file = os.path.join(os.getenv('HOMEDRIVE'),
os.getenv('HOMEPATH'),
'test.log')
else:
logging_file = os.path.join(os.getenv('HOME'),
'test.log')
print "Logging to", logging_file
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s : %(levelname)s : %(message)s',
filename = logging_file,
filemode = 'w',
)
logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")
Output:
$ python stdlib_logging.py Logging to /Users/swa/test.log $ cat /Users/swa/test.log 2014-03-29 09:27:36,660 : DEBUG : Start of the program 2014-03-29 09:27:36,660 : INFO : Doing something 2014-03-29 09:27:36,660 : WARNING : Dying now
Come funziona
Utilizziamo tre moduli della libreria standard – il modulo del sistema operativo per interagire con il sistema operativo, il modulo di piattaforma per informazioni circa la piattaforma cioè il sistema operativo e il modulo di registrazione per registrareinformazioni.
Primo, dobbiamo verificare il sistema operativo che stiamo utilizzando controllando la stringa restituita dalla piattaforma.piattaforma() (per ulteriori informazioni, vedere Importare piattaforma; help(piattaforma)). Se si tratta di Windows, abbiamo figura l’home drive, la relativa cartella Home di e il nome del file in cui si desidera memorizzare le informazioni. Mettere queste tre parti insieme, possiamo ottenere in pieno la posizione del file. Per altre piattaforme, abbiamo bisogno di sapere solo la cartella home dell’utente e ottenere la piena la posizione del file.
Utilizziamo il os.Path.join() funzione di mettere queste tre parti della posizione insieme. Il motivo per cui l’uso di una speciale funzione piuttosto che semplicemente aggiungendo le stringhe insieme è perché questa funzione garantirà la piena posizione corrisponda al formato previsto dal sistema operativo.
Possiamo configurare il modulo di registrazione per scrivere tutti i messaggi in un particolare formato per il file che abbiamo specificato.
Infine, possiamo mettere i messaggi che sono o intendono per il debug, informazioni, avviso o anche i messaggi critici. Una volta che il programma ha eseguito, siamo in grado di controllare questo file e sapremo che cosa è accaduto nel programma, anche se nessuna informazione è stata visualizzata per l’utente che esegue il programma.
17.3. Module of the Week Series
Vi è molto di più per essere esplorato nella libreria standard come debugging, handling command line options, regular expressions e così via.
Il modo migliore di esplorare ulteriormente la libreria standard è di leggere Doug Hellmann l’eccellente Python Module of the Weekserie (disponibile anche come book) e la lettura Python documentation.
Abbiamo esplorato alcune delle funzionalità di molti moduli in Python la libreria standard. È altamente raccomandato per navigare attraverso il Python Standard Library documentation per avere un’idea di tutti i moduli che sono disponibili.
Prossimo parleremo di vari aspetti di Python che renderà il nostro tour di Python più completa.
Finora abbiamo coperto la maggioranza dei vari aspetti di Python che potrete utilizzare. In questo capitolo tratteremo alcuni ulteriori aspetti che renderanno la nostra conoscenza di Python più ben arrotondati.
Hai mai voluto restituire due valori diversi da una funzione? È possibile. Tutto ciò che dovete fare è utilizzare una tupla.
>>> def get_error_details(): ... return (2, 'details') ... >>> errnum, errstr = get_error_details() >>> errnum 2 >>> errstr 'details'
Notare che l’utilizzo di un, b = <qualche espressione> interpreta il risultato dell’espressione come una tupla con due valori.
Questo significa anche che il modo più veloce per scambiare due variabili in Python è:
>>> a = 5; b = 8 >>> a, b (5, 8) >>> a, b = b, a >>> a, b (8, 5)
Ci sono alcuni metodi come la init e del metodi che hanno un significato speciale in classi.
Metodi speciali sono usate per imitare alcuni comportamenti dei tipi incorporati. Ad esempio, se si desidera utilizzare la x[tasto]Operazione di indicizzazione per la vostra classe (proprio come si usa per le liste e tuple), quindi tutto quello che dovete fare è implementare ilgetitem() metodo e il vostro lavoro è fatto. Se si pensa che questo è ciò che fa di Python per la classe list stessa!!
Alcuni utili metodi speciali sono elencati nella seguente tabella. Se si desidera conoscere tutti i metodi speciali, see the manual.
Init(self, …)
Questo metodo viene chiamato appena prima che il nuovo oggetto creato è tornato per l’uso.
Canc(self).
Richiamato poco prima che l’oggetto è distrutto (che ha distribuzione imprevedibili, in modo evitare di utilizzare questo)
Str(self).
Chiamato quando si usa l’ istruzione di stampa o quando str() è utilizzata.
Lt(self, altro)
Chiamato quando meno dell’ operatore (<) viene utilizzato. Analogamente, non vi sono metodi speciali per tutti gli operatori (+, >, ecc.)
Getitem(self, chiave)
Chiamato quando x[tasto] Operazione di indicizzazione viene utilizzato.
Len(self).
Chiamato quando il built-in funzione Len() è utilizzata per la sequenza oggetto.
Abbiamo visto che ogni blocco di istruzioni è impostata a prescindere dal resto dal proprio livello di indentazione. Beh, c’è un avvertimento. Se il blocco di istruzioni contiene solo una singola istruzione, quindi è possibile specificare è sulla stessa linea di, diciamo, un’istruzione condizionale o dichiarazione di loop. Il seguente esempio dovrebbe chiarire questo punto:
>>> flag = True >>> if flag: print 'Yes' ... Yes
Notare che la sola istruzione è utilizzato in luogo e non come un blocco separato. Anche se è possibile utilizzare questo per rendere il programma più piccolo, mi consiglia vivamente di evitare questo breve-metodo di taglio, tranne che per il controllo di errore, principalmente perché sarà molto più facile per aggiungere un ulteriore dichiarazione se si sta utilizzando il corretto rientro.
Una dichiarazione di lambda è utilizzato per creare nuovi oggetti della funzione. In sostanza, il lambda prende un parametro seguita da una singola espressione solo che diventa il corpo della funzione e il valore di questa espressione viene restituito dalla funzione di nuovo.
Esempio (salva come più_lambda.py):
points = [ { 'x' : 2, 'y' : 3 },
{ 'x' : 4, 'y' : 1 } ]
points.sort(key=lambda i : i['y'])
print points
Output:
$ python more_lambda.py [{'y': 1, 'x': 4}, {'y': 3, 'x': 2}]
Come funziona
Notare che il metodo di ordinamento di un elenco può prendere un parametro chiave che determina il modo in cui l’elenco è ordinato (di solito sappiamo solo circa un ordine ascendente o discendente). Nel nostro caso vogliamo fare un ordinamento personalizzato, e per questo abbiamo bisogno di scrivere una funzione ma invece di scrivere un distinto def blocco per una funzione che verrà utilizzato solo in questo posto, utilizziamo un’espressione lambda per creare una nuova funzione.
Elencare i livelli di genericità sono utilizzati per derivare una nuova lista da un elenco esistente. Si supponga di avere un elenco di numeri e si desidera ottenere un corrispondente elenco con tutti i numeri moltiplicato per 2 solo quando il numero stesso è maggiore di 2. Elencare i livelli di genericità sono ideali per tali situazioni.
Esempio (salva come più_list_comprensione.py):
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo
Output:
$ python more_list_comprehension.py [6, 8]
Come funziona
Qui possiamo dedurre un nuovo elenco specificando la manipolazione per essere fatto (2*Io) quando una certa condizione è soddisfatta (se i > 2). Nota che la lista originale rimane invariata.
Il vantaggio di utilizzare la funzione elenca i livelli di genericità è che esso riduce la quantità di codice boilerplate necessario quando usiamo i loop per elaborare ciascun elemento di un elenco e memorizzarlo in un nuovo elenco.
18.6. Receiving Tuples and Dictionaries in Functions
Vi è un modo speciale di ricevere i parametri di una funzione come una tupla o un dizionario utilizzando la * o ** prefisso rispettivamente. Questo è utile quando si prende un numero variabile di argomenti nella funzione.
>>> def powersum(power, *args): ... '''Return the sum of each argument raised to the specified power.''' ... total = 0 ... for i in args: ... total += pow(i, power) ... return total ... >>> powersum(2, 3, 4) 25 >>> powersum(2, 10) 100
Perché abbiamo un prefisso * sulla variabile args, tutti gli extra argomenti passati alla funzione sono memorizzati in args come una tupla. Se un prefisso ** era stato usato invece, i parametri supplementari sarebbe considerato come coppie chiave/valore di un dizionario.
L’ istruzione Assert è utilizzato per affermare che qualcosa è vero. Se ad esempio si sono molto sicuro che lei avrà almeno un elemento in un elenco che si sta usando e si desidera verificare questo e sollevare un errore se non è vero, quindi istruzione Assert è la soluzione ideale in questa situazione. Quando l’istruzione Assert fallisce, un AssertionError è sollevata.
>>> mylist = ['item'] >>> assert len(mylist) >= 1 >>> mylist.pop() 'item' >>> assert len(mylist) >= 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError
L’ istruzione Assert deve essere utilizzata con cautela. La maggior parte del tempo, è meglio per rilevare le eccezioni, sia di trattare il problema o la visualizzazione di un messaggio di errore per l’utente e quindi esci.
Decoratori sono una scorciatoia per applicare funzioni del legatore. Questo è utile per “wrap” funzionalità con lo stesso codice più e più volte. Per esempio, ho creato un nuovo tentativo decorator per me che mi può solo applicare a qualsiasi funzione e se qualsiasi eccezione viene generata durante la corsa, è riprovata nuovamente, fino a un massimo di 5 volte e con un ritardo tra i tentativi. Ciò è particolarmente utile nelle situazioni in cui si tenta di effettuare una chiamata di rete a un computer remoto:
from time import sleep
from functools import wraps
import logging
logging.basicConfig()
log = logging.getLogger("retry")
def retry(f):
@wraps(f)
def wrapped_f(*args, **kwargs):
MAX_ATTEMPTS = 5
for attempt in range(1, MAX_ATTEMPTS + 1):
try:
return f(*args, **kwargs)
except:
log.exception("Attempt %s/%s failed : %s",
attempt,
MAX_ATTEMPTS,
(args, kwargs))
sleep(10 * attempt)
log.critical("All %s attempts failed : %s",
MAX_ATTEMPTS,
(args, kwargs))
return wrapped_f
counter = 0
@retry
def save_to_database(arg):
print "Write to a database or make a network call or etc."
print "This will be automatically retried if exception is thrown."
global counter
counter += 1
# This will throw an exception in the first call
# And will work fine in the second call (i.e. a retry)
if counter < 2:
raise ValueError(arg)
if __name__ == '__main__':
save_to_database("Some bad value")
Output:
$ python more_decorator.py Write to a database or make a network call or etc. This will be automatically retried if exception is thrown. ERROR:retry:Attempt 1/5 failed : (('Some bad value',), {}) Traceback (most recent call last): File "more_decorator.py", line 14, in wrapped_f return f(*args, **kwargs) File "more_decorator.py", line 39, in save_to_database raise ValueError(arg) ValueError: Some bad value Write to a database or make a network call or etc. This will be automatically retried if exception is thrown.
Vedere:
- http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
- http://toumorokoshi.github.io/dry-principles-through-python-decorators.html
18.9. Differences between Python 2 and Python 3
Vedere:
- “Six” library
- Porting to Python 3 Redux by Armin
- Python 3 experience by PyDanny
- Official Django Guide to Porting to Python 3
- Discussion on What are the advantages to python 3.x?
Abbiamo affrontato alcune caratteristiche di Python in questo capitolo e ancora non abbiamo coperto tutte le caratteristiche di Python. A questo stadio, tuttavia, abbiamo coperto la maggior parte delle quali si sono mai andare a utilizzare in pratica. Questo è sufficiente per farvi iniziare con qualunque programma che si sta per creare.
Ora discuteremo come esplorare ulteriormente Python.
Se avete letto questo libro accuratamente fino ad ora e praticato la scrittura di un sacco di programmi, quindi è necessario disporre di diventare confortevole e familiare con Python. Probabilmente hai creato alcuni programmi Python per provare la roba e ad esercitare la vostra abilità di Python come bene. Se ancora non è stato fatto, dovresti. Ora la domanda è “Qual è il prossimo passo?”.
Suggerisco di affrontare questo problema:
Creare il vostro proprio a linea di comando di indirizzo prenota il programma tramite il quale è possibile sfogliare, aggiungere, modificare, eliminare o ricercare i contatti come gli amici, la famiglia e i colleghi e le loro informazioni come indirizzo di posta elettronica e/o il numero di telefono. I dettagli devono essere memorizzati per un successivo recupero.
Questo è abbastanza facile se si pensa in termini di tutte le varie cose che abbiamo venire attraverso fino ad ora. Se si desidera utilizzare ancora le indicazioni su come procedere, quindi ecco un suggerimento [3].
Una volta che siete in grado di fare questo, si può affermare di essere un programmatore Python. Ora, subito send me an email ringraziare me per questo grande libro ;-). Questa fase è opzionale ma consigliata. Inoltre, si prega di prendere buying a printed copy in considerazione per sostenere il continuo sviluppo di questo libro.
Se trovate che il programma semplice, ecco un altro:
Implementare il replace command. Questo comando consentirà di sostituire una stringa con un altro nell’elenco dei file forniti.
Sostituire il comando può essere semplici o sofisticate come si desidera, dalla semplice sostituzione di stringhe di ricerca per modelli (le espressioni regolari).
Se si trovano sopra i programmi facili da creare, quindi guardare questo elenco completo dei progetti e di provare a scrivere i propri programmi: https://github.com/thekarangoel/Projects#numbers (l’elenco è anche a Martyr2’s Mega Project List).
Vedere anche Intermediate Python Projects.
Il modo migliore per imparare un linguaggio di programmazione è quello di scrivere un sacco di codice e leggere un sacco di codice:
- Python CookbookÈ estremamente preziosa raccolta di ricette o suggerimenti su come risolvere alcuni tipi di problemi utilizzando Python. Questo è un must per ogni utente di Python.
- Python Module of the WeekÈ un altro ottimo deve leggere guida per il Standard Library.
- Official Python Dos and Don’ts
- Official Python FAQ
- Norvig’s list of Infrequently Asked Questions
- Python Interview Q & A
- StackOverflow questions tagged with python
- Hidden features of Python
- What’s the one code snippet/python trick/etc did you wish you knew when you learned python?
- Awaretek’s comprehensive list of Python tutorials
Se sei bloccato con un problema di Python e non sapere a chi chiedere, quindi python-tutor list è il posto migliore per porre la domanda.
Assicuratevi di fare i tuoi compiti cercando di risolvere il problema autonomamente prima e ask smart questions.
Se si desidera imparare che cosa è la più recente nel mondo di Python, poi seguire la Official Python Planet.
Ci sono un numero enorme di librerie open source presso il Python Package Index quale è possibile utilizzare nei vostri programmi.
Per installare e utilizzare queste librerie, è possibile utilizzare pip.
Imparare Flask a creare il proprio sito web. Alcune risorse per iniziare:
Si supponga di voler creare i propri programmi di grafica utilizzando Python. Questo può essere fatto usando una interfaccia grafica utente (GUI) biblioteca con loro Python bindings. Binding sono ciò che ti consentono di scrivere programmi in Python e utilizzare le librerie che sono essi stessi scritto in C o C++ o altre lingue.
Ci sono un sacco di scelte per la GUI utilizzando Python:
Kivy
PyGTK
Questo è il binding di Python per il toolkit GTK+ che è il fondamento su cui GNOME è costruito. GTK+ ha molte sfumature in uso ma una volta diventato comodo, è possibile creare applicazioni GUI veloce. La radura interfaccia grafica designer è indispensabile. La documentazione è ancora migliorare. GTK+ funziona bene su GNU/Linux ma il suo porto di Windows è incompleta. È possibile creare sia libera come pure il software proprietario usando GTK+. Per iniziare, leggere il PyGTK tutorial.
PyQt
Questo è il binding di Python per il Qt toolkit che è il fondamento su cui il KDE è costruito. Qt è estremamente facile da usare e molto potente specialmente grazie al Qt Designer e la sorprendente documentazione Qt. PyQt è gratuito se si desidera creare open source (GPL’ed) software ed è necessario acquistare se si desidera creare proprietari di closed source software. Iniziando con Qt 4.5 è possibile utilizzarlo per creare non-software GPL come bene. Per iniziare, leggere circa PySide.
WxPython
Questo è il binding Python per il toolkit wxWidgets. wxPython ha una curva di apprendimento associata con esso. Tuttavia, è estremamente portatile e funziona su GNU/Linux, Windows, Mac e persino di piattaforme embedded. Ci sono molti IDE disponibile per wxPython che includono GUI designers come bene come SPE (Stani’s Python Editor) e il wxGlade GUI builder. È possibile creare gratuitamente come pure il software proprietario usando wxPython. Per iniziare, leggere il wxPython tutorial.
Per ulteriori scelte, vedere la GuiProgramming wiki page at the official python website.
Purtroppo non esiste uno standard lo strumento GUI per Python. Vi suggerisco di scegliere uno degli strumenti di cui sopra a seconda della situazione. Il primo fattore è se siete disposti a pagare per usare uno qualsiasi degli strumenti della GUI. Il secondo fattore è quello di stabilire se si desidera che il programma viene eseguito solo su Windows o su Mac e GNU/Linux o tutti loro. Il terzo fattore, se GNU/Linux è una piattaforma selezionata, è se siete un KDE o GNOME utente su GNU/Linux.
Per una più dettagliata e completa analisi, vedere pagina 26 del ‘The Python Papers, Volume 3, Issue 1’.
19.13. Various Implementations
Di solito ci sono due parti di un linguaggio di programmazione – la lingua e il software. Una lingua è come scrivere qualcosa. Il software è quello che effettivamente esegue i nostri programmi.
Ci sono state utilizzando il software CPython per eseguire i nostri programmi. Esso è indicato come CPython perché è scritto in linguaggio C ed è il classico interprete Python.
Ci sono anche altri software che può eseguire i programmi Python:
Una implementazione di Python che viene eseguito sulla piattaforma Java. Questo significa che è possibile utilizzare librerie e classi Java dall’interno di linguaggio Python e viceversa.
Una implementazione di Python che viene eseguito sulla piattaforma .NET. Questo significa che è possibile utilizzare le librerie .NET e classi di entro il linguaggio Python e viceversa.
Una implementazione Python scritto in Python! Si tratta di un progetto di ricerca per rendere facile e veloce per migliorare l’interprete poiché l’interprete stesso è scritto in un linguaggio dinamico (in contrapposizione ai linguaggi statici come C, Java o C# in precedenza tre implementazioni)
Ci sono anche altri come CLPython – una implementazione Python scritto in Common Lisp e Brython che è una implementazione sulla parte superiore di un interprete JavaScript che potrebbe significare che è possibile usare Python (invece di JavaScript) per scrivere il vostro web-browser (“l’Ajax”) programmi.
Ciascuna di queste implementazioni hanno le loro aree specializzate in cui essi sono utili.
19.14. Functional Programming (for advanced readers)
Quando si inizia a scrivere programmi di maggiori dimensioni, si dovrebbe assolutamente saperne di più su un approccio funzionale alla programmazione in contrapposizione per l’approccio basato sulle classi di programmazione che abbiamo imparato in object oriented programming chapter:
- Functional Programming Howto by A.M. Kuchling
- Functional programming chapter in ‘Dive Into Python’ book
- Functional Programming with Python presentation
- Funcy library
Siamo ora giunti al termine di questo libro ma come si suol dire, questo è l ‘ inizio della fine!. Ora sei un appassionato di Python utente e voi siete senza dubbio pronti a risolvere molti problemi utilizzando Python. È possibile avviare automatizzare il vostro computer per eseguire tutti i tipi di precedentemente cose inimmaginabili o scrivere i tuoi giochi e molto altro ancora. Così, per iniziare!
Nota | Si prega di notare che questa sezione è stata scritta nel 2003, in modo che alcuni di questa potrebbe sembrare pittoresco per voi 🙂 |
“Free/Libre e Open Source Software”, in breve, FLOSS è basata sul concetto di una comunità che si basa sul concetto di condivisione, e in particolare la condivisione di conoscenze. Il filo interdentale sono gratuite per l’utilizzo, la modifica e la ridistribuzione.
Se hai già letto questo libro e quindi si ha già familiarità con il filo interdentale poiché state utilizzando Python tutti insieme e Python è un software open source!
Qui ci sono alcuni esempi di filo interdentale per dare un idea del genere di cose che la condivisione comunitaria e l’edificio può creare:
Questo è un filo interdentale OS kernel utilizzato nel sistema operativo GNU/Linux. Linux kernel, è stato iniziato da Linus Torvalds come uno studente. Android è basato su Linux. Qualsiasi sito web di utilizzare questi giorni saranno per lo più essere in esecuzione su Linux.
Questa è una comunità-driven distribuzione, sponsorizzato da canonica ed è la più popolare distribuzione GNU/Linux di oggi. Consente di installare una pletora di filo interdentale disponibili e tutto questo in un modo facile da usare e facile da installare il modo. Migliore di tutti, si può semplicemente riavviare il computer ed eseguire GNU/Linux da CD! Questo consente di completamente provare il nuovo sistema operativo prima di installarlo sul computer in uso. Tuttavia, Ubuntu non è interamente Software Libero; esso contiene i driver proprietari, firmware e applicazioni.
Questo è un eccellente comunità-guidato e sviluppato office suite con uno scrittore, presentazione, foglio di calcolo e disegno di componenti tra le altre cose. Si può anche aprire e modificare MS Word e MS PowerPoint con facilità. Esso gira su quasi tutte le piattaforme ed è interamente gratuita, libre e open source software.
Questo è il miglior browser web. È sorprendentemente veloce e ha conquistato il successo di critica per la sua ragionevole e caratteristiche impressionanti. Il concetto di estensioni consente a qualsiasi tipo di plugin per essere utilizzato.
Questa è una implementazione open source della piattaforma Microsoft .NET. Esso consente alle applicazioni .NET per essere creati ed eseguiti su GNU/Linux, Windows, FreeBSD, Mac OS e molte altre piattaforme come bene.
Questo è il famoso server Web open source. Infatti è il più popolare il server web sul pianeta!!! Essa corre quasi più della metà dei siti fuori là. Sì, che è di destra – Apache gestisce più siti web a tutta la concorrenza (incluso Microsoft IIS) combinato.
Questo è un video player che può riprodurre qualsiasi cosa da DivX a MP3 a ogg per VCD e DVD per … chi dice open source non ia divertimento? 😉
Questo elenco è solo destinato a darvi una breve idea – ci sono molti più eccellenti di filo interdentale là fuori, come il linguaggio Perl, PHP lingua, Drupal content management system per siti web, server di database PostgreSQL, TORCS gioco di corse, IDE KDevelop, Xine – movie player, Vim editor, Quanta+ editor, Banshee lettore audio, GIMP programma di modifica delle immagini … Questo elenco potrebbe andare avanti all’infinito.
Per conoscere le ultime novità nel mondo di filo interdentale, controllare i seguenti siti:
Visita i seguenti siti web per ulteriori informazioni su filo interdentale:
Quindi, andate avanti ed esplorare il vasto e libero e mondo aperto di filo interdentale!
Quasi tutti i software che ho utilizzato per la creazione di questo libro sono FLOSS.
Nella prima bozza di questo libro, avevo usato Red Hat Linux 9.0 come il fondamento della mia installazione e nel sesto progetto, ho usato Fedora Core 3 Linux come base della mia installazione.
Inizialmente mi è stato utilizzando KWord di scrivere il libro (come spiegato nella history lesson prefazione).
Più tardi, ho acceso per DocBook XML utilizzando Kate ma ho trovato troppo noioso. Così, ho acceso per OpenOffice che era semplicemente eccellente con il livello di controllo è fornita per la formattazione come pure la generazione di file PDF, ma essa ha prodotto molto sciatto HTML dal documento.
Infine, ho scoperto che XEmacs e ho riscritto il libro da zero in DocBook XML (nuovo) dopo ho deciso che questo formato è stata la soluzione a lungo termine.
Il sesto progetto, ho deciso di utilizzare Quanta+ per eseguire tutte le operazioni di editing. Lo standard xsl che è venuto con Fedora Core 3 Linux sono stati utilizzati. Tuttavia, avevo scritto un documento CSS per dare colore e stile per le pagine HTML. Avevo scritto anche un grezzo analizzatore lessicale, in Python di corso che fornisce automaticamente evidenziazione della sintassi per tutti gli elenchi di programmi.
Per il settimo progetto, sto utilizzando MediaWiki come base della mia installazione. Ho usato per modificare tutto online e i lettori possono leggere direttamente i/modificare/discutere all’interno del wiki sito web, ma ho finito per spendere più tempo a combattere lo spam rispetto alla scrittura.
Per gli otto progetti, ho usato Vim, Pandoc, e Mac OS X.
Per il nono progetto, ho acceso AsciiDoc format ed utilizzato Emacs 24.3, tomorrow theme, Fira Mono font e adoc-modea scrivere.
Vedere http://swaroopch.com/about/
In primo luogo ho cominciato con Python quando ho bisogno di scrivere un programma di installazione per il software che avevo scritto chiamato “diamond’ in modo che ho potuto fare l’installazione facile. Ho dovuto scegliere tra Python e binding di Perl per la libreria Qt. Ho fatto qualche ricerca sul web e mi sono imbattuto in an article by Eric S. Raymond, un famoso e rispettato hacker, dove ha parlato di come Python era diventata la sua linguaggi di programmazione preferiti. Ho anche scoperto che la PyQt legature sono state più maturo rispetto a Perl-Qt. Così ho deciso che Python è stata la lingua per me.
Poi ho iniziato a cercare un buon libro su Python. Non ho potuto trovare qualsiasi! Ho fatto trovare alcuni libri O’Reilly ma erano troppo costosi o erano più come un manuale di riferimento di una guida. Così, ho risolto per la documentazione fornita con Python. Tuttavia, è stato troppo breve e piccolo. Ha dato una buona idea circa il Python ma non è stata completata. Ho gestito con esso poiché ho avuto precedenti esperienze di programmazione, ma era inadatta per neofiti.
Circa sei mesi dopo la mia prima spazzola con Python, ho installato la (allora) ultime Red Hat Linux 9.0 e stavo giocando con KWord. Ho avuto molto eccitati e improvvisamente avuto l idea di scrivere alcune cose su Python. Ho iniziato a scrivere poche pagine ma diventò rapidamente 30 pagine. Poi mi è diventato seriamente a rendere più utile in un libro. Dopo un sacco di riscrive, essa ha raggiunto uno stadio in cui è diventato un utile guida per imparare il linguaggio Python. Ritengo che questo libro possa essere il mio contributo e omaggio alla comunità open source.
Questo libro ha cominciato fuori come i miei appunti personali su Python e considero ancora nello stesso modo, anche se ho preso un sacco di sforzo per renderlo più appetibile agli altri 🙂
Nel vero spirito di open source, ho ricevuto un sacco di suggerimenti costruttivi, critiche e feedback da entusiasti lettori che mi ha aiutato a migliorare questo libro un sacco.
- Il libro è stato aggiornato da ultimo il 2015-11-19 e generate utilizzando AsciiDoctor5.2.
- Ultimo aggiornamento importante di questo libro è stato in Mar-Apr 2014, convertito Asciidocutilizzando Emacs 24 e adoc-mode.
- Nel dicembre 2008, il libro è stato aggiornato per il Python 3.0 release (uno dei primi libri di farlo). Ma ora, ho convertito il libro indietro per Python 2 lingua perché lettori sarebbero spesso si confondono tra il default Python 2 installato sui loro sistemi vs. Python 3 che hanno dovuto installare separatamente e tutti gli utensili, specialmente i redattori assumerebbe Python 2. Ho avuto un momento difficile giustificare perché ho dovuto aggravare lettori e farli passare attraverso tutto questo quando il fatto è che essi possono apprendere sia uno e sarebbe altrettanto utile. Così, Python 2 è.
Il libro ha bisogno dell’aiuto dei suoi lettori come voi per segnalare eventuali parti del libro che non sono buone, non comprensibili o sono semplicemente sbagliato. Si prega write to the main author o il rispettivo translators con i vostri commenti e suggerimenti.
- 0
- 1
- 03 Ago 2013
- Riscritto utilizzando Markdown e Jason Blevins’ Markdown Mode
- 0
- 20 Ott 2012
- Riscritto in Pandoc format, grazie a mia moglie che ha fatto la maggior parte della conversione dal formato Mediawiki
- Semplificare il testo, rimozione non-sezioni fondamentali quali nonlocal e metaclasses
- 90
- 04 set 2008 e ancora in corso
- Risveglio dopo un gap di 3 anni e mezzo!
- Riscrittura per Python 3.0
- Riscrivere utilizzando MediaWiki(nuovo)
- 20
- 15
- 28 Mar 2004
- Le revisioni di minore entità
- 12
- 16 Mar 2004
- Aggiunte e correzioni
- 10
- 09 Mar 2004
- Più di un refuso correzioni, grazie a molti entusiasta e disponibile ai lettori.
- 00
- 08 Mar 2004
- Dopo la tremenda feedback e suggerimenti da parte dei lettori, ho fatto revisioni significative per il contenuto lungo con le correzioni di errore di battitura.
- 99
- 22 Feb 2004
- Aggiunto un nuovo capitolo sui moduli. Aggiunta di dettagli circa il numero variabile di argomenti a funzioni.
- 98
- 16 Feb 2004
- Ha scritto uno script Python e il foglio di stile CSS per migliorare output XHTML, compreso un grezzo-ancora-funzionale analizzatore lessicale automatico per il VIM-come evidenziazione della sintassi dei listati di programmi.
- 97
- 13 Feb 2004
- Un altro completamente riscritto bozza, in DocBook XML (nuovo). Prenota ha migliorato un sacco – è più coerente e leggibile.
- 93
- 25 Gen 2004
- Aggiunta di chiacchiere e più specifici per Windows stuff
- 92
- 05 Gen 2004
- Modifiche ad alcuni esempi.
- 91
- 30 Dic 2003
- Correggere gli errori di battitura. Improvvisato molti argomenti.
- 90
- 18 Dic 2003
- Aggiunto 2 più capitoli. OpenOfficeFormato con le revisioni.
- 60
- 21 Nov 2003
- Completamente riscritto e ampliato.
- 20
- 20 Nov 2003
- Corretti alcuni errori di battitura e gli errori.
- 15
- 20 Nov 2003
- Convertito in DocBook XMLcon XEmacs.
- 10
- 14 Nov 2003
- Bozza iniziale utilizzando KWord.