Una guida al trading opzioni binarie nelle opzioni US binarie sono basati su un semplice sì o no proposizione: Sarà un'attività sottostante essere al di sopra di un certo prezzo in un determinato momento Traders fare trading a seconda che essi credono che la risposta è sì o no, facendo è uno dei più semplici attività finanziarie al commercio. Questa semplicità ha portato a grande richiamo tra i commercianti ei nuovi arrivati dei mercati finanziari. Tanto semplice come può sembrare, gli operatori devono comprendere appieno come opzioni binarie funzionano, quali i mercati e le strutture di tempo si possono scambiare con le opzioni binarie, i vantaggi e gli svantaggi di questi prodotti, e che le aziende sono legalmente autorizzate a fornire opzioni binarie per i residenti degli Stati Uniti. Le opzioni binarie negoziati al di fuori degli Stati Uniti sono in genere strutturate in modo diverso rispetto binari disponibili nelle borse statunitensi. Quando si considera speculazioni o di copertura. opzioni binarie sono un'alternativa, ma solo se il commerciante comprende pienamente le due possibili esiti di queste opzioni esotiche. (Per la lettura correlate, vedere: quello che c'è da sapere su Opzioni Binarie fuori degli Stati Uniti) statunitensi opzioni binarie Explained opzioni binarie offrono un modo per il commercio mercati con rischio innevate e potenziale di profitto ridotta, sulla base di un sì o un no proposizione. Per esempio: Sarà il prezzo dell'oro essere al di sopra di 1.250 a 13:30 oggi Se credi che sarà, si acquista l'opzione binaria. Se pensate oro sarà sotto 1.250 a 1:30, allora si vende questa opzione binaria. Il prezzo di un'opzione binaria è sempre compreso tra 0 e 100, e proprio come gli altri mercati finanziari, vi è un bid e ask prezzo. È possibile che questo binario può essere scambiato a 42,50 (bid) e 44,50 (offerta) a 13:00 Se si acquista l'opzione binaria a destra e poi si pagherà 44,50, se si decide di vendere a destra e poi youll vendere a 42,50. Assumiamo che si decide di acquistare a 44.50. Se al 13:30 il prezzo dell'oro è superiore a 1.250, la vostra opzione scade e diventa degno 100. Fate un utile di 100 - 44.50 55.50 (al netto delle commissioni). Questo si chiama essere in denaro. Ma se il prezzo dell'oro è inferiore a 1.250 al 13:30 l'opzione scade a 0. Pertanto si perde il 44.50 investito. Questo chiamato out of the money. L'offerta e l'offerta oscillano fino a quando l'opzione scade. Si può chiudere la posizione in qualsiasi momento prima della scadenza per bloccare un profitto o un ridurre una perdita (rispetto a farla scadere out of the money). Alla fine ogni opzione si stabilisce a 100 o 0 100 se l'opzione binaria proposizione è vera, e 0 se si scopre di essere falso. Così ogni opzione binaria ha un potenziale valore complessivo di 100, e si tratta di un gioco a somma zero che cosa fare qualcun altro perde, e ciò che si perde qualcun altro fa. Ogni operatore deve mettere il capitale per il loro lato del commercio. Negli esempi sopra riportati, è stato acquistato un'opzione a 44.50, e qualcuno hai venduto questa opzione. Il rischio massimo è 44,50 se l'opzione si attesta a 0, quindi il commercio si 44.50 costa. La persona che ha venduto a voi ha un rischio massimo di 55,50 se l'opzione si attesta a 100 (100-44,50 55.50). Un commerciante può acquistare più contratti, se lo si desidera. Un altro esempio: NASDAQ US Tech 100 Index gt 3.784 (11:00). L'offerta attuale e offerta è rispettivamente di 74,00 e 80,00,. Se si pensa che l'indice sarà sopra 3.784 a 11:00 si acquista l'opzione binaria a 80 (o fai un'offerta ad un prezzo inferiore e spero che qualcuno vende a voi a quel prezzo). Se la pensa l'indice sarà inferiore a 3.784 in quel momento, si vende a 74.00 (o effettuare un offerta di sopra di tale prezzo e spero qualcuno compra da voi). Si decide di vendere a 74.00, ritenendo l'indice sta per scendere al di sotto 3.784 (chiamato strike price) di 11:00 E se davvero, come il commercio, si può vendere (o comprare) più contratti. La figura 1 mostra un commercio di vendere cinque contratti (risoluzione) a 74.00. La piattaforma Nadex calcola automaticamente la massima perdita e guadagno quando si crea un ordine, chiamato un biglietto. Nadex commerciale Biglietto con Max economico Max (Figura 1) Il massimo profitto su questo biglietto è 370 (74 x 5 370), e la perdita massima è di 130 (100 - 74 26 x 5 130) sulla base di cinque contratti e un sell prezzo di 74.00. (Per ulteriori informazioni su questo argomento, vedere Introduzione alle opzioni binarie) Come l'offerta e chiedere vengono determinati l'offerta e chiedere sono determinati dai commercianti stessi come valutano la probabilità della proposizione sia vero o no. In termini semplici, se l'offerta e chiedere su un'opzione binaria sono a 85 e 89, rispettivamente, quindi i commercianti stanno assumendo una probabilità molto alta che l'esito della opzione binaria sarà sì, e l'opzione scade vale 100. Se l'offerta e chiedere sono vicino a 50, gli operatori sono sicuri se il binario scadrà a 0 o 100 suoi anche quote. Se l'offerta e chiedere sono a 10 e 15 rispettivamente, che indica commercianti pensano vi è una elevata probabilità che l'esito opzione non sarà, e scadenza vale 0. Gli acquirenti in questa zona sono disposti prendere il piccolo rischio per un grande guadagno. Mentre quelli di vendita sono disposti a prendere un piccolo ma molto probabilmente profitto per un grande rischio (rispetto al loro guadagno). Dove negoziare opzioni binarie Opzioni Binarie commercio sullo scambio Nadex. il primo scambio Stati Uniti legale focalizzata sulle opzioni binarie. Nadex fornisce la propria piattaforma di trading di opzioni binarie basata su browser che gli operatori possono accedere tramite account demo o conto dal vivo. La piattaforma di trading fornisce grafici in tempo reale con accesso diretto al mercato alle attuali prezzi delle opzioni binarie. Le opzioni binarie sono disponibili anche attraverso il Chicago Board Options Exchange (CBOE). Chiunque con un conto di intermediazione opzioni-approvati può commerciare CBOE opzioni binarie attraverso il loro conto di trading tradizionale. Non tutti i broker offrono trading di opzioni binarie, tuttavia. Ogni costi scambiati contratto Nadex 0,90 per entrare e 0,90 per uscire. La quota è limitato a 9, quindi l'acquisto di 15 lotti sarà ancora solo un costo di 9 per entrare e 9 per uscire. Se si tiene premuto il commercio fino al pagamento e finire in the money, la tassa di uscita è valutata a voi alla scadenza. Se si tiene il commercio fino al pagamento, ma finito fuori del denaro, senza costi commercio per uscire viene valutata. opzioni binarie CBOE sono negoziati attraverso diversi broker di opzioni ogni carica loro commissioni. Scegli il tuo classi di attività multiplo di mercato binario sono scambiabili tramite opzione binaria. Nadex offre la negoziazione in importanti indici come il Dow 30 (Wall Street 30), il SampP 500 (US 500), Nasdaq 100 (US TECH 100) e Russell 2000 (US Smallcap 2000). indici globali per il Regno Unito (FTSE 100), Germania (Germania 30) e Giappone (Giappone 225) sono inoltre disponibili. Nadex offre delle materie prime opzioni binarie relative al prezzo del greggio. gas naturale, oro, argento, rame, mais e soia. Trading fatti di cronaca è anche possibile con le opzioni binarie di eventi. Acquistare o vendere opzioni in base al fatto che la Federal Reserve farà aumentare o diminuire i tassi, o se le richieste di disoccupazione e libri paga non agricoli verrà in sopra o sotto le stime di consenso. (Per ulteriori informazioni su questo argomento, vedere opzioni esotiche: una fuga dalle normali negoziazioni) Il CBOE offre due opzioni binarie per il commercio. Un 500 opzione SampP Index (BSZ) sulla base del SampP 500 Index il, e un'opzione indice di volatilità (BVZ) basato sulla volatilità CBOE Index (VIX). Pick Your Time Frame L'imprenditore può scegliere tra le opzioni binarie Nadex (nelle classi di attività di cui sopra) che scadono oraria, giornaliera o settimanale. opzioni orarie forniscono opportunità per i commercianti di giorno. anche in condizioni di mercato tranquilli, per conseguire un rendimento stabilito se sono corretti nella scelta della direzione del mercato su questo lasso di tempo. opzioni giornaliere scadono alla fine del giorno di negoziazione, e sono utili per i commercianti di giorno o di coloro che cercano di coprire altre partecipazioni azionarie, forex o delle materie prime contro che i movimenti di giorni. opzioni settimanali scadono alla fine della settimana di negoziazione, e sono quindi scambiati dai commercianti di swing per tutta la settimana, e anche da commercianti di giorno come la scadenza si avvicina opzioni nel pomeriggio di Venerdì. contratti di eventi a base scadono dopo il rilascio ufficiale notizia associata all'evento, e quindi tutti i tipi di operatori prendono posizioni con largo anticipo rispetto - e fino alla scadenza. Vantaggi e svantaggi A differenza dei mercati reali stock o forex in cui possono verificarsi lacune dei prezzi o slittamento, il rischio sulle opzioni binarie è tappate. La sua non è possibile perdere più del costo del commercio. rendimenti migliori rispetto alla media sono possibili anche in mercati molto tranquilla. Se una coppia indice azionario o forex è a malapena in movimento, la sua difficile da profitto, ma con un'opzione binaria è noto la vincita. Se si acquista un opzione binaria a 20, sarà o stabilirsi a 100 o 0, facendovi 80 sul 20 investimento o perdere 20. Si tratta di un 4: 1 premio al rapporto rischio. un'opportunità che è improbabile che si trovano nel mercato reale sottostante l'opzione binaria. Il rovescio della medaglia è che il guadagno è sempre limitato. Non importa quanto lo stock o forex coppia si muove a tuo favore, il più un'opzione di opzione binaria può essere un valore è 100. L'acquisto di più contratti di opzione è un modo per potenzialmente profitto più da un movimento di prezzo previsto. Dal momento che le opzioni binarie sono un valore massimo di 100, che li rende accessibili ai commercianti, anche con capitale di trading limitata. come non si applicano limiti operativi tradizionali Stock Day. Trading può iniziare con un deposito di 100 a Nadex. Le opzioni binarie sono un derivato sulla base di un'attività sottostante, che non si possiede. Pertanto, non sei titolare di diritti di voto o di dividendi che avresti diritto se si possedeva un magazzino vero e proprio. Le opzioni binarie sono basate su un sì o un no proposizione. Il vostro profitto e la potenziale perdita sono determinati dal comprare o vendere prezzo, e se l'opzione scade valore di 100 o 0. rischio e di rendimento sono entrambi ricoperti, e si può uscire da una delle opzioni in qualsiasi momento prima della scadenza per bloccare un profitto o ridurre un perdita. Le opzioni binarie all'interno del fuori degli USA sono scambiati tramite gli scambi Nadex e CBOE. Le società straniere sollecitando i residenti degli Stati Uniti per il commercio la loro forma di opzioni binarie sono di solito operano illegalmente. trading di opzioni binarie ha una bassa barriera all'ingresso. ma solo perché qualcosa è semplice non significa itll essere facile per fare soldi con. C'è sempre qualcun altro dall'altra parte del commercio che pensa theyre corretta e tu sei sbagliato. commerciare solo con il capitale che si può permettere di perdere, e il commercio un conto demo per diventare completamente a suo agio con il modo binario opzioni funzionano prima di trading con le opzioni reali capital. Binary Trading con l'opzione IQ Qual è opzioni binarie Prima di tutto, si tratta di una linea molto redditizio strumento di trading che permette di stimare la quantità di profitto potenziale in anticipo. trading di opzioni binarie può portare reddito notevole nel più breve tempo possibile. I commercianti acquistare opzioni ad un prezzo predeterminato. Il trading online può essere redditizia se il commerciante identifica correttamente il movimento del mercato. I vantaggi delle opzioni binarie Trading è una zona ad alto rischio dove è possibile raddoppiare o addirittura triplicare il capitale o perdere in pochi minuti. Le opzioni binarie hanno diversi vantaggi che permettono di ottenere più profitto con rischio prevedibile. Un'opzione con un utile fisso si differenzia dal commercio convenzionale. I principianti possono negoziare opzioni binarie con opzione QI altrettanto bene come gli operatori esperti. L'intero processo è completamente automatizzato. opzioni binarie commercianti sono consapevoli dei loro profitti in anticipo il loro obiettivo principale è quello di selezionare la corretta direzione del movimento del mercato. Hanno bisogno di scegliere tra due direzioni solo su o in giù. Due tipi di piattaforma Option Trading Online L'IQ consente di negoziare opzioni binarie in due modalità di base. La pratica è conto per la formazione. Per aprire un conto pratica e mettere alla prova la tua forza, voi non nemmeno bisogno di effettuare un deposito. Per la negoziazione vera e propria, è necessario depositare 10 solo. Questo garantisce un fx fino a 36. Quando si apre un conto per una maggiore quantità (da 3.000), un account manager personale sarà al vostro servizio. operazioni di trading offerti da questo sito possono essere considerate operazioni di trading ad alto rischio e la loro esecuzione può essere molto rischioso. L'acquisto di strumenti finanziari o che utilizzano i servizi offerti sul sito può comportare perdite significative o addirittura in una perdita totale di tutti i fondi sul tuo conto. Viene concessa non esclusivi diritti limitati non trasferibile di utilizzare il IP fornite su questo sito per scopi personali e non commerciali in relazione ai servizi offerti su un solo sito web. La Società agisce al di fuori della Federazione russa. eu. iqoption è di proprietà e gestito da Iqoption Europe Ltd. IQ opzione, 20.132.017 informazioni di ripristino password è stata inviata con successo alla tua registrazione elettronica è al momento disponibile nella Federazione Russa. Se si pensa che sei vedendo questo messaggio per errore, si prega di contattare supportiqoption. What8217s nuovo in Python 3.0 14 febbraio 2009 In questo articolo vengono illustrate le nuove funzionalità di Python 3.0, rispetto al 2.6. Python 3.0, noto anche come 8220Python 30.008.221 o 8220Py3K8221, è la prima mai intenzionalmente rilascio di Python all'indietro incompatibili. Non ci sono più cambiamenti che in un comunicato tipico, e più che sono importanti per tutti gli utenti Python. Tuttavia, dopo digerire i cambiamenti, you8217ll scoprire che Python davvero hasn8217t ha cambiato più di tanto 8211 in generale, per lo più we8217re fissaggio fastidi ben noti e le verruche, e la rimozione di un sacco di vecchi cruff. Questo tentativo doesn8217t articolo per fornire una specifica completa di tutte le nuove caratteristiche, ma invece cerca di dare una visione comoda. Per tutti i dettagli, si dovrebbe fare riferimento alla documentazione per Python 3.0, Andor i molti PEP si fa riferimento nel testo. Se si vuole comprendere l'attuazione completa e design razionale per una caratteristica particolare, PEP di solito hanno più dettagli rispetto alla documentazione regolare ma nota che PEP di solito non sono tenuti up-to-date una volta che una funzione è stata pienamente attuata. A causa di vincoli di tempo questo documento non è completa come avrebbe dovuto essere. Come sempre per una nuova release, il file MiscNEWS nella distribuzione di origine contiene una serie di informazioni dettagliate su ogni piccola cosa che è stata modificata. Common inciampo questa sezione sono elencati quei pochi cambiamenti che hanno più probabilità di inciampare in su se you8217re utilizzato per Python 2.5. Stampa è una funzione L'istruzione print è stato sostituito con una funzione di stampa (), con argomenti a parola chiave per sostituire la maggior parte della speciale sintassi del vecchio istruzione print (PEP 3105). Esempi: È anche possibile personalizzare il separatore tra le voci, ad es .: la funzione di stampa () doesn8217t supportano la funzione 8220softspace8221 del vecchio istruzione print. Ad esempio, in Python 2.x, quotAnquot stampa, quotBquot avrebbe scritto quotAnBnquot ma in Python 3.0, stampa (quotAnquot, quotBquot) scrive quotAn Bnquot. Inizialmente, you8217ll essere trovarsi a digitare la vecchia stampa X molto in modalità interattiva. È ora di riqualificare le dita per digitare stampa (x) invece Quando si utilizza lo strumento di conversione source-to-source 2to3, tutte le dichiarazioni di stampa vengono convertiti automaticamente per stampare chiamate di funzione (), quindi questo è per lo più un non-problema per i progetti di grandi dimensioni. Vista e iteratori invece di liste alcune API ben noti elenchi ritorno non è più: Metodi dict dict. keys (). dict. items () e dict. values () restituiscono 8220views8221 invece di liste. Ad esempio, questo non funziona più: k d. keys () k. sort (). Utilizzare k ordinato (d), invece (questo funziona in Python 2.5 troppo ed è altrettanto efficiente). Inoltre, le dict. iterkeys (). dict. iteritems () e dict. itervalues () metodi non sono più supportati. map () e il filtro () iteratori ritorno. Se si ha realmente bisogno di un elenco, una soluzione rapida è ad esempio Lista (mappa (.)). ma una correzione migliore è spesso di utilizzare un elenco di comprensione (soprattutto quando il codice originale utilizza lambda) o riscrivere il codice in modo che doesn8217t bisogno di una lista affatto. Particolarmente difficile è mappa () invocato per gli effetti collaterali della funzione della trasformazione corretta è quella di usare un normale ciclo for (dal momento che la creazione di un elenco sarebbe solo uno spreco). range () ora si comporta come xrange () utilizzata per comportarsi, se non funziona con valori di dimensione arbitraria. Quest'ultimo non esiste più. zip () ora restituisce un iteratore. Ordinazione confronti di Python 3.0 ha semplificato le regole per ordinare i confronti: Gli operatori di confronto ordinamento (... Lt lt gt gt) sollevare un'eccezione TypeError quando gli operandi don8217t hanno un ordinamento naturale significativo. Così, espressioni come 1 lt. 0 gt Nessuno o len lt len non sono più validi, e per esempio Nessuno lt Nessuno solleva un'eccezione TypeError invece di tornare False. Un corollario è che l'ordinamento una lista eterogenea non ha più senso 8211 tutti gli elementi devono essere comparabili tra loro. Si noti che questo non vale per l'e operatori: oggetti di tipo diverso incomparabili confrontano sempre disuguale gli uni agli altri. builtin. sorted () e list. sort () non accettano più l'argomento cmp che fornisce una funzione di confronto. Utilizzare l'argomento chiave, invece. N. B. la chiave e invertire gli argomenti sono ormai 8220keyword-only8221. La funzione cmp () deve essere trattata come andato, e cmp () speciale metodo non è più supportato. Utilizzare lt () per l'ordinamento, eq () con hash (). e altri confronti ricchi, se necessario. (Se si ha realmente bisogno la funzionalità cmp (), è possibile utilizzare l'espressione (un gt b) - (a lt b) come l'equivalente per cmp (a, b).) PEP 0237. In sostanza, lungo rinominato a int. Cioè, c'è solo un tipo incorporato integrale, denominato int ma comporta lo più come il vecchio tipo lungo. PEP 0238. Un'espressione come 12 restituisce un float. Utilizzare 12 per ottenere il comportamento troncare. (Quest'ultimo sintassi esiste da anni, almeno dal Python 2.2.) La costante sys. maxint stato rimosso, poiché non vi è un limite al valore di interi. Tuttavia, sys. maxsize può essere utilizzato come un numero intero maggiore di qualsiasi elenco pratico o indice di stringhe. È conforme alle dimensioni 8220natural8221 intero implementation8217s ed è in genere lo stesso che sys. maxint nelle precedenti versioni sulla stessa piattaforma (supponendo che le stesse opzioni di generazione). Il repr () di un lungo doesn8217t intero include il finale più L, così il codice che mette a nudo incondizionatamente quel personaggio taglierà fuori l'ultima cifra, invece. (Usa str (), invece.) Letterali ottali non è più della forma 0720 uso 0o720 invece sono. Vs. testo Dati anziché Unicode vs. 8-bit Tutto quello che credevamo di sapere su dati binari e Unicode è cambiato. Python 3.0 utilizza i concetti di testo e dati (binario) anziché stringhe Unicode e stringhe a 8 bit. Tutto il testo è Unicode tuttavia codificato Unicode è rappresentato come dati binari. Il tipo utilizzato per contenere il testo è str. del tipo utilizzato per contenere dati byte. La più grande differenza con la situazione 2.x è che ogni tentativo di mescolare testo e dati in Python 3.0 solleva TypeError. mentre se si dovesse mescolare Unicode e le stringhe a 8 bit in Python 2.x, che avrebbe funzionato se la stringa a 8 bit è successo a contenere solo 7 bit (ASCII) byte, ma si otterrebbe UnicodeDecodeError se contenesse non-ASCII valori. Questo comportamento specifico valore ha causato numerose facce tristi nel corso degli anni. Come conseguenza di questo cambiamento di filosofia, più o meno tutto il codice che utilizza Unicode, codifiche o dati binari molto probabilmente deve cambiare. Il cambiamento è per il meglio, come nel mondo 2.x c'erano numerosi bug che hanno a che fare con la miscelazione di testo codificato e non codificata. Per essere preparati in Python 2.x, iniziare a utilizzare unicode per tutto il testo in chiaro, e str solo per i dati binari o codificati. Poi lo strumento 2to3 farà la maggior parte del lavoro per voi. Non è più possibile usare uquot. letterali quot per il testo Unicode. Tuttavia, è necessario utilizzare bquot. letterali quot per i dati binari. Come i tipi str e byte non possono essere mescolati, è necessario sempre in modo esplicito la conversione tra di loro. Utilizzare str. encode () per andare da STR a byte. e bytes. decode () per andare da byte a str. È inoltre possibile utilizzare byte (s, codifica.) E str (b, codifica.). rispettivamente. Come str. il tipo di byte è immutabile. C'è un tipo mutabile separata per contenere dati binari nel buffer, ByteArray. Quasi tutte le API che accettano byte accettano anche ByteArray. L'API mutabile si basa su collections. MutableSequence. Tutti backslash in stringhe letterali prime vengono interpretati letteralmente. Ciò significa che U e u fughe nelle stringhe prime non sono trattati in modo speciale. Ad esempio, ru20ac è una stringa di 6 caratteri in Python 3.0, mentre in 2.6, uru20ac è stato il singolo 8220euro8221 carattere. (Naturalmente, questo cambiamento riguarda solo stringhe letterali grezzo il carattere dell'euro è u20AC in Python 3.0.) Il comando incorporato basestring tipo astratto è stato rimosso. Utilizzare str invece. La str e byte tipi don8217t hanno funzionalità abbastanza in comune da giustificare una classe base comune. Lo strumento 2to3 (vedi sotto) sostituisce ogni occorrenza di basestring con str. I file aperti come file di testo (ancora la modalità predefinita per open ()) utilizzare sempre una codifica per mappare tra le stringhe (in memoria) e byte (su disco). I file binari (aperti con un B nell'argomento modalità) usano sempre bytes in memoria. Ciò significa che se un file viene aperto utilizzando una modalità non corretta o la codifica, IO probabilmente non riuscire ad alta voce, invece di produrre silenziosamente dati non corretti. Significa anche che anche gli utenti Unix dovranno specificare la modalità corretta (testo o binario) quando si apre un file. C'è una codifica predefinita dipende dalla piattaforma, che su piattaforme Unixy può essere impostato con la variabile d'ambiente LANG (e qualche volta anche con alcune altre variabili di ambiente locale-correlate specifiche della piattaforma). In molti casi, ma non tutti, il default del sistema è UTF-8 non si dovrebbe mai contare su questa impostazione predefinita. Ogni lettura o la scrittura di applicazioni più di testo ASCII puro dovrebbe probabilmente avere un modo per ignorare la codifica. Non vi è più alcuna necessità di utilizzare i flussi di codifica-aware nel modulo codecs. I nomi dei file vengono passati e restituiti dalle API come (Unicode) stringhe. Questo può presentare problemi specifici della piattaforma perché su alcune piattaforme nomi di file sono stringhe di byte arbitrarie. (D'altra parte, in Windows i nomi dei file sono nativamente memorizzati come Unicode.) Come un work-in giro, la maggior parte delle API (ad esempio open () e molte funzioni nel modulo os) che prendono i nomi dei file accettano byte oggetti così come stringhe, e un alcune API hanno un modo di chiedere un valore di ritorno byte. Così, os. listdir () restituisce una lista di istanze byte se l'argomento è un'istanza di byte, e os. getcwdb () restituisce la directory di lavoro corrente come istanza byte. Si noti che quando os. listdir () restituisce una lista di stringhe, nomi di file che non possono essere decodificati correttamente vengono omessi piuttosto che aumentare UnicodeError. Alcune API di sistema come os. environ e sys. argv possono anche problemi presenti quando i byte messi a disposizione dal sistema non è interpretabile utilizzando la codifica di default. Impostazione della variabile LANG e rieseguire il programma è probabilmente l'approccio migliore. PEP 3138. Il repr () di una stringa non sfugge caratteri non ASCII. Sfugge ancora caratteri di controllo e punti di codice con lo stato non stampabile nello standard Unicode, però. PEP 3120. La codifica sorgente di default è ora UTF-8. PEP 3131. lettere non ASCII sono ora autorizzati a identificatori. (Tuttavia, la libreria standard rimane ASCII solo con l'eccezione dei nomi collaboratore nei commenti.) I moduli StringIO e cStringIO se ne sono andati. Invece, importare il modulo IO e utilizzare io. StringIO o io. BytesIO per il testo e di dati, rispettivamente. Si veda anche il HOWTO Unicode. che è stato aggiornato per Python 3.0. Panoramica di sezione Sintassi Modifiche Questo dà una breve panoramica di ogni cambiamento sintattico in Python 3.0. Nuovo PEP Sintassi 3107. argomento della funzione e annotazioni valore di ritorno. Questo fornisce un modo standardizzato di annotare un parametri function8217s e valore di ritorno. Non ci sono semantica collegati a tali annotazioni, tranne che possa apparire in fase di esecuzione utilizzando l'attributo annotazioni. L'intento è quello di incoraggiare la sperimentazione attraverso metaclassi, decoratori o quadri. PEP 3102. Chiave-solo argomenti. Chiamato parametri che si verificano dopo args nella lista dei parametri devono essere specificati utilizzando la sintassi parola chiave nella chiamata. È inoltre possibile utilizzare una nuda nella lista dei parametri per indicare che è don8217t accettare un elenco di argomenti di lunghezza variabile, ma non avere argomenti per parole chiave solo. argomenti chiave sono ammessi dopo l'elenco delle classi di base in una definizione di classe. Questo viene utilizzato dalla nuova convenzione per specificare un metaclasse (vedere la sezione successiva), ma può essere utilizzato per altri scopi, finché la metaclasse supporta. PEP 3104. dichiarazione non locale. Utilizzando non locale x è ora possibile assegnare direttamente ad una variabile in un ambito esterno (ma non globale). non locale è una nuova parola riservata. PEP 3132. Esteso Iterable Apertura della confezione. A questo punto è possibile scrivere le cose come a, b, somesequence riposo. E anche riposare, una roba. L'oggetto resto è sempre una (possibilmente vuoto) lista sul lato destro può essere qualsiasi iterabile. Esempio: comprensioni dizionario: significa la stessa cosa come dict (roba), ma è più flessibile. (Questo è PEP 0274 rivendicata -.) Set letterali, ad esempio . Si noti che è un insieme utilizzo dizionario vuoto () per un insieme vuoto. Set comprensioni sono supportati anche es significa la stessa cosa di set (roba), ma è più flessibile. Nuove letterali ottale, ad esempio 0o720 (già in 2.6). I vecchi letterali ottale (0720) se ne sono andati. Nuove letterali binari, per esempio 0b1010 (già in 2.6), e non vi è una nuova funzione built corrispondente, bin (). letterali byte vengono introdotti con una B o B leader. e vi è una nuova funzione built corrispondente byte (). Cambiato sintassi, come e con ora sono parole riservate. (Dal 2.6, in realtà.) Vero. Falso. e Nessuno sono parole riservate. (2.6 parzialmente applicate le restrizioni Nessuno già.) PEP 3115. Nuovo metaclasse Sintassi. Invece di: ora è necessario usare: La variabile metaclasse modulo globale non è più supportato. (E 'stata una stampella per rendere più facile per difetto a classi di nuovo stile senza derivante ogni classe di oggetti.) Di lista non supportano più la forma sintattica. per var in item1. item2. . Uso . per var in (voce1. item2.), invece. Si noti inoltre che list comprehension hanno diverse semantiche: sono più vicini allo zucchero sintattico per un generatore di espressione all'interno di un costruttore lista (), e in particolare le variabili di controllo del ciclo non sono trapelate nel campo di applicazione circostante. L'ellissi (.) Può essere utilizzato come espressione atomica web. (In precedenza è stato consentito solo a fette.) Inoltre, si deve ora essere scritto come. . (In precedenza potrebbe anche essere scritto come.. Per un puro caso della grammatica.) Rimosso Sintassi PEP 3113. parametro Tuple disimballaggio rimosso. Non è più possibile scrivere def foo (a, (b, c)). . Utilizzare def foo (a, bc): b, c bc invece. apici inversi rimossi (uso repr (), invece). ltgt Rimosso (utilizzare al posto). Rimosso parola: exec () non è più una parola rimane in funzione. (Per fortuna la sintassi della funzione è stata accettata anche in 2.x) Si noti inoltre che exec () non prende un argomento flusso, invece di exec (f) è possibile utilizzare exec (f. read ()). letterali interi non supportano più di un l finale o L. Le stringhe letterali supporto non è più un uo U leader. La sintassi da module import è consentito solo a livello di modulo, non è più funzioni all'interno. L'unica sintassi accettabile per le importazioni relativi è da. Nome modulo di importazione. Tutte le forme di importazione che non inizia con. vengono interpretati come importazioni assoluti. (PEP 0328) classi Classic sono andati. Variazioni Già presente in Python 2.6 dato che molti utenti presumibilmente fanno il salto direttamente da Python 2.5 a Python 3.0, questa sezione ricorda al lettore di nuove funzionalità che sono stati originariamente progettati per Python 3.0, ma che sono stati back-porting per Python 2.6. Le sezioni corrispondenti a What8217s nuovo in Python 2.6 dovrebbero essere consultati per una descrizione più lunghi. PEP 343: Il 8216with8217 dichiarazione. L'istruzione with è ormai una caratteristica standard e non ha più bisogno di essere importati dal futuro. Verificate anche scrittura gestori contesto e il modulo contextlib. PEP 366: espliciti importazioni rispetto da un modulo principale. Ciò aumenta l'utilità dell'opzione - m quando il modulo riferimento vive in un pacchetto. PEP 370: per utente site-packages Directory. PEP 371: Il pacchetto multiprocessing. PEP 3101: corda formattazione. Nota: la descrizione 2.6 menziona il metodo format () sia a 8-bit e stringhe Unicode. In 3.0, solo il tipo str (stringhe di testo con il supporto Unicode) sostiene questo metodo il tipo di byte non lo fa. Il piano è quello di rendere alla fine questa l'unica API per la formattazione di stringhe, e per avviare deprecando l'operatore in Python 3.1. PEP 3105: la stampa come una funzione. Questo è ormai una caratteristica standard e non ha più bisogno di essere importati da futuro. Maggiori dettagli sono stati dati in precedenza. PEP 3110: gestione delle eccezioni modifiche. L'eccezione exc come sintassi var è ora di serie e salvo Ecc. var non è più supportato. (Naturalmente, il come parte var è comunque facoltativo.) PEP 3112: letterali byte. Il bquot. stringa quot notazione letterale (e le sue varianti come b.. bquotquotquot. quotquotquot. e brquot. quot) ora produce un letterale di tipo byte. PEP 3116: New IO biblioteca. Il modulo IO è ora il modo standard di fare file di IO, e i valori iniziali di sys. stdin. sys. stdout e sys. stderr ora sono istanze di io. TextIOBase. La funzione builtin open () è ora un alias per io. open () e contiene ulteriori argomenti a parola chiave di codifica. errori . newline e closefd. Si noti inoltre che un argomento modalità non valida ora solleva ValueError. Non IOError. L'oggetto file binario sottostante un oggetto di file di testo può essere letta come f. buffer (ma attenzione che l'oggetto testo mantiene un buffer di se stesso, al fine di velocizzare le operazioni di codifica e decodifica). PEP 3118: Revised Protocollo Buffer. Il vecchio tampone incorporato () è ora davvero andato il nuovo memoryview incorporato () prevede (per lo più) una funzionalità simile. PEP 3119: classi astratte Base. Il modulo ABC e l'ABC definito nel modulo collezioni svolge un ruolo un po 'più prominente nella lingua ora, e il tipo di raccolta incorporate come dict e la lista conformi alle ABC collections. MutableMapping e collections. MutableSequence, rispettivamente. PEP 3127: letterale intero supporto e sintassi. Come accennato in precedenza, la nuova notazione letterale ottale è l'unico supportato, e sono state aggiunte letterali binari. PEP 3129: Classe decoratori. PEP 3141: A Tipo gerarchia per i numeri. Il modulo di numeri è un altro nuovo uso di ABC, definendo Python8217s 8220numeric tower8221. Da notare anche il nuovo modulo frazioni che implementa numbers. Rational. Modifiche Biblioteca per motivi di tempo, questo documento non copre in modo esauriente gli molto estese modifiche alla libreria standard. PEP 3108 è il riferimento per i principali cambiamenti alla libreria. Here8217s una revisione della capsula: Molti vecchi moduli sono stati rimossi. Alcuni, come gopherlib (non più utilizzato) e MD5 (sostituito da hashlib), erano già deprecata da PEP 0004. Altri sono stati rimossi a seguito della rimozione del supporto per le varie piattaforme come Irix, BeOS e Mac OS 9 (vedi PEP 0011). Alcuni moduli sono stati selezionati per la rimozione in Python 3.0 per mancanza di uso o perché un sostituto migliore esiste. Vedere PEP 3108 per un elenco esaustivo. Il pacchetto bsddb3 è stato rimosso perché la sua presenza nella libreria standard di base ha dimostrato nel tempo di essere un onere particolare per gli sviluppatori di base a causa di test di instabilità e di pianificazione del rilascio Berkeley DB8217s. Tuttavia, il pacchetto è vivo e vegeto, ha mantenuto esternamente jcea. esprogramacionpybsddb. htm. Alcuni moduli sono stati rinominati perché il loro vecchio nome disobbedito PEP 0008. sia per varie ragioni. Here8217s l'elenco: un modello comune in Python 2.x è quello di avere una versione di un modulo implementato in puro Python, con una versione accelerata opzionale implementata come estensione di C per esempio, salamoia e cPickle. Questo pone l'onere di importare la versione accelerata e ricadere sulla versione pura Python su ogni utente di questi moduli. In Python 3.0, le versioni accelerate sono considerati dettagli di implementazione delle versioni puro Python. Gli utenti dovrebbero sempre importare la versione standard, che tenta di importare la versione accelerata e cade alla versione puro Python. La coppia salamoia cPickle ricevuto questo trattamento. Il modulo profilo è sulla lista per 3.1. Il modulo StringIO è stato trasformato in una classe nel modulo IO. Alcuni dei relativi moduli sono stati raggruppati in pacchetti, e di solito i nomi per modulo sono state semplificate. I nuovi pacchetti che ne derivano sono: (..... Anydbm dbhash dbm dumbdbm gdbm whichdb) dBm. html (HTMLParser. htmlentitydefs). http (httplib. BaseHTTPServer. CGIHTTPServer. SimpleHTTPServer. Cookie. cookielib). Tkinter (tutti Tkinter - related moduli tranne tartaruga). Il target di tartaruga doesn8217t veramente a cuore Tkinter. Si noti inoltre che a partire dal Python 2.6, la funzionalità di tartaruga è stata notevolmente migliorata. urllib (urllib. urllib2. urlparse. robotparse). XMLRPC (xmlrpclib. DocXMLRPCServer. SimpleXMLRPCServer). Alcuni altri cambiamenti ai moduli della libreria standard, non coperti da PEP 3108: Killed set. Utilizzare la funzione incorporato set (). Pulizia del modulo sys: sys. exitfunc rimosso (). sys. excclear (). sys. exctype. sys. excvalue. sys. exctraceback. (Si noti che sys. lasttype ecc rimangono.) Pulizia del tipo array. array: read () e write () metodi sono scomparsi uso fromfile () e tofile () invece. Inoltre, il C typecode per array è andato 8211 l'uso o b per byte o u per i caratteri Unicode. Cleanup del modulo dell'operatore: rimosso sequenceIncludes () e isCallable (). Pulizia del modulo di filo: acquirelock () e releaselock () se ne sono andati uso acquire () e release () invece. Pulizia del modulo random: rimosso il jumpahead) API (. Il nuovo modulo è andato. Le funzioni os. tmpnam (). os. tempnam () e os. tmpfile () sono stati rimossi a favore del modulo tempfile. Il modulo tokenize è stato modificato per funzionare con i byte. Il punto di ingresso principale è ora tokenize. tokenize (). invece di generatetokens. string. letters ei suoi amici (string. lowercase e string. uppercase) se ne sono andati. Utilizzare string. asciiletters ecc invece. (La ragione per la rimozione è che string. letters e amici avevano comportamento specifico-locale, che è una cattiva idea per tale 8220constants8221 globale attraente nome in.) Modulo Rinominato incorporato per builtins (rimuovendo le sottolineature, l'aggiunta di un 8216s8217). La variabile builtins trovata nella maggior parte dei namespace globali è invariato. Per modificare un incorporato, è necessario utilizzare i comandi incorporati. Non builtins PEP 3101. Un nuovo approccio alla stringa di formattazione Un nuovo sistema per le operazioni di formattazione delle stringhe built-in sostituisce l'operatore formattazione delle stringhe. (Tuttavia, l'operatore è ancora supportato sarà deprecato in Python 3.1 e rimosso dalla lingua in un secondo momento.) Leggi PEP 3101 per il pieno scoop. Modifiche alle eccezioni Le API per la raccolta e la cattura di eccezione sono stati ripuliti e nuove potenti funzionalità aggiunte: PEP 0352. Tutte le eccezioni devono essere derivati (direttamente o indirettamente) da BaseException. Questa è la radice della gerarchia eccezione. Questa non è una novità come una raccomandazione, ma l'obbligo di ereditare da BaseException è nuovo. (Python 2.6 ancora consentito classi classiche da sollevare, e posto alcuna restrizione su ciò che si può prendere.) Di conseguenza, le eccezioni delle stringhe sono finalmente veramente e assolutamente morto. Quasi tutte le eccezioni dovrebbero effettivamente derivare da Exception BaseException deve essere utilizzato solo come classe base per le eccezioni che devono essere gestiti solo a livello superiore, come ad esempio SystemExit o KeyboardInterrupt. L'idioma consigliato per la gestione di tutte le eccezioni tranne che per quest'ultima categoria è quello di utilizzare, tranne eccezioni. StandardError è stato rimosso (in 2.6 già). Eccezioni comportano più come sequenze. Utilizzare i args attribuiscono invece. PEP 3109. Raising eccezioni. È ora necessario usare raise eccezione (args) invece di sollevare eccezioni. args. Inoltre, è possibile specificare più esplicitamente la traccia, invece, se si ha a che fare questo, è possibile assegnare direttamente all'attributo traceback (vedere sotto). PEP 3110. Facendo eccezioni. È ora necessario usare tranne SomeException come variabile anziché tranne SomeException. variabile. Inoltre, la variabile è esplicitamente eliminato quando l'eccezione del blocco è a sinistra. PEP 3134. Eccezione concatenamento. Ci sono due casi: il concatenamento implicito ed esplicito concatenamento. concatenamento implicito accade quando viene sollevata un'eccezione in una eccezione o infine blocco del gestore. Questo accade di solito a causa di un bug nel blocco del gestore chiamiamo questo un'eccezione secondaria. In questo caso, l'eccezione originale (che era stato trattato) viene salvato come attributo contesto l'eccezione secondaria. concatenamento esplicita viene richiamato con la seguente sintassi: (dove primaryexception è un'espressione che produce un oggetto eccezione, probabilmente un'eccezione che è stato precedentemente catturato). In questo caso, l'eccezione principale è memorizzato sull'attributo causa l'eccezione secondaria. Il traceback stampata quando si verifica un'eccezione non gestita cammina la catena di causa ed attributi contesto e stampa un traceback separato per ogni componente della catena, con l'eccezione primaria in alto. (Utenti Java possono riconoscere questo comportamento.) PEP 3134. oggetti eccezione ora memorizzano la loro traceback come attributo traceback. Ciò significa che un oggetto eccezione contiene ora tutte le informazioni relative a una eccezione, e ci sono meno ragioni per usare sys. excinfo () (anche se quest'ultimo non viene rimosso). Alcuni messaggi di eccezione sono migliorate quando Windows non riesce a caricare un modulo di estensione. Ad esempio, il codice di errore 193 è ora 1 non è un'applicazione di Win32 valida. Le stringhe ora occupano locali non in lingua inglese. Varie altre modifiche operatori e metodi speciali ora restituisce l'opposto. a meno che non restituisce NotImplemented. Il concetto di 8220unbound methods8221 è stato rimosso dalla lingua. Quando si fa riferimento a un metodo come un attributo di classe, è ora ottenere un oggetto funzione pianura. getslice (). setslice () e delslice () sono stati uccisi. La sintassi ai: (. O setitem () o delItem () quando viene utilizzato come una cessione o la cancellazione di destinazione, rispettivamente) j ora si traduce in a. getitem (slice (i, j)). PEP 3114. il metodo standard next () è stato rinominato successivo (). Le ottobre () e hex () metodi speciali vengono rimossi 8211 ottobre () e hex () utilizzano index () ora per convertire l'argomento in un intero. supporto Rimosso per i soci e metodi. Gli attributi funzionali denominati funcX sono stati rinominati per utilizzare il modulo X, liberando questi nomi l'attributo funzione di spazio dei nomi per gli attributi definiti dall'utente. Vale a dire, funcclosure. funccode. funcdefaults. funcdict. funcdoc. funcglobals. funcname sono stati rinominati a chiusura. codice . predefiniti. dict. doc. Globali. nome . rispettivamente. diverso da zero () è ora bool (). PEP 3135. Nuovo super (). È ora possibile richiamare super () senza argomenti e (supponendo che questo è in un normale metodo di istanza definito all'interno di una dichiarazione di classe) verranno automaticamente scelti classe giusta e l'istanza. Con argomenti, il comportamento di super () è invariato. PEP 3111. rawinput () è stato rinominato in ingresso (). Cioè, la nuova funzione di ingresso () legge una linea da sys. stdin e lo restituisce con il ritorno a capo finale spogliato. Solleva EOFError se l'ingresso è terminato prematuramente. Per ottenere il vecchio comportamento di ingresso (). utilizzare eval (ingresso ()). Un nuovo prossimo incorporato () è stato aggiunto per chiamare il metodo next () su un oggetto. intern Spostato () per sys. intern (). Rimosso: applicare (). Invece di applicare (f, args) Usa F (args). Rimosso callable (). Invece di callable (f) è possibile utilizzare hasattr (F, chiamata). La funzione operator. isCallable () è anche andato. coerce Rimosso (). Questa funzione non è più uno scopo ora che le classi classiche se ne sono andati. execfile Rimosso (). Invece di execfile (fn) uso exec (aperta (fn).read ()). file rimosso. Utilizzare open (). Rimosso ridurre (). Utilizzare functools. reduce () se si ha realmente bisogno tuttavia, il 99 per cento del tempo di una esplicita per ciclo è più leggibile. reload Rimosso (). Utilizzare imp. reload (). Rimosso. dict. haskey () 8211 utilizza l'operatore in invece. Costruire e cambiamenti API C per mancanza di tempo, ecco una lista molto incompleta delle modifiche alle API C. Il supporto per diverse piattaforme è stata abbandonata, compreso ma non limitato a Mac OS 9, BeOS, RISCOS, Irix, e Tru64. PEP 3118. Nuova API Buffer. PEP 3121. Estensione modulo di inizializzazione amp finalizzazione. PEP 3123. Fare PyObjectHEAD conforme a C. Non più il supporto API C standard per esecuzione limitata. PyNumberCoerce. PyNumberCoerceEx. PyMemberGet. e le API PyMemberSet C sono rimossi. Nuovo PyImportImportModuleNoBlock C API. funziona come PyImportImportModule ma won8217t bloccare il blocco di importazione (restituendo un errore, invece). Ribattezzato lo slot di livello C di conversione booleano e il metodo: nbnonzero è ora nbbool. Rimosso METHOLDARGS e WITHCYCLEGC dalla API C. Prestazioni Il risultato netto dei 3,0 generalizzazioni è che Python 3.0 viene eseguito il benchmark pystone circa 10 più lento di Python 2.5. Molto probabilmente la causa principale è la rimozione di speciale tubiero per piccoli interi. There8217s margini di miglioramento, ma accadrà dopo 3.0 viene rilasciato il porting di Python 3.0 per il porting di Python 2.5 o 2.6 del codice sorgente esistente a Python 3.0, la strategia migliore è la seguente: (Prerequisito :) Start con copertura di prova eccellente. Porta a Python 2.6. Questo dovrebbe essere non più lavoro che la porta media da Python 2.x di Python 2. (x1). Assicurarsi che tutti i test passano. (Sempre con 2.6 :) Accendere la riga di comando -3. In questo modo gli avvertimenti circa le caratteristiche che verranno rimossi (o modificare) a 3.0. Eseguire il test suite di nuovo, e correggere il codice che si ottiene avvertimenti circa fino a quando non ci sono avvisi di sinistra, e tutti i test ancora passare. Eseguire il 2to3 source-to-source traduttore sopra il vostro albero del codice sorgente. (Vedere 2to3 -. Automatizzato Python 2-3 di traduzione codice per ulteriori informazioni su questo strumento) Eseguire il risultato della traduzione in Python 3.0. correggere manualmente eventuali questioni in sospeso, risolvere i problemi fino a quando tutti i test passano di nuovo. Non è consigliabile provare a scrivere il codice sorgente che scorre sotto invariato sia Python 2.6 e 3.0 you8217d necessario utilizzare uno stile di codifica molto contorto, ad esempio evitando dichiarazioni stampa, metaclassi, e molto altro ancora. Se si gestiscono una libreria che ha bisogno di supportare sia Python 2.6 e Python 3.0, l'approccio migliore è quello di modificare il punto 3 sopra modificando la versione 2.6 del codice sorgente e correre il traduttore 2to3, piuttosto che la modifica della versione 3.0 del codice sorgente. Per porting estensioni C per Python 3.0, si prega di consultare i moduli di estensione porting su 3,0 .16.2. io 8212 strumenti fondamentali per lavorare con i flussi 16.2.1. Panoramica Il modulo IO fornisce Python8217s strutture principali per affrontare i vari tipi di IO. Ci sono tre tipi principali di IO: testo IO. binario IO e crudo IO. Questi sono categorie generiche, e varie archiviazione secondaria può essere utilizzato per ciascuno di essi. Un oggetto concreto appartenente a nessuna di queste categorie si chiama un oggetto file. Altri termini comuni sono ruscello e oggetto simile a file. Indipendentemente dalla sua categoria, ogni oggetto flusso di calcestruzzo avrà anche diverse funzionalità: può essere di sola lettura, sola scrittura, o lettura-scrittura. Si può anche permettere l'accesso arbitrario casuale (cercare in avanti o indietro in qualsiasi posizione), o solo un accesso sequenziale (ad esempio nel caso di uno zoccolo o tubo). Tutti i flussi sono attenti circa il tipo di dati che si dà a loro. Per esempio dando un oggetto str al metodo write () di un flusso binario alzerà un TypeError. Così sarà dando un oggetto byte al metodo write () di un flusso di testo. Modificato nella versione 3.3: Le operazioni che hanno usato per aumentare IOError ora sollevano OSError. poiché IOError è ormai un alias di OSError. 16.2.1.1. Testo IO IO testo si aspetta e produce oggetti str. This means that whenever the backing store is natively made of bytes (such as in the case of a file), encoding and decoding of data is made transparently as well as optional translation of platform-specific newline characters. The easiest way to create a text stream is with open(). optionally specifying an encoding: In-memory text streams are also available as StringIO objects: The text stream API is described in detail in the documentation of TextIOBase . 16.2.1.2. Binary IO Binary IO (also called buffered IO ) expects bytes-like objects and produces bytes objects. No encoding, decoding, or newline translation is performed. This category of streams can be used for all kinds of non-text data, and also when manual control over the handling of text data is desired. The easiest way to create a binary stream is with open() with b in the mode string: In-memory binary streams are also available as BytesIO objects: The binary stream API is described in detail in the docs of BufferedIOBase . Other library modules may provide additional ways to create text or binary streams. See socket. socket. makefile() for example. 16.2.1.3. Raw IO Raw IO (also called unbuffered IO ) is generally used as a low-level building-block for binary and text streams it is rarely useful to directly manipulate a raw stream from user code. Nevertheless, you can create a raw stream by opening a file in binary mode with buffering disabled: The raw stream API is described in detail in the docs of RawIOBase . 16.2.2. High-level Module Interface An int containing the default buffer size used by the module8217s buffered IO classes. open() uses the file8217s blksize (as obtained by os. stat() ) if possible. This is an alias for the builtin open() function. exception io. BlockingIOError This is a compatibility alias for the builtin BlockingIOError exception. exception io. UnsupportedOperation An exception inheriting OSError and ValueError that is raised when an unsupported operation is called on a stream. 16.2.2.1. In-memory streams It is also possible to use a str or bytes-like object as a file for both reading and writing. For strings StringIO can be used like a file opened in text mode. BytesIO can be used like a file opened in binary mode. Both provide full read-write capabilities with random access. 16.2.3. Class hierarchy The implementation of IO streams is organized as a hierarchy of classes. First abstract base classes (ABCs), which are used to specify the various categories of streams, then concrete classes providing the standard stream implementations. The abstract base classes also provide default implementations of some methods in order to help implementation of concrete stream classes. For example, BufferedIOBase provides unoptimized implementations of readinto() and readline() . At the top of the IO hierarchy is the abstract base class IOBase. It defines the basic interface to a stream. Note, however, that there is no separation between reading and writing to streams implementations are allowed to raise UnsupportedOperation if they do not support a given operation. The RawIOBase ABC extends IOBase. It deals with the reading and writing of bytes to a stream. FileIO subclasses RawIOBase to provide an interface to files in the machine8217s file system. The BufferedIOBase ABC deals with buffering on a raw byte stream ( RawIOBase ). Its subclasses, BufferedWriter. BufferedReader. and BufferedRWPair buffer streams that are readable, writable, and both readable and writable. BufferedRandom provides a buffered interface to random access streams. Another BufferedIOBase subclass, BytesIO. is a stream of in-memory bytes. The TextIOBase ABC, another subclass of IOBase. deals with streams whose bytes represent text, and handles encoding and decoding to and from strings. TextIOWrapper. which extends it, is a buffered text interface to a buffered raw stream ( BufferedIOBase ). Finally, StringIO is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open() are intended to be used as keyword arguments. The following table summarizes the ABCs provided by the io module: 16.2.3.1. IO Base Classes The abstract base class for all IO classes, acting on streams of bytes. There is no public constructor. This class provides empty abstract implementations for many methods that derived classes can override selectively the default implementations represent a file that cannot be read, written or seeked. Even though IOBase does not declare read(). readinto(). or write() because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations may raise a ValueError (or UnsupportedOperation ) when operations they do not support are called. The basic type used for binary data read from or written to a file is bytes. Other bytes-like objects are accepted as method arguments too. In some cases, such as readinto(). a writable object such as bytearray is required. Text IO classes work with str data. Note that calling any method (even inquiries) on a closed stream is undefined. Implementations may raise ValueError in this case. IOBase (and its subclasses) supports the iterator protocol, meaning that an IOBase object can be iterated over yielding the lines in a stream. Lines are defined slightly differently depending on whether the stream is a binary stream (yielding bytes), or a text stream (yielding character strings). See readline() below. IOBase is also a context manager and therefore supports the with statement. In this example, file is closed after the with statement8217s suite is finished8212even if an exception occurs: IOBase provides these data attributes and methods: Flush and close this stream. This method has no effect if the file is already closed. Once the file is closed, any operation on the file (e. g. reading or writing) will raise a ValueError . As a convenience, it is allowed to call this method more than once only the first call, however, will have an effect. True if the stream is closed. Return the underlying file descriptor (an integer) of the stream if it exists. An OSError is raised if the IO object does not use a file descriptor. Flush the write buffers of the stream if applicable. This does nothing for read-only and non-blocking streams. Return True if the stream is interactive (i. e. connected to a terminaltty device). Return True if the stream can be read from. If False. read() will raise OSError . Read and return one line from the stream. If size is specified, at most size bytes will be read. The line terminator is always bn for binary files for text files, the newline argument to open() can be used to select the line terminator(s) recognized. Read and return a list of lines from the stream. hint can be specified to control the number of lines read: no more lines will be read if the total size (in bytescharacters) of all lines so far exceeds hint . Note that it8217s already possible to iterate on file objects using for line in file. without calling file. readlines() . Change the stream position to the given byte offset . offset is interpreted relative to the position indicated by whence . The default value for whence is SEEKSET. Values for whence are: SEEKSET or 0 8211 start of the stream (the default) offset should be zero or positive SEEKCUR or 1 8211 current stream position offset may be negative SEEKEND or 2 8211 end of the stream offset is usually negative Return the new absolute position. New in version 3.1: The SEEK constants. New in version 3.3: Some operating systems could support additional values, like os. SEEKHOLE or os. SEEKDATA. The valid values for a file could depend on it being open in text or binary mode. Return True if the stream supports random access. If False. seek(). tell() and truncate() will raise OSError . Return the current stream position. Resize the stream to the given size in bytes (or the current position if size is not specified). The current stream position isn8217t changed. This resizing can extend or reduce the current file size. In case of extension, the contents of the new file area depend on the platform (on most systems, additional bytes are zero-filled). The new file size is returned. Changed in version 3.5: Windows will now zero-fill files when extending. Return True if the stream supports writing. If False. write() and truncate() will raise OSError . Write a list of lines to the stream. Line separators are not added, so it is usual for each of the lines provided to have a line separator at the end. Prepare for object destruction. IOBase provides a default implementation of this method that calls the instance8217s close() method. Base class for raw binary IO. It inherits IOBase. There is no public constructor. Raw binary IO typically provides low-level access to an underlying OS device or API, and does not try to encapsulate it in high-level primitives (this is left to Buffered IO and Text IO, described later in this page). In addition to the attributes and methods from IOBase. RawIOBase provides the following methods: Read up to size bytes from the object and return them. As a convenience, if size is unspecified or -1, readall() is called. Otherwise, only one system call is ever made. Fewer than size bytes may be returned if the operating system call returns fewer than size bytes. If 0 bytes are returned, and size was not 0, this indicates end of file. If the object is in non-blocking mode and no bytes are available, None is returned. Read and return all the bytes from the stream until EOF, using multiple calls to the stream if necessary. Read bytes into a pre-allocated, writable bytes-like object b . and return the number of bytes read. If the object is in non-blocking mode and no bytes are available, None is returned. Write the given bytes-like object. b. to the underlying raw stream, and return the number of bytes written. This can be less than the length of b in bytes, depending on specifics of the underlying raw stream, and especially if it is in non-blocking mode. None is returned if the raw stream is set not to block and no single byte could be readily written to it. The caller may release or mutate b after this method returns, so the implementation should only access b during the method call. class io. BufferedIOBase Base class for binary streams that support some kind of buffering. It inherits IOBase. There is no public constructor. The main difference with RawIOBase is that methods read(). readinto() and write() will try (respectively) to read as much input as requested or to consume all given output, at the expense of making perhaps more than one system call. In addition, those methods can raise BlockingIOError if the underlying raw stream is in non-blocking mode and cannot take or give enough data unlike their RawIOBase counterparts, they will never return None . Besides, the read() method does not have a default implementation that defers to readinto() . A typical BufferedIOBase implementation should not inherit from a RawIOBase implementation, but wrap one, like BufferedWriter and BufferedReader do. BufferedIOBase provides or overrides these methods and attribute in addition to those from IOBase : The underlying raw stream (a RawIOBase instance) that BufferedIOBase deals with. This is not part of the BufferedIOBase API and may not exist on some implementations. Separate the underlying raw stream from the buffer and return it. After the raw stream has been detached, the buffer is in an unusable state. Some buffers, like BytesIO. do not have the concept of a single raw stream to return from this method. They raise UnsupportedOperation . New in version 3.1. Read and return up to size bytes. If the argument is omitted, None. or negative, data is read and returned until EOF is reached. An empty bytes object is returned if the stream is already at EOF. If the argument is positive, and the underlying raw stream is not interactive, multiple raw reads may be issued to satisfy the byte count (unless EOF is reached first). But for interactive raw streams, at most one raw read will be issued, and a short result does not imply that EOF is imminent. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. Read and return up to size bytes, with at most one call to the underlying raw stream8217s read() (or readinto() ) method. This can be useful if you are implementing your own buffering on top of a BufferedIOBase object. Read bytes into a pre-allocated, writable bytes-like object b and return the number of bytes read. Like read(). multiple reads may be issued to the underlying raw stream, unless the latter is interactive. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. Read bytes into a pre-allocated, writable bytes-like object b . using at most one call to the underlying raw stream8217s read() (or readinto() ) method. Return the number of bytes read. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. New in version 3.5. Write the given bytes-like object. b. and return the number of bytes written (always equal to the length of b in bytes, since if the write fails an OSError will be raised). Depending on the actual implementation, these bytes may be readily written to the underlying stream, or held in a buffer for performance and latency reasons. When in non-blocking mode, a BlockingIOError is raised if the data needed to be written to the raw stream but it couldn8217t accept all the data without blocking. The caller may release or mutate b after this method returns, so the implementation should only access b during the method call. 16.2.3.2. Raw File IO FileIO represents an OS-level file containing bytes data. It implements the RawIOBase interface (and therefore the IOBase interface, too). The name can be one of two things: a character string or bytes object representing the path to the file which will be opened. In this case closefd must be True (the default) otherwise an error will be raised. an integer representing the number of an existing OS-level file descriptor to which the resulting FileIO object will give access. When the FileIO object is closed this fd will be closed as well, unless closefd is set to False . The mode can be r. w. x or a for reading (default), writing, exclusive creation or appending. The file will be created if it doesn8217t exist when opened for writing or appending it will be truncated when opened for writing. FileExistsError will be raised if it already exists when opened for creating. Opening a file for creating implies writing, so this mode behaves in a similar way to w. Add a to the mode to allow simultaneous reading and writing. The read() (when called with a positive argument), readinto() and write() methods on this class will only make one system call. A custom opener can be used by passing a callable as opener . The underlying file descriptor for the file object is then obtained by calling opener with ( name . flags ). opener must return an open file descriptor (passing os. open as opener results in functionality similar to passing None ). See the open() built-in function for examples on using the opener parameter. Changed in version 3.3: The opener parameter was added. The x mode was added. Changed in version 3.4: The file is now non-inheritable. In addition to the attributes and methods from IOBase and RawIOBase. FileIO provides the following data attributes: The mode as given in the constructor. The file name. This is the file descriptor of the file when no name is given in the constructor. 16.2.3.3. Buffered Streams Buffered IO streams provide a higher-level interface to an IO device than raw IO does. A stream implementation using an in-memory bytes buffer. It inherits BufferedIOBase. The buffer is discarded when the close() method is called. The optional argument initialbytes is a bytes-like object that contains initial data. BytesIO provides or overrides these methods in addition to those from BufferedIOBase and IOBase : Return a readable and writable view over the contents of the buffer without copying them. Also, mutating the view will transparently update the contents of the buffer: As long as the view exists, the BytesIO object cannot be resized or closed. New in version 3.2. Return bytes containing the entire contents of the buffer. In BytesIO. this is the same as read() . In BytesIO. this is the same as readinto() . New in version 3.5. class io. BufferedReader ( raw . buffersizeDEFAULTBUFFERSIZE ) A buffer providing higher-level access to a readable, sequential RawIOBase object. It inherits BufferedIOBase. When reading data from this object, a larger amount of data may be requested from the underlying raw stream, and kept in an internal buffer. The buffered data can then be returned directly on subsequent reads. The constructor creates a BufferedReader for the given readable raw stream and buffersize . If buffersize is omitted, DEFAULTBUFFERSIZE is used. BufferedReader provides or overrides these methods in addition to those from BufferedIOBase and IOBase : Return bytes from the stream without advancing the position. At most one single read on the raw stream is done to satisfy the call. The number of bytes returned may be less or more than requested. Read and return size bytes, or if size is not given or negative, until EOF or if the read call would block in non-blocking mode. Read and return up to size bytes with only one call on the raw stream. If at least one byte is buffered, only buffered bytes are returned. Otherwise, one raw stream read call is made. class io. BufferedWriter ( raw . buffersizeDEFAULTBUFFERSIZE ) A buffer providing higher-level access to a writeable, sequential RawIOBase object. It inherits BufferedIOBase. When writing to this object, data is normally placed into an internal buffer. The buffer will be written out to the underlying RawIOBase object under various conditions, including: when the buffer gets too small for all pending data when flush() is called when a seek() is requested (for BufferedRandom objects) when the BufferedWriter object is closed or destroyed. The constructor creates a BufferedWriter for the given writeable raw stream. If the buffersize is not given, it defaults to DEFAULTBUFFERSIZE . BufferedWriter provides or overrides these methods in addition to those from BufferedIOBase and IOBase : Force bytes held in the buffer into the raw stream. A BlockingIOError should be raised if the raw stream blocks. Write the bytes-like object. b. and return the number of bytes written. When in non-blocking mode, a BlockingIOError is raised if the buffer needs to be written out but the raw stream blocks. class io. BufferedRandom ( raw . buffersizeDEFAULTBUFFERSIZE ) A buffered interface to random access streams. It inherits BufferedReader and BufferedWriter. and further supports seek() and tell() functionality. The constructor creates a reader and writer for a seekable raw stream, given in the first argument. If the buffersize is omitted it defaults to DEFAULTBUFFERSIZE . class io. BufferedRWPair ( reader . writer . buffersizeDEFAULTBUFFERSIZE ) A buffered IO object combining two unidirectional RawIOBase objects 8211 one readable, the other writeable 8211 into a single bidirectional endpoint. It inherits BufferedIOBase . reader and writer are RawIOBase objects that are readable and writeable respectively. If the buffersize is omitted it defaults to DEFAULTBUFFERSIZE . BufferedRWPair does not attempt to synchronize accesses to its underlying raw streams. You should not pass it the same object as reader and writer use BufferedRandom instead. 16.2.3.4. Text IO Base class for text streams. This class provides a character and line based interface to stream IO. There is no readinto() method because Python8217s character strings are immutable. It inherits IOBase. There is no public constructor. TextIOBase provides or overrides these data attributes and methods in addition to those from IOBase : The name of the encoding used to decode the stream8217s bytes into strings, and to encode strings into bytes. The error setting of the decoder or encoder. A string, a tuple of strings, or None. indicating the newlines translated so far. Depending on the implementation and the initial constructor flags, this may not be available. The underlying binary buffer (a BufferedIOBase instance) that TextIOBase deals with. This is not part of the TextIOBase API and may not exist in some implementations. Separate the underlying binary buffer from the TextIOBase and return it. After the underlying buffer has been detached, the TextIOBase is in an unusable state. Some TextIOBase implementations, like StringIO. may not have the concept of an underlying buffer and calling this method will raise UnsupportedOperation . New in version 3.1. Read and return at most size characters from the stream as a single str. If size is negative or None. reads until EOF. Read until newline or EOF and return a single str. If the stream is already at EOF, an empty string is returned. If size is specified, at most size characters will be read. Change the stream position to the given offset . Behaviour depends on the whence parameter. The default value for whence is SEEKSET . SEEKSET or 0. seek from the start of the stream (the default) offset must either be a number returned by TextIOBase. tell(). or zero. Any other offset value produces undefined behaviour. SEEKCUR or 1. 8220seek8221 to the current position offset must be zero, which is a no-operation (all other values are unsupported). SEEKEND or 2. seek to the end of the stream offset must be zero (all other values are unsupported). Return the new absolute position as an opaque number. New in version 3.1: The SEEK constants. Return the current stream position as an opaque number. The number does not usually represent a number of bytes in the underlying binary storage. Write the string s to the stream and return the number of characters written. class io. TextIOWrapper ( buffer . encodingNone . errorsNone . newlineNone . linebufferingFalse . writethroughFalse ) A buffered text stream over a BufferedIOBase binary stream. It inherits TextIOBase . encoding gives the name of the encoding that the stream will be decoded or encoded with. It defaults to locale. getpreferredencoding(False) . errors is an optional string that specifies how encoding and decoding errors are to be handled. Pass strict to raise a ValueError exception if there is an encoding error (the default of None has the same effect), or pass ignore to ignore errors. (Note that ignoring encoding errors can lead to data loss.) replace causes a replacement marker (such as ) to be inserted where there is malformed data. backslashreplace causes malformed data to be replaced by a backslashed escape sequence. When writing, xmlcharrefreplace (replace with the appropriate XML character reference) or namereplace (replace with N escape sequences) can be used. Any other error handling name that has been registered with codecs. registererror() is also valid. newline controls how line endings are handled. It can be None. . n. r. and rn. It works as follows: When reading input from the stream, if newline is None. universal newlines mode is enabled. Lines in the input can end in n. r. or rn. and these are translated into n before being returned to the caller. If it is . universal newlines mode is enabled, but line endings are returned to the caller untranslated. If it has any of the other legal values, input lines are only terminated by the given string, and the line ending is returned to the caller untranslated. When writing output to the stream, if newline is None. any n characters written are translated to the system default line separator, os. linesep. If newline is or n. no translation takes place. If newline is any of the other legal values, any n characters written are translated to the given string. If linebuffering is True. flush() is implied when a call to write contains a newline character. If writethrough is True. calls to write() are guaranteed not to be buffered: any data written on the TextIOWrapper object is immediately handled to its underlying binary buffer . Changed in version 3.3: The writethrough argument has been added. Changed in version 3.3: The default encoding is now locale. getpreferredencoding(False) instead of locale. getpreferredencoding(). Don8217t change temporary the locale encoding using locale. setlocale(). use the current locale encoding instead of the user preferred encoding. TextIOWrapper provides one attribute in addition to those of TextIOBase and its parents: Whether line buffering is enabled. An in-memory stream for text IO. The text buffer is discarded when the close() method is called. The initial value of the buffer can be set by providing initialvalue . If newline translation is enabled, newlines will be encoded as if by write(). The stream is positioned at the start of the buffer. The newline argument works like that of TextIOWrapper. The default is to consider only n characters as ends of lines and to do no newline translation. If newline is set to None. newlines are written as n on all platforms, but universal newline decoding is still performed when reading. StringIO provides this method in addition to those from TextIOBase and its parents: Return a str containing the entire contents of the buffer. Newlines are decoded as if by read(). although the stream position is not changed. class io. IncrementalNewlineDecoder 16.2.4. Performance This section discusses the performance of the provided concrete IO implementations. 16.2.4.1. Binary IO By reading and writing only large chunks of data even when the user asks for a single byte, buffered IO hides any inefficiency in calling and executing the operating system8217s unbuffered IO routines. The gain depends on the OS and the kind of IO which is performed. For example, on some modern OSes such as Linux, unbuffered disk IO can be as fast as buffered IO. The bottom line, however, is that buffered IO offers predictable performance regardless of the platform and the backing device. Therefore, it is almost always preferable to use buffered IO rather than unbuffered IO for binary data. 16.2.4.2. Text IO Text IO over a binary storage (such as a file) is significantly slower than binary IO over the same storage, because it requires conversions between unicode and binary data using a character codec. This can become noticeable handling huge amounts of text data like large log files. Also, TextIOWrapper. tell() and TextIOWrapper. seek() are both quite slow due to the reconstruction algorithm used. StringIO. however, is a native in-memory unicode container and will exhibit similar speed to BytesIO . 16.2.4.3. Multi-threading FileIO objects are thread-safe to the extent that the operating system calls (such as read(2) under Unix) they wrap are thread-safe too. Binary buffered objects (instances of BufferedReader. BufferedWriter. BufferedRandom and BufferedRWPair ) protect their internal structures using a lock it is therefore safe to call them from multiple threads at once. TextIOWrapper objects are not thread-safe. 16.2.4.4. Reentrancy Binary buffered objects (instances of BufferedReader. BufferedWriter. BufferedRandom and BufferedRWPair ) are not reentrant. While reentrant calls will not happen in normal situations, they can arise from doing IO in a signal handler. If a thread tries to re-enter a buffered object which it is already accessing, a RuntimeError is raised. Note this doesn8217t prohibit a different thread from entering the buffered object. The above implicitly extends to text files, since the open() function will wrap a buffered object inside a TextIOWrapper. This includes standard streams and therefore affects the built-in function print() as well.
No comments:
Post a Comment