Questo è un wrapper Python per TA-LIB sulla base di Cython invece di SWIG. Dalla home page: TA-Lib è ampiamente utilizzato dagli sviluppatori di software di trading che necessitano di effettuare l'analisi tecnica di dati finanziari. Comprende 150 indicatori quali ADX, MACD, RSI, stocastico, le bande di Bollinger, ecc Candlestick pattern recognition API open-source per CC, Java, Perl, Python e 100 gestito il binding Python originali utilizzare SWIG che sono purtroppo difficili da installare e arent efficienti come potrebbero essere. Quindi questo progetto utilizza Cython e Numpy di impegnare in modo efficiente e in modo pulito per TA-Lib - produrre risultati 2-4 volte più veloce l'interfaccia SWIG. Installare TA-Lib o leggere la documentazione Simile a TA-Lib, la funzione di interfaccia fornisce un involucro leggero degli indicatori TA-Lib esposti. Ogni funzione restituisce un array di uscita e hanno valori di default per i loro parametri, se non specificato come argomenti chiave. Tipicamente, queste funzioni avranno un periodo lookback iniziale (un numero richiesto di osservazioni prima un'uscita viene generato) impostato su NaN. Tutti i seguenti esempi utilizzare la funzione API: Calcolare una media mobile dei prezzi di chiusura: Calcolo bande di Bollinger, con tripla media mobile esponenziale: Calcolo slancio dei prezzi di chiusura, con un periodo di tempo di 5: Estratto API Quick Start Se sei già familiarità con l'utilizzo della funzione API, si dovrebbe sentire come a casa utilizzando l'API astratto. Ogni funzione ha lo stesso ingresso, passato come un dizionario di array NumPy: Le funzioni possono sia essere importati direttamente o istanziati per nome: Da lì, chiamare funzioni è fondamentalmente la stessa della funzione API: Scopri di utilizzo su più avanzato di TA-Lib qui . Gli indicatori supportati Possiamo mostrare tutte le funzioni TA supportate da TA-Lib, sia come elenco o come dict ordinati per gruppo (ad esempio Overlap Studi, indicatori di momentum, ecc): GroupsSpyder Function - la IDE Python Mon 16 settembre 2013 Hans Fangohr. Università di Southampton, UK 2013 Spyder si è sviluppato in uno strumento abbastanza maturo e molto produttivo Qui provo a fornire un tutorial. Questa documentazione è motivata da corsi di formazione in Python e modellazione computazionale per gli studenti presso l'Università di Southampton (vedi nota storica per maggiori dettagli). Questo blog è stato integrato nel Spyder come il Tutorial. Una volta Spyder è iniziata, la versione più aggiornata di questo tutorial si trova sotto Aiuto - gt Spyder tutorial. Ottenere il file ciao mondo nella finestra dell'editor Spyder da entrambe Scarica hello. py e salvare come hello. py. (Si scarica il file facendo clic destro sul link nel browser, quindi selezionare Salva oggetto con nome o Salva Scarica come), e quindi aprire il hello. py file mediante il menu File, quindi selezionare Apri. Esprimiamo questo come File - gt Apri in breve. cliccare su hello. py per vedere il codice sorgente nel browser web, quindi copiare il codice intero Passare alla finestra dell'editor in spyder e incollare il codice. Quindi salvare il file come hello. py. Per eseguire il programma, selezionare Esegui - gt Run (o premere F5), e confermare le impostazioni di esecuzione, se necessario. Si dovrebbe vedere un output come: o (il percorso particolare dipenderà da dove avete salvato il file, ma questa è inserita da Spyder automaticamente): Se è così, allora avete appena eseguire il vostro primo programma Python - ben fatto. Prima di procedere, si prega di La console IPython può fare un po 'di più rispetto alla console standard di Python, e si consiglia di utilizzare come la console di default qui. Nella sessione interprete IPython che abbiamo appena iniziato, è possibile utilizzare Run-gtRun (come in precedenza) per eseguire hello. py e si dovrebbe vedere: Python legge il file riga per riga, ignorando i commenti quando si incontra la parola chiave def, è sa che una funzione è definita in questo e il prossimo (una o più) linee. Nel file hello. py, Python crea così un oggetto funzione con il nome ciao. Tutte le linee frastagliate seguenti def ciao (): appartengono al corpo della funzione. Notare che l'oggetto funzione viene appena creato a questo punto nel file, ma la funzione non è ancora chiamato (cioè non eseguito). quando Python si imbatte comandi (diversi def. e poche altre parole chiave) che sono scritti nella colonna più a sinistra, eseguirà questi immediatamente. Nel file hello. py questa è solo la linea di lettura ciao (), che sarà effettivamente chiamare (vale a dire l'esecuzione) la funzione con il nome ciao. Se si rimuove la linea di ciao () dal programma ed eseguire di nuovo l'intero file (premendo F5 o selezionando Run Run - gt), non verrà stampato (perché la funzione ciao è definita, ma non ha chiamato, cioè non eseguito) . Ora si dovrebbe sapere come eseguire un programma Python che si ha nella finestra dell'editor in Spyder utilizzando la console di Python, e il più sofisticato Console IPython. Se si sta appena iniziando a imparare Python, questo è probabilmente un buon punto per tornare al corso libro di testo e guardare gli esempi più fondamentale. La sezione successiva fornisce informazioni più dettagliate come è possibile eseguire parti del codice nell'editor nella console Python, e quindi aggiornare parti dei vostri definizioni nell'editor. Questa è una tecnica più avanzata, ma può essere molto utile. (Si può essere interessati anche la possibilità di eseguire pezzi (cd quotcellsquot) di codice che sono separati da delimitatori -. Vedere Collegamenti per le funzioni utili) Una volta eseguito il programma hello. py, l'oggetto ciao funzione è definita e conosciuto al prompt di Python. Possiamo quindi chiamare la funzione dal prompt di Python:. Chiamare la funzione ciao () dal Python pronta, cioè tipo ciao () nella finestra Python Shell (gli spettacoli prompt di Python come gtgtgt o come in se usiamo la sessione IPython dove il punto interrogativo può essere un qualsiasi numero intero positivo.), e premere il tasto Invio. Si dovrebbe trovare che la funzione ciao () viene eseguito di nuovo, vale a dire Ciao mondo viene stampato di nuovo. La vostra chiamata di funzione in Python richiedere insieme con l'output dovrebbe essere simile a questo: si può vedere come questo si differenzia da eseguire di nuovo l'intero programma Quando eseguiamo l'intero programma (premendo F5), Python passa attraverso il file, crea la funzione ciao oggetto (ignorando l'oggetto precedente), raggiunge il programma principale e chiama la funzione. Quando chiamiamo ciao () dal prompt di Python, si limita a chiamare gli oggetti la funzione ciao che è stata definita nella console (I) Python quando abbiamo eseguito l'intero file hello. py in precedenza (premendo F5). Questo diventerà più chiara nel corso del tempo e anche quando lavoriamo con esempi leggermente più grandi. Si consiglia di tornare a questa esercitazione in una fase un po 'più tardi. Python fornisce una funzione che consente di visualizzare tutti gli oggetti conosciuti (nello spazio dei nomi corrente). Si chiama dir (). quando si digita dir () al prompt, si ottiene un elenco di oggetti noti. Ignorare tutto inizia con una sottolineatura per ora. Riesci a vedere ciao nella lista (Se si ottiene una lunga lista di oggetti definiti, quindi Spyder può aver fatto alcune importazioni convenienza per voi già di affrontare questo si consiglia di:. Quindi eseguire dir () come suggerito sopra.) Una volta che un oggetto è visibile nello spazio nome attuale (come è ciao in questo esempio), possiamo utilizzare la funzione di aiuto come segue per imparare a questo proposito: Tipo di aiuto (ciao) al prompt di Python, si dovrebbe vedere un output come questo: dove viene Python prendere le informazioni da parte di essa (come il numero di argomenti di input e nomi di tali variabili qui non abbiamo argomenti di input) Python può trovare attraverso l'ispezione dei suoi oggetti, informazioni aggiuntive viene dalla stringa di documentazione prevista per l'oggetto funzione ciao. La stringa di documentazione è la prima stringa immediatamente al di sotto della linea def ciao ():. L'ambiente Spyder offre anche un pannello in alto a destra (di default), che è l'ispettore oggetto. Se si digita ciao nella linea vuota nella finestra oggetto di ispezione, fornirà anche la stringa di aiuto. Nella finestra Editor, modificare la funzione ciao in modo che stampi Good Bye, piuttosto che mondo Ciao mondo. Premere F5 (per eseguire l'intero programma) e verificare che l'output del programma è ora: Che cosa è successo quando si è premuto F5 è questo: Python è passato attraverso il file hello. py e ha creato un nuovo oggetto funzione ciao (ignorando la funzione oggetto ciao avevamo definito in precedenza) e quindi eseguita la funzione. Abbiamo bisogno di iniziare con uno stato ben definito. Per fare questo, si prega di cambiare la funzione ciao () di nuovo in modo che stampi Ciao Mondo (ossia utilizzare il file hello. py originale), quindi premere F5 per eseguire l'intero programma e verificare che la stampa Ciao Mondo. Chiamare la funzione ciao () dal prompt dei comandi (come descritto nella chiamata di funzione di oggetti esistenti dalla riga di comando). Si dovrebbe vedere Ciao mondo stampato. Ora cambiare la definizione della funzione in modo che sarebbe stampare Laters mondo. e salvare il file (ma non eseguire il programma, vale a dire NON premere F5 ancora). Chiamare la funzione ciao () dal prompt dei comandi di nuovo. Si dovrebbe trovare che il testo stampato si legge Ciao Mondo. come qui Perché è così perché l'oggetto funzione ciao nel l'interprete Python è quello vecchio che stampa Ciao Mondo. Finora, abbiamo cambiato il file hello. py (e sostituito Ciao Mondo in là con Laters mondiale) nell'editor, ma questo non ha influenzato gli oggetti che sono stati precedentemente creati in Python. Qui ci sono due possibilità per utilizzare la nostra versione modificata della funzione ciao: Opzione 1: eseguire di nuovo l'intero file hello. py premendo F5: questo crea un nuovo oggetto funzione ciao (e sostituisce il vecchio). Si dovrebbe trovare che se si preme F5, e quindi chiamare ciao () al prompt, il nuovo testo Laters mondiale viene stampato. Opzione 2: selezionare la regione è stato modificato (in questo caso l'intera funzione ciao a partire dalla linea def ciao ():... Verso il basso per tornare Nessuno e quindi selezionare Esegui - gt Run selezione Questo aggiornerà l'oggetto ciao nell'interprete senza dover eseguire l'intero file hello. py:. Se ora digitiamo ciao () vediamo la risposta di aggiornamento: la possibilità di eseguire parti del codice per aggiornare alcuni oggetti in l'interprete (nell'esempio di cui sopra, abbiamo aggiornato la funzione oggetto ciao), è di grande utilità nello sviluppo e il debug di codici più complessi, e durante la creazione objectsdata nel tempo interprete sessione di ripresa. Per esempio, modificando solo le funzioni (o classesobjects, ecc) che stiamo effettivamente sviluppando, noi può continuare a ri-utilizzando le strutture di dati, ecc che sono definiti nella sessione interprete. per insegnare la programmazione Python e la modellazione computazionale, si consiglia di (i) utilizzare IPython al posto del normale interprete Python e (ii) non utilizzare le importazioni di convenienza. Questo accetta IPython come lo standard de-facto e aiuta a capire meglio gli spazi dei nomi. Spyder cerca di aiutare gli utenti più avanzati per l'importazione di un numero di moduli nello spazio nome principale. Scientific nel prompt dei comandi per vedere i dettagli. Questo comportamento potrebbe cambiare nelle future versioni Spyder. Mentre queste importazioni di alimentari sono molto utili per i programmatori più esperti, possono essere fonte di confusione (se non fuorvianti) per i principianti. Si consiglia quindi di annullare tali importazioni per soddisfare le nostre esigenze schema di cui sopra e per (i) passare a una console IPython. e (ii) il comando di reset per ripristinare lo spazio dei nomi. Entrambi i passaggi sono spiegati in maggior dettaglio nella sezione successiva. Nella finestra della console (in basso a destra per impostazione predefinita), si vede un messaggio predefinito con tre maggiore di segni, cioè gtgtgt. Questo dimostra che stiamo utilizzando la console - fondamentalmente una normale sessione di Python interprete (con alcune funzionalità aggiunte dalla Spyder). Invece, vorremmo usare una shell interattiva di Python, breve IPython dal progetto ipython. Per fare questo, selezionare interpreti - gt Aprire una console IPython. Si dovrebbe vedere nella finestra consolse una nuova shell che appare, e la richiesta IPython In 1: deve essere visualizzato. Lo spazio dei nomi può essere cancellato in IPython utilizzando il comando di reset. Tipo di reset e premere Invio, quindi confermare con y: Ne parliamo un po 'oltre, ma si può saltare il seguente se non siete interessati: Dopo il rilascio del comando di reset, dovremmo avere solo pochi oggetti definiti nello spazio dei nomi di quella sessione . Possiamo elencare tutti loro con il comando dir (): Infine, se vi piace saltare la fase di conferma del comando di reset, l'uso può utilizzare ripristinare - f invece di reset. Oltre alla sintassi che viene applicata da Python, ci sono convenzioni supplementari per quanto riguarda il layout del codice sorgente, in particolare la Guida allo stile per il codice sorgente Python sa come quotPEP8quot. Un sacco di comportamento Spyder può essere configurato attraverso le sue preferenze. Dove questo si trova nel menu dipende dal vostro sistema operativo: In Windows e Linux, andare in Strumenti - gt Preferenze su Mac OS, vanno a Python - gt Preferenze andare in Preferenze - gt console IPython - gt di avvio e selezionare la casella di spunta accanto alla aprire una console IPython all'avvio. Quindi fare clic sul pulsante OK. La prossima volta che si avvia Spyder, mostrerà automaticamente la console IPython. Vai a Preferenze - gt Editor - gt Codice IntrospectionAnalysis e selezionare la casella di spunta accanto ad analisi Style (PEP8) Per evitare qualsiasi magia quando viene avviata la console, accedere a Preferenze - gt Console - gt Impostazioni avanzate - gt sostituzione PYTHONSTARTUP e selezionare lo script predefinito PYTHONSTARTUP (e riavviare Spyder). (Questa magia, tra le altre cose, viene eseguito il comando di divisione dal futuro di importazione.) Le impostazioni predefinite possono cambiare per questo nella prossima major release. Per evitare l'importazione di tutti gli oggetti da pylab e numpy nello spazio nome attuale nella console IPython, andare in Preferenze - gt console IPython - gt grafica e deselezionare la casella di spunta accanto alla caricare automaticamente i moduli Pylab e NumPy e anche deselezionare supporto Attiva. Le impostazioni predefinite possono cambiare per questo nella prossima major release. Attraverso Preferenze - gt console IPython - gt Impostazioni avanzate - gt Usa matematica simbolica possiamo attivare la modalità IPythons pitone simbolica. Questo permetterà di uscita sympy ben reso (stile lattice) e le importazioni anche alcuni oggetti sympy automaticamente quando la console IPython inizia, e riporta quello che ha fatto. Possiamo quindi utilizzare le variabili x. y. per esempio come questo: F5 esegue la corrente F9 tampone esegue il pezzo attualmente evidenziata di codice: questo è molto utile per aggiornare le definizioni di funzioni (ad esempio) nella sessione interprete senza dover eseguire l'intero file di nuovo CTRL ltRETURNgt esegue la cella corrente ( menù enty Run - gt cellulare Run). Una cella è definito come il codice tra due linee che iniziano con il tag concordato. SHIFT ltRETURNgt esegue la cella corrente e fa avanzare il cursore sulla cella successiva (voce di menu Esegui - gt cellulare Run e anticipo). Le cellule sono utili per eseguire un grande segmento filecode in unità più piccole. (E 'un po' come una cellula in un quaderno IPython, in quanto pezzi di codice può essere eseguito in modo indipendente.) ALT ltCURSOR UPgt sposta la linea di corrente fino. Se più linee sono evidenziate, vengono spostati insieme. ALTltCURSOR DOWNgt funziona linea corrispondentemente in movimento (s) verso il basso. clic destro su un functionmethod nella fonte, si apre una nuova finestra dell'editor che mostra la definizione di tale funzione. SHIFTCTRLALTM massimizza la finestra corrente (o modifica le dimensioni di nuovo al normale, se premuto in una finestra ingrandita) SHIFTCTRLF attiva la ricerca in tutti i file. Su Mac OS X: CMD aumenterà la dimensione del carattere nell'editor, CMD - diminuzione. Funziona anche nella console IPython. Il formato per l'esploratore oggetto tipo di carattere, la console Python, ecc può essere impostata singolarmente tramite Preferenze - gt Esplora oggetti ecc ho potuto trovare un modo di cambiare la dimensione del carattere in explorer variabile. CTRLSPACE autocompletes comandi, i nomi delle funzioni, i nomi delle variabili, metodi molto utili. CMD (su Mac OS X) e Ctrls (altrimenti) nella finestra di editor salva il file attualmente in fase di modifica. Questo costringe anche diversi triangoli nella colonna di sinistra dell'editor da aggiornare (altrimenti aggiornamento ogni 2 o 3 secondi per impostazione predefinita). CMD (su Mac OS X) e Ctrls (altrimenti) nella finestra della console IPython salva la sessione IPython corrente come un file HTML, comprese le figure che possono essere visualizzati in linea. Questo è utile come un modo rapido di registrare ciò che è stato fatto in una sessione. (Non è possibile caricare questo record salvato di nuovo alla sessione - se avete bisogno di funzionalità in questo modo, cercare il Notebook IPython.) CMDI (su Mac OS X) e CTRLi (altrimenti) quando premuto mentre il cursore si trova su un oggetto , apre la documentazione per l'oggetto nella finestra di ispezione oggetto. Queste sono le impostazioni che definiscono come viene eseguito il codice nell'editor se selezionare Esegui - gt Run o premere F5. Per impostazione predefinita, viene visualizzata la finestra delle impostazioni per la prima volta si cerca di eseguire un file. Se vogliamo cambiare le impostazioni in qualsiasi altro momento, possono essere trovati sotto Run - gt Configurare o premendo F6. Ci sono tre scelte per l'interprete di usare, di cui Ill discutere i primi due. Assumiamo che abbiamo un hello. py programma nell'editor che legge questo è il suggerimento di default, e anche in generale una buona scelta. Scegliere Esegui in Python corrente o IPython impostazione in Esegui - gt Configurare significa che quando l'esecuzione di hello. py è completato, siamo in grado di interagire con l'interprete in cui il programma ha funzionato, e siamo in grado di utilizzare la comoda IPython interprete per questo interprete (piuttosto che l'interprete Python di default). possiamo ispezionare e interagire con gli oggetti che l'esecuzione del nostro programma creata, come i e ciao (). Questo è generalmente molto utile per incrementale la codifica, testing e debugging: possiamo chiamare ciao () direttamente dal prompt interprete, e non avete bisogno di eseguire il tutto hello. py per questo (anche se si cambia la funzione ciao () abbiamo bisogno. eseguire il buffer, o almeno la definizione della funzione, per rendere la nuova versione di ciao () visibile l'interprete sia eseguendo l'intero buffer o tramite Run - gt Selezione RUN.) Tuttavia, eseguendo il codice nell'editor nel interprete corrente significa anche che il codice che esegue può vedere gli altri oggetti (globali) che sono stati definiti nella sessione interprete. Questa persistenza di oggetti è facilmente Forgotton e di solito non necessaria quando si lavora su piccoli programmi (anche se può essere di grande valore occasionalmente). Questi oggetti potrebbero provenire dal precedente esecuzione di codice, dal lavoro interattivo l'interprete, o dalle importazioni di convenienza, come da importazione pylab (Spyder può fare un po 'di tali importazioni di convenienza automaticamente). Questa visibilità degli oggetti nello spazio interprete nome globale per il codice eseguiamo può anche provocare la codifica degli errori se il codice si basa inavvertitamente su questi oggetti. Ecco un esempio: immaginiamo che corriamo il codice hello. py. Successivamente, la variabile i è noto nell'interprete come una variabile globale. abbiamo modificare l'origine hello. py e accidentalmente cancellare la linea i 42 eseguiamo il tampone contenente hello. py di nuovo. A questo punto, la chiamata di ciao (i) non mancherà, perché l'interprete ha un oggetto di nome che ho definito, anche se questo non è definito nella sorgente di hello. py. A questo punto, potremmo risparmiare hello. py e (falsamente) pensare che sarebbe eseguito correttamente. Tuttavia, l'esecuzione in una nuova sessione di interprete Python (o tramite Python hello. py. Dirlo) si tradurrebbe in un errore, perché non è definita. Il problema nasce dal fatto che il codice fa uso di un oggetto (qui i) senza creare esso. Questo riguarda anche l'importazione di moduli: se avessimo importato pylab al prompt IPython, allora il nostro programma vedrà che quando eseguito in questa sessione interprete IPython. Per sapere come possiamo controllare due volte che il nostro codice non dipende da tali oggetti esistenti, vedere Come raddoppiare controllare il codice viene eseguito correttamente quoton sua ownquot. Scegliere Esegui nel nuovo interprete Python dedicato sotto Run - gt Configurare inizierà un nuovo interprete Python ogni volta che il programma viene eseguito hello. py. Il principale vantaggio di questa modalità nel corso di esecuzione in Python corrente o IPython interprete è che possiamo essere certi che non ci siano oggetti globali definiti in questo interprete che provengono da debug e l'esecuzione ripetuta di nostro codice: ogni volta che esegue il codice nell'editor , l'interprete Python in cui il codice viene eseguito viene riavviato. Questa è una scelta sicura, ma offre meno flessibilità e non è possibile utilizzare l'interprete IPyton. Supponendo che avete scelto per il vostro codice da eseguire in Python corrente o IPython interprete. poi due opzioni per controllare che il nostro codice funziona da sola (cioè non dipende da variabili indefinite, moduli unimported e comandi, ecc) In alternativa, se si vuole rimanere con l'attuale interprete IPython, è possibile utilizzare IPythons ripristino magia comando che rimuove tutti gli oggetti (ad esempio i nell'esempio precedente) dallo spazio nome attuale, e quindi eseguire il codice nell'editor. Dopo aver completato un pezzo di codice, doppio controllo che esegue utilizzando in modo indipendente una delle opzioni di cui alla Come ricontrollare il codice viene eseguito correttamente quoton sua ownquot. Quando più file vengono aperti nell'editor, le corrispondenti schede nella parte superiore dell'area della finestra sono disposti in ordine alfabetico del nome del file da sinistra a destra. A sinistra delle schede, non vi è l'icona che mostra Sfoglia le schede se il mouse passa sopra di esso. E 'utile per passare a un particolare file direttamente, se molti file aperti. Le variabili di ambiente possono essere visualizzati dalla finestra della console (in basso a destra della finestra nel layout di default). Fare clic sull'icona Opzioni (il tooltip è Opzioni), quindi selezionare Variabili d'ambiente. Tutti personalizzazione salvati su disco può essere azzerato chiamando spyder dalla riga di comando con il --reset interruttore. cioè un comando come spyder --reset. Cliccando col tasto destro su array in Esplora variabile dà opzioni per tracciare e analizzare questi ulteriori. Facendo doppio click su un oggetto dizionario apre una nuova finestra che visualizza il dizionario bene. Presumibilmente non vi è altra possibilità nascosto per alcuni altri tipi di dati. Ci sono alcune convenzioni assunti per quanto riguarda le stringhe di documentazione scritta nel testo ristrutturato. Se seguiamo queste linee guida, si possono ottenere le stringhe di documentazione ben formattati in Spyder. Ad esempio, per ottenere la nostra funzione media () simile a questa in Esplora oggetti Spyder: Abbiamo bisogno di formattare la stringa di documentazione come segue Ciò che conta qui, è che la parola parametri vengono utilizzati, e sottolineati. La linea a. numero ci mostra che il tipo del parametro a è il numero. Nella riga successiva, che è rientrato, possiamo scrivere una spiegazione più estesa cosa questa variabile rappresenta, quali condizioni i tipi permessi devono soddisfare ecc Lo stesso per tutti i parametri, e anche per il valore restituito. Spesso è una buona idea per includere un esempio come mostrato. Attivazione della modalità di debug (Debug - gt Debug) inizia il debugger IPython (IPDB) nella console IPython. Questo è gestito come normale, ma la finestra di visualizzazione Editor evidenzia la riga che sta per essere eseguita, e l'esploratore variabile visualizza variabili nel contesto corrente del punto di esecuzione del programma. (Viene visualizzato solo variabili numeriche, cioè non oggetti funzione etc.) I comandi chiave all'interno del debugger IPython sono battute indivdual: S per Passo in istruzione corrente. Se si tratta di una chiamata di funzione, un passo in tale funzione. n passare alla dichiarazione successiva. Se l'istruzione corrente è una funzione, non un passo in quella funzione, ma eseguirlo completamente prima di restituire il controllo al prompt del debugger interattivo. R completare tutte le istruzioni nella funzione attuale e Ritorno da tale funzione, prima di restituire il controllo. p Stampa consente di visualizzare i valori delle variabili, per esempio p x stamperà il valore della variabile x. Si noti che al IPDB, è anche possibile modificare i valori di variabile. Ad esempio, per modificare un valiable x. si può dire IPDB gt x 42 e il debugger portare avanti con x essere vincolato a 42. È anche possibile chiamare funzioni, e fare molte altre cose. Per uscire dalla modalità di debug, è possibile digitare exit o selezionare dal menu di debug - gt Debug controllo - gt Exit Nella console IPython, si può chiamare il debug subito dopo l'eccezione è stata sollevata: questo si avvierà la modalità di debug IPython, e permette ispezione delle variabili locali nel punto in cui si è verificata l'eccezione come descritto sopra. Questo è molto più efficiente di aggiungere istruzioni di stampa per il codice di correre di nuovo. Se si utilizza questo, si consiglia inoltre di utilizzare i comandi su e giù che navigano il punto di controllo su e giù per lo stack. (Lo stack significa le funzioni che hanno chiamato la funzione di corrente verso il basso è la direzione opposta.) Supponendo che usiamo una console IPython con la versione GT 1.0.0, possiamo decidere se le figure create con matplotlibpylab mostreranno in linea. vale a dire all'interno della console IPython, o se devono apparire all'interno di una nuova finestra. Opzione 1 è conveniente per salvare un record della sessione interattiva (sezione Tasti di scelta rapida per le funzioni utili elenca una scorciatoia per salvare la console IPython in un file HTML). Opzione 2 permette di ingrandire in modo interattivo in figura, manipolarlo un po ', e salvare la cifra di diversi formati di file tramite il menu. Il comando per ottenere i dati di apparire in linea nella console IPython è in linea matplotlib. Il comando per ottenere figure appaiono in una propria finestra (che tecnicamente è una windown QT) è matplotlib qt. Le preferenze Spyder possono essere utilizzate per personalizzare il comportamento di default (in particolare Preferenze - gt IPython Console - gt grafica - gt Attiva supporto per passare alla linea stampa). Messaggi Recenti CategoriesAn Introduzione a Python Liste Fredrik Lundh agosto 2006 Overview160 Il tipo di lista è un contenitore che contiene una serie di altri oggetti, in un determinato ordine. Il tipo di lista implementa il protocollo sequenza, e permette anche di aggiungere e rimuovere gli oggetti dalla sequenza. Creazione Lists160 Per creare un elenco, mettere un numero di espressioni tra parentesi quadre: Questo costrutto è conosciuto come un display8221 8220list. Python supporta anche le liste calcolati, chiamati comprehensions8221 8220list. Nella sua forma più semplice, un elenco di comprensione ha la seguente sintassi: dove l'espressione viene valutata una volta, per ogni elemento nella sequenza. Le espressioni possono essere qualsiasi cosa si può mettere tutti i tipi di oggetti nelle liste, tra cui altre liste, e molteplici riferimenti a un singolo oggetto. È inoltre possibile utilizzare l'oggetto tipo di elenco built-in per creare liste: La sequenza può essere qualsiasi tipo di oggetto sequenza o iterabile, comprese le tuple e generatori. Se si passa a un altro elenco, la funzione lista fa una copia. Si noti che Python crea un unico nuovo elenco ogni volta che si esegue l'espressione. Né più, né meno. E Python non crea una nuova lista se si assegna un elenco a una variabile. Per informazioni su come aggiungere elementi a un elenco, una volta you8217ve creato, vedere Modifica elenchi di seguito. Accesso liste Lists160 implementare l'len interfaccia sequenza standard (L) restituisce il numero di elementi nella lista, Li restituisce l'elemento di indice i (il primo elemento ha indice 0), e Li: j restituisce una nuova lista, contenente gli oggetti tra i e j. Se si passa a un indice negativo, Python aggiunge la lunghezza della lista per l'indice. L-1 può essere utilizzato per accedere l'ultimo elemento di un elenco. Per l'indicizzazione normale, se l'indice risultante è al di fuori della lista, Python solleva un'eccezione IndexError. Fette sono trattati come i confini, invece, e il risultato sarà semplicemente contenere tutti gli elementi tra i confini. Liste supportano anche passi fetta: ciclare su Lists160 Il per-in dichiarazione rende facile anello sopra le voci di un elenco: Se è necessario sia l'indice e la voce, utilizzare la funzione Enumerate: Se avete bisogno solo l'indice, range di utilizzo e len. L'oggetto lista supporta il protocollo iteratore. Per creare esplicitamente un iteratore, utilizzare la funzione iter built-in: Python fornisce varie scorciatoie per le operazioni di lista comune. Ad esempio, se un elenco contiene i numeri, la funzione sum built-in vi dà la somma: se una lista contiene stringhe, è possibile combinare la stringa in una singola stringa lunga utilizzando il metodo stringa di unirsi: Python fornisce anche le operazioni integrate per cercare gli elementi, e per ordinare l'elenco. Queste operazioni sono descritte di seguito. Modifica Lists160 Il tipo di lista consente inoltre di assegnare a singoli elementi o fette, e di eliminarli. Si noti che le operazioni che modificano l'elenco modificheranno in posizione. Ciò significa che se si dispone di più variabili che puntano alla medesima lista, tutte le variabili saranno aggiornati allo stesso tempo. Per creare una lista separata, è possibile utilizzare per affettare o la funzione lista per creare rapidamente una copia: È anche possibile aggiungere elementi a una sequenza esistente. Il metodo append aggiunge un singolo elemento alla fine della lista, il metodo di estendere aggiunge voci da un altro elenco (o qualsiasi sequenza) fino alla fine, e l'inserto inserisce un elemento in un determinato indice, e spostare gli elementi rimanenti a destra. Per inserire gli elementi di un altro elenco o una sequenza in qualche altro luogo, utilizzare una sintassi affettare: È inoltre possibile rimuovere gli elementi. L'istruzione del può essere utilizzato per rimuovere un singolo elemento, o per rimuovere tutti gli elementi identificati da una fetta. Il metodo pop rimuove un singolo elemento e lo restituisce, mentre rimuovere le ricerche per un articolo, e rimuove il primo elemento corrispondente dalla lista. La dichiarazione del ed il metodo pop fa più o meno la stessa cosa, solo che pop restituisce l'elemento rimosso. Infine, il tipo di lista consente di invertire rapidamente l'ordine della lista. Inversione è veloce, invertendo quindi temporaneamente la lista spesso può accelerare le cose, se è necessario rimuovere e inserire una serie di elementi, all'inizio della lista: Si noti che il per-in dichiarazione mantiene un indice interno, che viene incrementato per ogni ciclo iterazione. Questo significa che se si modifica la lista you8217re loop sopra, gli indici otterrà fuori sincrono, e si può finire saltando gli elementi, o elaborare lo stesso elemento più volte. Per ovviare a questo, è possibile loop su una copia della lista: In alternativa, è possibile utilizzare creare una nuova lista, e aggiungere ad esso: un modello comune è quello di applicare una funzione ad ogni elemento di un elenco, e sostituire l'articolo con il valore restituito dalla funzione: è possibile che questo può essere scritta meglio utilizzando la funzione built-in map, o come una lista di comprensione: per la funzione semplice chiama, la soluzione mappa è più efficiente, dal momento che l'oggetto funzione ha solo bisogno di essere recuperato una volta . Per gli altri costrutti (ad esempio espressioni o le chiamate di opporsi metodi), è necessario utilizzare un callback o un lambda per avvolgere il funzionamento in tali casi, la lista di comprensione è più efficiente, e di solito anche più facile da leggere. Anche in questo caso, se avete bisogno sia l'oggetto e l'indice, utilizzare enumerate. È possibile utilizzare il tipo di elenco di implementare strutture di dati semplici, come pile e code. Il tipo di lista isn8217t ottimizzato per questo, quindi questo funziona meglio quando le strutture sono piccole (tipicamente alcune centinaia di oggetti o più piccolo). Per le strutture più grandi, potrebbe essere necessario una struttura di dati specializzate, come ad esempio collections. deque. Un'altra struttura di dati per il quale l'elenco funziona bene nella pratica, purché la struttura è abbastanza piccola, è un contenitore LRU (meno recente utilizzato). Le seguenti affermazioni si sposta un oggetto alla fine della lista: se si fa il sopra ogni volta che si accede a un elemento nell'elenco LRU, gli elementi meno utilizzati di recente si sposteranno verso l'inizio della lista. (for a simple cache implementation using this approach, see Caching .) Searching Lists160 The in operator can be used to check if an item is present in the list: To get the index of the first matching item, use index . The index method does a linear search, and stops at the first matching item. If no matching item is found, it raises a ValueError exception. To get the index for all matching items, you can use a loop, and pass in a start index: Moving the loop into a helper function makes it easier to use: To count matching items, use the count method: Note that count loops over the entire list, so if you just want to check if a value is present in the list, you should use in or, where applicable, index . To get the smallest or largest item in a list, use the built-in min and max functions: As with sort (see below), you can pass in a key function that is used to map the list items before they are compared: Sorting Lists160 The sort method sorts a list in place. To get a sorted copy, use the built-in sorted function: An in-place sort is slightly more efficient, since Python does not have to allocate a new list to hold the result. By default, Python8217s sort algorithm determines the order by comparing the objects in the list against each other. You can override this by passing in a callable object that takes two items, and returns -1 for 8220less than8221, 0 for 8220equal8221, and 1 for 8220greater than8221. The built-in cmp function is often useful for this: Alternatively, you can specify a mapping between list items and search keys. If you do this, the sort algorithm will make one pass over the data to build a key array, and then sort both the key array and the list based on the keys. If the transform is complex, or the list is large, this can be a lot faster than using a compare function, since the items only have to be transformed once. Python8217s sort is stable the order of items that compare equal will be preserved. Printing Lists160 By default, the list type does a repr on all items, and adds brackets and commas as necessary. In other words, for built-in types, the printed list looks like the corresponding list display: To control formatting, use the string join method, combined with either map or a list comprehension or generator expression. To print a list of string fragments to a file, you can use writelines instead of write . Performance Notes160 The list object consists of two internal parts one object header, and one separately allocated array of object references. The latter is reallocated as necessary. The list has the following performance characteristics: The list object stores pointers to objects, not the actual objects themselves. The size of a list in memory depends on the number of objects in the list, not the size of the objects. The time needed to get or set an individual item is constant, no matter what the size of the list is (also known as 8220O(1)8221 behaviour). The time needed to append an item to the list is 8220amortized constant8221 whenever the list needs to allocate more memory, it allocates room for a few items more than it actually needs, to avoid having to reallocate on each call (this assumes that the memory allocator is fast for huge lists, the allocation overhead may push the behaviour towards O(nn)). The time needed to insert an item depends on the size of the list, or more exactly, how many items that are to the right of the inserted item (O(n)). In other words, inserting items at the end is fast, but inserting items at the beginning can be relatively slow, if the list is large. The time needed to remove an item is about the same as the time needed to insert an item at the same location removing items at the end is fast, removing items at the beginning is slow. The time needed to reverse a list is proportional to the list size (O(n)). The time needed to sort a list varies the worst case is O(n log n), but typical cases are often a lot better than that. Last Updated: November 2006
No comments:
Post a Comment