Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Jake VanderPlas
Beijing
Pequim Boston Farnham
Boston Sebastopol
Farnham Sebastopol Tquio
Um rpido tour de Python
por Jake VanderPlas
Copyright 2016 O'Reilly Media Inc. Todos os direitos reservados. Impresso nos
Publicado pela O'Reilly Media, Inc., 1005 Gravenstein estrada do Norte, Sebastopol, CA
95472.
livros da O'Reilly podem ser adquiridos para fins pedaggicos, negcios ou uso promocional de vendas. edies on-line tambm
800-998-9938 ou corporate@oreilly.com.
O logotipo O'Reilly uma marca registrada da O'Reilly Media, Inc. Um rpido tour de Python, a imagem da capa, e
vestido de comrcio relacionado so marcas registradas da O'Reilly Media, Inc.
Enquanto a editora eo autor usaram esforos de boa f para assegurar que as informaes e instrues
contidas neste trabalho so precisos, a editora eo autor assumem toda a responsabilidade por erros ou
omisses, incluindo, sem responsabilidade tao limi- por danos resultantes da utilizao ou confiana neste
trabalho. Uso das informaes e instrues contidas neste trabalho a seu prprio risco. Se todas as
amostras de cdigo ou outra tecnologia Este trabalho contm ou descreve est sujeito a abrir licenas de
cdigo ou os direitos de propriedade intelectual de outros, a sua responsabili- dade para garantir que o uso
dos mesmos em conformidade com tais licenas e / ou direitos.
978-1-491-96465-1 [LSI]
ndice
v
Um rpido tour de Python
Introduo
Concebido no final de 1980 como um ensinamento e linguagem de script, Python desde ento se
tornou uma ferramenta essencial para muitos programadores, engenheiros, pesquisadores e
cientistas de dados em toda a academia ea indstria. Como um astrnomo focados em construir e
promover as ferramentas livres e abertas para a cincia de dados intensivos, eu encontrei Python
para ser um ajuste quase perfeito para os tipos de problemas que enfrentam dia a dia, quer se trate
de extrair significado de grandes conjuntos de dados astronmicos, raspagem e munging fontes de
dados a partir da web, ou automatizando tarefas de investigao do dia-a-dia.
SciPy contm uma grande variedade de ferramentas numricas tais como integrao
numrica e interpolao.
pandas fornece uma trama de dados de objecto, juntamente com um conjunto poderoso de processos
1
IPython / Jupyter fornece um terminal reforada e um ambiente notebook
interativo que til para sis an- exploratria, bem como criao de
documentos interativos, executveis. Por exemplo, o manuscrito para este
relatrio foi composto inteiramente em notebooks Jupyter.
Para explorar o poder deste ecossistema cincia de dados, no entanto, a primeira requer
familiaridade com a prpria linguagem Python. Muitas vezes eu encontro estudantes e
colegas que tm (s vezes extensa) experincia em computao em alguma linguagem
de MATLAB, IDL, R, Java, C ++, etc. e esto procura de uma breve mas abrangente
excurso da linguagem Python, que respeite o seu nvel de conhecimento ao invs de
comear do zero. Este relatrio procura preencher esse nicho. Como tal, este relatrio de
modo algum pretende ser uma introduo abrangente para a programao, ou uma
introduo completa prpria linguagem Python; se isso que voc est procurando,
voc pode verificar uma das referncias recomendadas listadas na recursos para mais ing
aprendi- na pgina 90 . Em vez disso, isso vai proporcionar um rpido tour de alguns de
sintaxe e semntica essencial do Python, built-in tipos de dados e estruturas, definies
de funo, declaraes de controle de fluxo, e outros aspectos da linguagem. Meu
objetivo que os leitores vo ficar com uma base slida para explorar a pilha cincia
dados apenas esboada.
Este livro est aqui para ajud-lo a fazer o seu trabalho. Em geral, se exem- plo cdigo
oferecido com este livro, voc pode us-lo em seus programas e documentao. Voc
no precisa entrar em contato conosco para permisso, a menos que voc est
reproduzindo uma parte significativa do cdigo. Por exemplo, escrever um programa que
usa vrios pedaos de cdigo deste livro no requer permisso. Vender ou distribuir um
CD-ROM de exemplos dos livros da O'Reilly requer permisso.
Se voc sentir que seu uso de exemplos de cdigo est fora de uso justo ou a misso per-
dado acima, sentir livre para contactar-nos em que autorize
sions@oreilly.com .
Este relatrio usa a sintaxe do Python 3, que contm aprimoramentos de linguagem que no
so compatveis com o 2. X srie de Python. Embora Python 3.0 foi lanado pela primeira vez
em 2008, a adoo foi rel- tivamente lenta, particularmente nas nidades desenvolvimento
com- cientficas e web. Isso ocorre principalmente porque levou algum tempo para muitos dos
pacotes essenciais e kits de ferramentas para ser compatvel com os novos internos de
linguagem. Desde o incio de 2014, no entanto, verses estveis das ferramentas mais
importantes no ecossistema cincia de dados ter sido totalmente compatvel com Python 2 e
3, e por isso este relatrio ir utilizar a nova sintaxe Python 3. Mesmo que esse o caso, a
grande maioria dos trechos de cdigo neste relatrio tambm ir funcionar sem cao modi-
em Python 2: nos casos em que uma sintaxe Py2 incompatvel usado, vou fazer todos os
esforos para, note-lo explicitamente.
voltada para pacotes Python, semelhante em esprito apto ou yum ferramentas que os usurios
Qualquer um dos pacotes inclusos em Anaconda tambm pode ser instalado manualmente
em cima de Miniconda; Por esta razo, eu sugiro comear com Miniconda.
Para mais informaes sobre Conda, incluindo informaes sobre ing creat- e usando
Conda ambientes, consulte a documentao do pacote Miniconda ligada pgina
acima.
O Zen de Python
aficionados Python so muitas vezes rpido em apontar como intuitivo, belo ou diverso Python
. Enquanto eu tendo a concordar, eu tambm reconheo que beleza, intuio, e divertido, muitas
vezes andam de mos dadas com dade familiar-, e assim para aqueles familiarizados com outras
linguagens tais mentos sentimentalismo floridas pode vir transversalmente como um pouco
presunoso. No entanto, espero que se voc der Python uma chance, voc vai ver onde essas
impresses podem vir de. E se voc realmente quer cavar o losophy phi- programao que dirige
grande parte da prtica de codificao de usurios de energia Python, um pouco agradvel de ovos
de Pscoa existe no Python intrprete-simplesmente fechar os olhos, meditar por alguns minutos, e
correr importar este:
O interpretador Python
A maneira mais bsica para executar cdigo Python linha por linha dentro do
interpretador Python. O interpretador Python pode ser iniciado por ling insta- a
linguagem Python (veja a seo anterior) e digitando
pton no prompt de comando (procure o terminal no Mac OS sistemas Unix / Linux
X e, ou o aplicativo do prompt de comando no Windows):
$ python
Python 3.5.1 | Continuum Analytics, Inc. | (Padro, 07 de dezembro ... Type "help",
"copyright", "crditos" ou "licena" para mais ...
>>>
>>> 1 + 1 2
>>> X = 5
> > > X * 3 15
O intrprete torna muito conveniente para experimentar pequenos trechos de cdigo Python
e experimentar com sequncias curtas de operaes.
O intrprete IPython
Se voc gastar muito tempo com o interpretador Python bsico, voc ver que ele no tem
muitas das caractersticas de um ambiente de pleno direito desenvolvimento interativo. Um
intrprete alternativa chamada IPython
(Por interactivo Python) fornecido com a distribuio Anaconda, e inclui uma srie de
aperfeioamentos convenientes para o intrprete bsico Python. Ele pode ser iniciado
digitando ipython no prompt de comando:
$ ipython
Python 3.5.1 | Continuum Analytics, Inc. | (Padro, 07 de dezembro ... Tipo "copyright",
"crditos" ou "licena" para mais informaes.
Em 1]:
Dentro [ 1 ]: 1 + 1
Fora [ 1 ]: 2
Dentro [ 2 ]: X = 5
Dentro [ 3 ]: X * 3
Fora [ 3 ]: 15
Correndo Python linha trechos de linha til em alguns casos, mas para programas mais
complicados mais conveniente para salvar o cdigo para o arquivo e execut-lo de uma s
vez. Por conveno, scripts Python so salvos em arquivos com a. py extenso. Por exemplo,
vamos criar um script chamado test.py que contm o seguinte:
# file: test.py
impresso ( " Correndo test.py" )
X=5
impresso ( " Resultado " , 3 * X )
Para executar este arquivo, certifique-se que est no directrio eo tipo de corrente
$ Test.py python
Correndo test.py
Resultado 15
Para programas mais complicados, a criao de scripts independentes como este uma
obrigao.
O notebook Jupyter
Sintaxe refere-se estrutura da lngua (ou seja, o que constitui um programa formado
corretamente). Por enquanto, no incidir sobre a semntica-o significado das palavras
e smbolos dentro da sintaxe, mas vai voltar a este em um momento posterior.
Considere o seguinte exemplo de cdigo:
outro :
superior . acrescentar ( Eu )
Este script um pouco bobo, mas compacta ilustra vrios dos aspectos importantes
da sintaxe Python. Vamos atravess-la e debater algumas das caractersticas
sintticas de Python.
Comentrios em Python so indicados por um sinal de libra (#), e qualquer- coisa na linha
seguinte o sinal de libra ignorado pelo intrprete. Isso significa, por exemplo, que voc
pode ter comentrios autnomos como o que acabamos de mostrar, bem como
comentrios na linha que seguem um comunicado. Por exemplo:
X + = 2 # abreviada para x = x + 2
ponto mdio = 5
Esta uma operao de atribuio, onde criamos uma varivel chamada ponto mdio e
atribuiu-se o valor 5. Note-se que no final desta declarao simplesmente marcado pelo
fim da linha. Isso est em contraste com linguagens como C e C ++, onde cada
declarao deve terminar com um ponto e vrgula (;).
Em Python, se voc gostaria de uma declarao de continuar para a prxima linha, possvel usar o \
Dentro [ 2 ]: X = 1 + 2 + 3 + 4 + \
5+6+7+8
Dentro [ 3 ]: X = ( 1 + 2 + 3 + 4 +
5+6+7+8)
A maioria dos guias de estilo Python recomendar a segunda verso de continuao de linha
(entre parnteses) para o primeiro (uso do \ marcador).
s vezes pode ser til para colocar vrias instrues em uma nica linha. A
prxima parte do script :
Este mostra um exemplo de como o ponto e vrgula (;) familiarizados em C pode ser usado
opcionalmente em Python para colocar duas instrues em uma nica linha. Funcionalmente, isso
mais baixo = []
superior = []
Usando um ponto e vrgula para colocar vrias instrues em uma nica linha ge- erally desencorajado
pela maioria dos guias de estilo Python, embora ocasionalmente isso prova conveniente.
outro :
superior . acrescentar ( Eu )
Esta uma declarao composto de controle de fluxo, incluindo um lao e um olhar condicional:
ns a estes tipos de declaraes em um momento. Por enquanto, considere que isto demonstra o
que devem ser tratados como uma unidade. Em C, por exemplo, blocos de cdigo so deno- ted
por chavetas:
// cdigo C
para ( int Eu = 0 ; Eu < 100 ; Eu ++ ) {
Em Python, blocos de cdigo recuados so sempre precedido por dois pontos (:) na linha
anterior.
O uso de recuo ajuda a reforar o uniforme, estilo legvel que muitos acham atraente em
cdigo Python. Mas isso pode ser confuso para os no iniciados; por exemplo, os dois
fragmentos seguintes vai pro- duzir diferentes resultados:
Dentro [ 4 ]: X = 1 + 2
X=1+2
X = 1 + 2
Abusando esta flexibilidade pode levar a problemas com o cdigo de leitura-na verdade, abusando de
espao em branco muitas vezes um dos principais meios de intencionalmente ofuscando cdigo
(que algumas pessoas fazem para o esporte). Usando espaos em branco de forma eficaz pode levar
a cdigo muito mais legvel, e sobretudo o nos casos em que os operadores se sucedem-compare o
mugido se- duas expresses para exponencializando por um nmero negativo:
X = 10 ** - 2
para
X = 10 ** - 2
Acho que a segunda verso com espaos muito mais facilmente legvel em um nico olhar. A
maioria dos guias de estilo Python recomendamos o uso de um nico espao em torno de
operadores binrios, e nenhum espao em torno de operadores unrios. Vamos discutir mais em
operadores do Python Basic Python Semntica: Variveis e objetos na pgina 13 .
No seguinte trecho de cdigo, vemos dois usos de parnteses. Primeiro, eles podem ser
usados na forma tpica de declaraes de grupo ou operaes matical mathe-:
Dentro [ 5 ]: 2 * ( 3 + 4 )
Fora [5]: 14
Eles tambm podem ser usados para indicar que um funo est sendo chamado. No
prximo trecho, o impresso() funo usada para exibir as tendas con- de uma varivel (veja
o quadro que se segue). A chamada de funo indicado por um par de abertura e de
fecho parnteses, com a
argumentos para a funo contidos:
primeiro valor: 1
Algumas funes pode ser chamado sem argumentos em tudo, caso em que os de abertura e
fechamento parnteses ainda devem ser utilizados para indicar uma avaliao da funo. Um
exemplo disto a ordenar mtodo de listas:
Dentro [ 8 ]: eu = [ 4 , 2 , 3 , 1 ]
eu . ordenar ()
impresso ( eu )
[1, 2, 3, 4]
O depois ordenar indica que a funo deve ser executada, e necessrio mesmo se
h argumentos so necessrias.
# Python 2 apenas!
> > impresso " primeiro valor:" , 1
primeiro valor : 1
Por vrias razes, os mantenedores de linguagem decidiram que em Python 3 impresso() deve
tornar-se uma funo, por isso agora escrever:
Esta uma das muitas construes para trs-incompatveis entre Python 2 e 3. Desde a
elaborao deste relatrio, comum encontrar exemplos escritos em ambas as verses
do Python, e a presena do impresso declarao ao invs da impresso() funo muitas
vezes um dos primeiros sinais de que voc est olhando para cdigo Python 2.
Isto pode parecer simples, mas se voc tem o modelo mental errado do que esta
operao faz, as obras Python maneira pode parecer confuso. Vamos cavar brevemente
em que aqui.
// cdigo C
int X = 4 ;
que so essencialmente a definio de um balde de memria chamada x, e colocando o valor 4 afim disso.
Em Python, pelo contrrio, as variveis so melhor pensamento de no como recipientes mas como
X=4
que so essencialmente a definio de um apontador nomeado X que aponta para algum outro
recipiente com o valor 4. Nota Uma consequncia disto: porque as variveis em Python apenas
apontar para vrios objetos, no h necessidade de declarar a varivel, ou at mesmo exigir a
varivel para apontar sempre informao do mesmo tipo! Este o sentido em que as pessoas
dizem Python tipagem dinmica: nomes de variveis podem apontar para objetos de qualquer
tipo. Assim, em Python, voc pode fazer coisas como esta:
Enquanto os usurios de linguagens de tipagem esttica pode perder o tipo de segurana que vem com
int X = 4 ;
esta tipagem dinmica uma das peas que faz Python to rpido para escrever e
fcil de ler.
H uma consequncia desta abordagem varivel como ponteiro que voc precisa estar
ciente. Se temos dois nomes de variveis apontando para o mesmo mutvel objeto, em
seguida, alterando um vai mudar o outro tambm! Por exemplo, vamos criar e modificar uma
lista:
Dentro [ 2 ]: X = [ 1 , 2 , 3 ]
y=X
Dentro [ 3 ]: impresso ( y )
[1, 2, 3]
[1, 2, 3, 4]
Este comportamento pode parecer confuso se voc est pensando erroneamente de variveis como
baldes que contm dados. Mas se voc for corretamente pensar-ing de variveis como ponteiros para
Note tambm que se usarmos = para atribuir outro valor para x, isso no vai afectar o valor dos y -assignment
simplesmente uma mudana do que opor os pontos variveis para:
[1, 2, 3, 4]
Novamente, isso faz todo o sentido se voc pensar X e y como ponteiros, e o operador
= como uma operao que muda pontos que o nome para.
Voc pode se perguntar se essa idia ponteiro faz es opera- aritmticas em Python difcil de
controlar, mas Python configurado de modo que este no um problema. Nmeros, cordas, e
outros tipos simples so ble immuta-: voc no pode mudar o seu valor, voc s pode mudar o
que valoriza as variveis apontam para. Assim, por exemplo, perfeitamente seguro faz-es
opera- como o seguinte:
Dentro [ 6 ]: X = 10
y = xx + = 5 # adicionar 5 a valor de x, e atribu-lo x
x = 15 y
= 10
Tudo um objeto
Python uma linguagem de programao orientada a objeto, e em Python tudo um
objeto.
Vamos carne para fora o que isso significa. Anteriormente, vimos que as variveis so ponteiros
simples- mente, e os prprios nomes de variveis no tm informaes de tipo anexado. Isso
leva alguns a afirmar erroneamente que Python uma linguagem livre-tipo. Mas este no o
caso! Considere o seguinte:
Dentro [ 7 ]: X = 4
tipo ( X )
Dentro [ 8 ]: X = 'Ol'
tipo ( X )
Dentro [ 9 ]: X = 3.14159
tipo ( X )
Python tem tipos; No entanto, os tipos no so ligados aos nomes de variveis, mas aos
prprios objectos.
Em linguagens de programao orientadas a objetos, como Python, uma objeto uma entidade
que contm dados, juntamente com os metadados e / ou funcionalidade associada. Em Python,
tudo um objeto, o que significa que cada entidade tem alguns metadados (chamado atributos) e
ality Funo- associado (chamado mtodos). Estes atributos e mtodos so acessados atravs da
sintaxe de ponto.
Por exemplo, antes que vimos que as listas tm um acrescentar mtodo, que acrescenta um item
Dentro [ 10 ]: eu = [ 1 , 2 , 3 ]
eu . acrescentar ( 100 )
impresso ( eu )
[1, 2, 3, 100]
Embora possa ser esperado para objetos compostos como listas de ter atributos e
mtodos, o que s vezes inesperado que, em Python mesmo tipos simples ter
anexado atributos e mtodos. Para
Dentro [ 11 ]: X = 4,5
impresso ( X . real , "+" , X . imag , 'Eu' )
4.5 + 0.0 i
Mtodos so como atributos, exceto que eles so funes que voc pode chamar
usando um par de abertura e fechamento parnteses. Por exemplo, os nmeros de
ponto flutuante ter um mtodo chamado is_integer que verifica se o valor um inteiro:
Dentro [ 12 ]: X = 4,5
X . is_integer ()
Dentro [ 13 ]: X = 4.0
X . is_integer ()
Quando dizemos que tudo em Python um objeto, que realmente queremos dizer que tudo
um objeto, mesmo os atributos e mtodos de objetos so eles mesmos objetos com
sua prpria tipo em formao:
Operaes aritimticas
Python implementa sete operadores aritmticos binrios bsicos, dois dos quais pode
dobrar como operadores unrios. Eles esto resumidos na tabela a seguir:
Estes operadores podem ser usados e combinados em maneiras intuitivos, usando parnteses
padro para as operaes de grupo. Por exemplo:
impresso ( 11 / 2 )
5.5
O operador de diviso andar foi adicionado em Python 3; voc deve estar ciente de se trabalhar
em Python 2, que o operador de diviso padro (/) atua como diviso de cho para inteiros e
como verdadeira diviso para nmeros de ponto flutuante.
Alm das operaes numricas padro, Python inclui operadores para executar
operaes lgicas bit a bit em nmeros inteiros. Estes so muito menos comumente
usado do que a aritmtica padro opera-
a >> b Bit mudar pedaos de deslocamento para a direita uma junto b unidades
Estes operadores bit a bit s fazem sentido em termos de represen- tao binria de
nmeros, que voc pode ver usando o built-in caixa
funo:
Dentro [ 4 ]: caixa ( 10 )
O resultado prefixado com 0b, o que indica uma representao binria. O resto dos
dgitos indicam que o nmero 10 expresso como a soma:
1 2 3+ 0 22+ 1 2 1+ 0 20
Dentro [ 5 ]: caixa ( 4 )
Agora, usando OR bit a bit, podemos encontrar o nmero que combina os bits de 4 e 10:
Dentro [ 6 ]: 4 | 10
Fora [6]: 14
Dentro [ 7 ]: caixa ( 4 | 10 )
Temos visto que as variveis podem ser atribudos com o operador =, e os valores armazenados
para uso posterior. Por exemplo:
Dentro [ 8 ]: uma = 24
impresso ( uma )
24
Podemos usar essas variveis em expresses com qualquer um dos operadores mencionados
Dentro [ 9 ]: uma + 2
Fora [9]: 26
Podemos querer atualizar a varivel uma com este novo valor; neste caso,
poderamos combinar a adio ea atribuio e escrever
a = a + 2. Uma vez que este tipo de operao combinada e mento assign- to comum,
pito inclui embutido operadores de actualizao para todas as operaes aritmticas:
26
a + = ba - = ba * = ba / = ba // = ba% = ba ** = ba
Operaes de comparao
Outro tipo de operao que pode ser muito til a comparao de valores diferentes.
Para isso, Python implementa comparao padro
operao Descrio
um == ba igual a ba! = ba no
igual a ba <b
igual a b
Dentro [ 11 ]: # 25 impar
25 % 2 == 1
Dentro [ 12 ]: # 66 impar
66 % 2 == 1
E, s para fazer sua cabea doer um pouco, d uma olhada nesta filho compara-:
Dentro [ 14 ]: - 1 == ~ 0
Lembre-se que ~ o operador bit-flip, e, evidentemente, quando voc virar todos os bits de zero,
voc acaba com -1. Se voc curioso para saber por que isso , procure o complemento de dois esquema
de codificao inteiro, que o Python usa para codificar nmeros inteiros assinados, e pensar
sobre acon- tece quando voc comear lanando todos os bits de inteiros codificado desta forma.
Dentro [ 15 ]: X = 4
(X<6)e(X>2)
Dentro [ 16 ]: ( X > 10 ) ou ( X % 2 == 0 )
Dentro [ 17 ]: no ( X < 6 )
aficionados lgebra booleana pode notar que o operador XOR no est includo; este pode,
naturalmente, ser construda de vrias maneiras de uma instruo composta dos outros
operadores. Caso contrrio, um truque inteligente que voc pode usar para XOR dos valores
booleanos o seguinte:
Esses tipos de operaes booleanas se tornar extremamente til quando comeamos a discutir demonstraes
de fluxo de controle tais como als condicionamento e lacetes.
Uma coisa, por vezes confuso sobre a lngua quando usar operadores booleanos ( e,
ou, no), e quando us-bit a bit es opera- (&, |, ~). A resposta est em seus nomes:
operadores booleanos devem ser usados quando voc quer calcular os valores
booleanos (isto , verdade ou falsidade) das demonstraes inteiras. operaes bit a bit
deve ser usado quando se deseja operar em bits ou componentes dos objetos em
questo individuais.
Gostar e, ou, e no, Python tambm contm operadores de prosa-like para verificar
identidade e filiao. Eles so os seguintes:
operadores de identidade: e no
Dentro [ 19 ]: uma = [ 1 , 2 , 3 ]
b=[1,2,3]
Dentro [ 20 ]: uma == b
Dentro [ 21 ]: uma b
Dentro [ 22 ]: uma no b
Dentro [ 23 ]: uma = [ 1 , 2 , 3 ]
b = aa b
operadores de associao
Dentro [ 24 ]: 1 dentro [ 1 , 2 , 3 ]
complexo x = 1 + 2j Os nmeros complexos (ie, nmeros com uma parte real e imaginria)
Vamos dar uma rpida olhada em cada um destes, por sua vez.
inteiros
O tipo numrico mais bsico o nmero inteiro. Qualquer nmero sem um ponto decimal um
nmero inteiro:
Dentro [ 1 ]: X = 1
tipo ( X )
inteiros Python so realmente um pouco mais sofisticado do que inteiros em linguagens como
C. inteiros C so fixadas com preciso, e normalmente
Dentro [ 2 ]: 2 ** 200
Fora [2]:
1606938044258990275541962092341162602522202993782792835301376
Outro recurso conveniente de inteiros Python que, por padro, a diviso upcasts ao
tipo de ponto flutuante:
Dentro [ 3 ]: 5 / 2
Note que este upcasting um recurso do Python 3; em Python 2, como em muitos digitado
estaticamente linguagens como C, diviso inteira trunca qualquer decimal e sempre retorna
um inteiro:
# Python comportamento 2
>>> 5 / 2 2
Para recuperar esse comportamento em Python 3, voc pode usar o operador do cho Diviso:
Dentro [ 4 ]: 5 // 2
Fora [4]: 2
O tipo de ponto flutuante pode armazenar nmeros fraccionrios. Eles podem ser definidos
em notao decimal standard, ou em notao exponencial:
Dentro [ 5 ]: X = 0.000005
y = 5e 6-
impresso ( X == y )
Verdade
Dentro [ 6 ]: X = 1.400.000,00
y = 1.4e6
impresso ( X == y )
Verdade
Dentro [ 7 ]: flutuador ( 1 )
Uma coisa a estar ciente de com ponto flutuante aritmtica que sua preciso limitada,
o que pode causar testes de igualdade a ser instvel. Por exemplo:
Por que este o caso? Acontece que no um comportamento exclusivo para Python, mas
devido ao formato de preciso fixo de armazenamento de ponto flutuante binrio usado pela
maioria, se no todos, plataformas de computao cientfica. Todas as linguagens de
programao que usam ponto flutuante bros NUM- armazen-los em um nmero fixo de bits,
e isso leva alguns bros NUM- a ser representado apenas cerca. Podemos ver isso imprimindo
os trs valores para alta preciso:
0,1 = 0,10000000000000001
0,2 = ,20000000000000001
0,3 = 0,29999999999999999
Estamos acostumados a pensar de nmeros em decimal notao (base-10), de modo que cada
frao deve ser expresso como uma soma de potncias de 10:
Computadores geralmente armazenar valores em notao binria, de modo que cada nmero expresso
1/8 = 0 2- 1 + 0 2- 2 + 1 2- 3
Os 3s continuar para sempre, isto , para representar verdadeiramente este quociente, o nmero de
Assim como a notao decimal requer um nmero infinito de dgitos na perfeio representam
1/3, notao binria requer um nmero infinito de dgitos para representar 1/10. Python trunca
internamente estes taes represen- em 52 bits alm do primeiro bit diferente de zero na maioria
dos sistemas. Este erro de arredondamento para valores de ponto flutuante um mal necessrio
de trabalhar com nmeros de ponto flutuante. A melhor maneira de lidar com isso para sempre
ter em mente que aritmtica de ponto flutuante aproximada, e Nunca dependem de testes de
Nmeros complexos
Dentro [ 10 ]: complexo ( 1 , 2 )
Dentro [ 11 ]: 1 + 2j
Dentro [ 12 ]: c = 3 + 4j
Dentro [ 16 ]:
tipo String
Strings em Python so criados com aspas simples ou duplas:
Python tem muitas funes de cadeia extremamente teis e mtodos; aqui esto algumas
delas:
Fora [18]: 4
Nenhum Tipo
Python inclui um tipo especial, o NoneType, que tem apenas um valor possvel gle pecado: Nenhum.
Por exemplo:
Voc ver Nenhum usado em muitos lugares, mas talvez o mais geralmente usado como o
valor padro de retorno de uma funo. Por exemplo, a
impresso() funo em Python 3 no retorna nada, mas ainda podemos pegar o seu
valor:
abc
Nenhum
Da mesma forma, qualquer funo em Python sem valor de retorno , na realidade, voltando Nenhum.
Tipo booleano
Verdadeiro falso
Dentro [ 31 ]: bool ( 0 )
Para strings, booleano (s) False para cadeias vazias e verdadeiro, caso contrrio:
Para sequncias que veremos na prxima seo, o booleana rep- resentao False para
sequncias vazias e verdadeira para quaisquer outras sequncias:
Dentro [ 36 ]: bool ([ 1 , 2 , 3 ])
Como voc pode ver, entre parnteses, quadrados, e encaracolados tm significados distintos
quando se trata do tipo de coleta produzido. Vamos dar um rpido passeio dessas estruturas
de dados aqui.
listas
As listas so o bsico pedido e mutvel Tipo de coleta de dados em Python. Eles podem ser
definidas com valores separados por vrgulas entre parntesis rectos; aqui est uma lista das
primeiras vrios nmeros primos:
Dentro [ 1 ]: eu = [ 2 , 3 , 5 , 7 ]
Listas de ter um nmero de propriedades e mtodos teis disponveis para eles. Aqui
vamos dar uma rpida olhada em algumas das mais comuns e teis:
len ( eu )
Fora [2]: 4
eu . acrescentar ( 11 )
eu
eu
Enquanto temos vindo a demonstrar listas contendo os valores de um nico tipo, uma das
caractersticas poderosas de objetos compostos do Python que eles podem conter objetos de qualquer
tipo, ou mesmo uma mistura de tipos. Por exemplo:
Esta flexibilidade uma consequncia do sistema de tipo dinmica do Python. Criando uma
seqncia tal mista em uma linguagem de tipagem esttica como C pode ser muito mais de uma
dor de cabea! Vemos que as listas podem ainda conter outras listas como elementos. Essa
flexibilidade tipo uma pea essencial do que faz cdigo Python relativamente rpido e fcil de
escrever. At agora temos estado a considerar manipulaes de listas como um todo; outra pea
essencial o acesso de elementos individuais. Isso feito em Python via indexao e fatiamento, que
Dentro [ 7 ]: eu = [ 2 , 3 , 5 , 7 , 11 ]
usos Python baseado em zero indexao, para que possamos acessar a primeira e se- elemento ond
em usar a seguinte sintaxe:
Dentro [ 8 ]: eu [ 0 ]
Fora [8]: 2
Dentro [ 9 ]: eu [ 1 ]
Fora [9]: 3
Elementos no final da lista pode ser acedida com fibras NUM- negativas, a partir
de -1:
Dentro [ 10 ]: eu [ - 1 ]
Fora [10]: 11
Dentro [ 12 ]: eu [ - 2 ]
Fora [12]: 7
Dentro [ 12 ]: eu [ 0 : 3 ]
Observe onde 0 e 3 encontram-se no diagrama anterior, e como a fatia leva apenas os valores
entre os ndices. Se deixar de fora o primeiro ndice, 0 Assume-se, assim podemos
equivalentemente escrever o seguinte:
Dentro [ 13 ]: eu [: 3 ]
Da mesma forma, se deixar de fora o ltimo ndice, o padro o comprimento da lista. Assim, os trs
Dentro [ 14 ]: eu [ - 3 :]
Finalmente, possvel especificar uma terceira nmero inteiro que representa a dimenso do passo; por
Dentro [ 16 ]: eu [:: - 1 ]
Ambos indexao e corte pode ser usado para definir elementos, bem como acess-los. A
sintaxe como seria de esperar:
Dentro [ 17 ]: eu [ 0 ] = 100
impresso ( eu )
[100, 3, 5, 7, 11]
A sintaxe de fatiamento muito semelhante tambm usado em muitos dados pacotes ented
cincia-ori-, incluindo NumPy e Pandas (mencionados na introduo).
Agora que vimos listas de Python e como acessar elementos em tipos compostos ordenados,
vamos dar uma olhada nas outras trs tipos de dados composto padro mencionados
anteriormente.
tuples
Tuplas so, em muitos aspectos semelhantes a listas, mas eles so definidos com
parnteses ao invs de colchetes:
Dentro [ 19 ]: t = ( 1 , 2 , 3 )
Eles tambm podem ser definidos sem quaisquer suportes em todos os:
Dentro [ 20 ]: t = 1 , 2 , 3
impresso ( t )
(1, 2, 3)
Como as listas discutidos antes, os tuplos tem um comprimento, e os elementos individuais podem
ser extrados usando indexao de colchetes:
Dentro [ 21 ]: len ( t )
Fora [21]: 3
Dentro [ 22 ]: t [ 0 ]
Fora [22]: 1
Dentro [ 23 ]: t [ 1 ] = 4
---------------------------------------------------------
<Ipython-input-23-141c76cb54a2> em <module> ()
- - - - > 1 t [1] = 4
---------------------------------------------------------
<Ipython-entrada-24-e8bd1632f9dd> em <mdulo> ()
- - - - > 1 t.append (4)
Dentro [ 25 ]: X = 0,125
X . as_integer_ratio ()
Estes mltiplos valores de retorno podem ser atribudas individualmente como segue:
0,125
A lgica de indexao e corte abordado anteriormente para listas trabalha para tuplas, bem como,
juntamente com uma srie de outros mtodos. Consulte a documentao Estruturas de Dados para
uma lista mais completa destes.
dicionrios
Os dicionrios so mapeamentos extremamente flexveis de chaves para valores, e formam a base
de grande parte da implementao interna do Python. Eles podem ser criados atravs de uma lista
separada por vrgulas de valor chave pares entre chaves:
Os itens so acessados e configurados via a sintaxe indexao usado para listas e tuplas, exceto
aqui o ndice no uma ordem baseada em zero, mas chave vlida no dicionrio:
Fora [28]: 2
Tenha em mente que os dicionrios no manter qualquer sentido de ordem para os parmetros de
entrada; isso por design. Esta falta de ordenao permite dicionrios a serem implementadas de
forma muito eficiente, para que o acesso elemento DOM RAN muito rpido, independentemente
do tamanho do nary dictio- (se voc estiver curioso como isso funciona, ler sobre o conceito de um
tabela hash). o documentao Python tem uma lista completa dos mtodos disponveis
para dicionrios.
sets
A quarta coleo bsica o conjunto, que contm lections COL no ordenadas de itens
exclusivos. Eles so definidos bem como listas e tuplas, exceto que eles usam as chaves
de dicionrios:
Dentro [ 30 ]: primes = { 2 , 3 , 5 , 7 }
probabilidade = { 1 , 3 , 5 , 7 , 9 }
Se voc estiver familiarizado com a matemtica dos conjuntos, voc estar familiarizado com
operaes como a unio, interseco, diferena, diferena simtrica, e outros. conjuntos do Python
tem todas essas operaes construdo em via mtodos ou operadores. Para cada um, vamos
mostrar os dois mtodos equivalentes:
Muitos outros mtodos set e operaes esto disponveis. Voc proba- Bly j adivinhou o
que eu vou dizer a seguir: consulte Python on-line docu- mentao para uma referncia
completa.
Python contm vrias outras estruturas de dados que voc pode achar til; estes
podem geralmente ser encontrada no embutido colees
mdulo. o colees mdulo est totalmente documentado em Python
documentao on-line , E voc pode ler mais sobre os vrios objetos disponveis
l.
collections.namedtuple
Como uma tupla, mas cada valor tem um nome
collections.defaultdict
Como um dicionrio, mas as chaves no especificados tm um valor padro especificado pelo
usurio
collections.OrderedDict
Como um dicionrio, mas a ordem das teclas mantida Uma vez que voc tenha
visto o padro built-in tipos de coleo, o uso destas funcionalidades estendidas muito
intuitivo, e eu sugiro leitura ing sobre seu uso .
Controle de fluxo
Controle de fluxo onde a borracha realmente encontra a estrada em progra- mao. Sem ele, um
programa simplesmente uma lista de declaraes que so sequencialmente executados. Com
fluxo de controle, voc pode executar certos blocos de cdigo condicionalmente e / ou
repetidamente: estes elementos bsicos podem ser combinados para criar gramas pr
surpreendentemente sofisticados!
Flow Control | 37
Aqui ns vamos cobrir declaraes condicionais (incluindo se, elif, e
outro) e instrues de repetio (incluindo para e enquanto, e o acompanhamento pausa,
continuar, e passar).
instrues condicionais, muitas vezes referida como se ento declaraes, permitir que o
programador para executar certas partes do cdigo dependendo de alguma condio booleana.
Um exemplo bsico de um instruo condicional Python esta:
Dentro [ 1 ]: X = - 15
E se X == 0 :
- 15 negativo
Note-se especialmente a utilizao de dois pontos (:) e espaos em branco para indicar blocos de taxa
de separao dos cdigo. Python adota a E se e outro frequentemente usado em outras lnguas; a sua
palavra-chave mais original elif, uma contrao de else if. Nestes clusulas condicionais, elif e outro blocos
so opcionais; Alm disso, voc pode incluir, opcionalmente, como poucos ou como muitos elif declaraes
loops
Loops em Python so uma maneira de executar repetidamente mento algum cdigo State-. Assim, por
exemplo, se ns gostaramos de imprimir cada um dos itens em uma lista, podemos usar uma para loop:
2357
Por exemplo, um dos iterators mais geralmente usados em Python a alcance objeto,
o que gera uma sequncia de nmeros:
0123456789
Note-se que a gama comea em zero por padro, e que por conveno o topo de gama
no est includo na sada. objetos Range tambm podem ter valores mais complicados:
Voc pode notar que o significado de alcance argumentos muito seme- lar para a sintaxe
uma das principais diferenas entre Python 2 e 3: 2 em Python, alcance() produz uma lista,
while
O outro tipo de circuito em Python um enquanto loop, que repete at que alguma condio for
satisfeita:
Dentro [ 6 ]: Eu = 0
enquanto Eu < 10 :
0123456789
Flow Control | 39
o pausa breaks declarao fora do circuito inteiramente
do uso continuar para imprimir uma srie de fibras, mesmo NUM-. Neste caso, o resultado
poderia ser feito to bem com um if-else declarao, mas s vezes a continuar declarao
pode ser uma maneira mais conveniente para expressar a idia que voc tem em mente:
# verificar se n par
E se n % 2 == 0 :
continuar
impresso ( n , fim = '' )
1 3 5 7 9 11 13 15 17 19
Aqui est um exemplo de uma pausa declarao usado para uma tarefa menos trivial. Este circuito ir
Dentro [ 8 ]: uma , b = 0 , 1
Amax = 100
eu = []
enquanto Verdade :
( uma , b ) = ( b , uma + b )
E se uma > Amax :
pausa
eu . acrescentar ( uma )
impresso ( eu )
Observe que usamos uma while True loop, que far um loop para sempre a menos que tenhamos uma
instruo break!
Um padro usado raramente disponvel em Python a outro declarao como parte de um para
ou enquanto ciclo. Discutimos a outro bloco anteriormente: ele executa se toda a E se e elif declaraes
avaliar a Falso. O lao- outro talvez uma das declaraes mais confusamente chamado em
Python; Prefiro pensar nisso como um sem intervalo declarao: isto , o
declarao.
Como um exemplo de onde este pode ser til, considerar a seguinte aplicao
(no-optimizado) do Crivo de Eratstenes, um algoritmo conhecido bem para encontrar
nmeros primos:
Dentro [ 9 ]: eu = []
nmx = 30
sem intervalo
eu . acrescentar ( n )
impresso ( eu )
o outro declarao executa somente se nenhum dos fatores de dividir o nmero dado. o outro declarao
funciona de forma semelhante com a enquanto
ciclo.
usando funes
abc
Dentro [ 2 ]: impresso ( 1 , 2 , 3 )
123
1--2--3
definindo Funes
Funes tornam-se ainda mais til quando comeamos a definir a nossa prpria
funcionalidade, organizando para ser usado em vrios lugares. Em Python, as funes so
definidas com o def declarao. Por exemplo, podemos encapsular uma verso do nosso
cdigo seqncia de Fibonacci da seo anterior da seguinte forma:
( uma )
Retorna eu
Agora ns temos uma funo chamada fibonacci que leva um nico argumento N, faz
alguma coisa com este argumento, e Retorna valor sa; neste caso, uma lista do primeiro N nmeros
de Fibonacci:
Dentro [ 5 ]: fibonacci ( 10 )
Se voc estiver familiarizado com as lnguas rigidez como C, voc vai imediata- mente notar
que no h informaes sobre o tipo associado com as entradas ou sadas de funo.
funes Python pode retornar qualquer objeto Python, simples ou composto, o que significa
construes que podem ser difceis em outros idiomas so simples em Python. Por exemplo,
vrios valores de retorno so simplesmente colocadas em um tuplo, o que indicado por
vrgulas:
Muitas vezes, quando a definio de uma funo, existem certos valores que queremos a funo
para usar a maioria do tempo, mas tambm gostaria de dar ao usurio uma certa flexibilidade.
Neste caso, podemos usar valores padro para argumentos. considere o fibonacci funo de antes.
O que se gostaramos que o usurio seja capaz de jogar com os valores iniciais? Poderamos
fazer isso da seguinte forma:
( uma )
Retorna eu
Dentro [ 8 ]: fibonacci ( 10 )
Mas agora podemos usar a funo de explorar coisas novas, tais como o efeito de novos
valores iniciais:
Dentro [ 9 ]: fibonacci ( 10 , 0 , 2 )
Os valores tambm podem ser especificadas por nome se desejado, caso em que a ordem dos
valores nomeados no importa:
Fora [10]: [3, 4, 7, 11, 18, 29, 47, 76, 123, 199]
args = ( 'um',)
kwargs = { 'palavra-chave': 2}
Dentro [ 14 ]: inputs = ( 1 , 2 , 3 )
palavras-chave = { 'Pi' : 3,14 }
Anteriormente, rapidamente cobriu a forma mais comum de definir fun- es, os def declarao.
provvel que voc se deparar com uma outra forma de definir, funes one-off curtas
com o lambda declarao. Parece algo como isto:
Fora [15]: 3
Ento, por que voc nunca iria querer usar uma coisa dessas? Primeiramente, ele se
resume ao fato de que tudo um objeto em Python, mesmo fun- es-se! Isso significa que
as funes podem ser passados como argumentos para funes.
Como exemplo disso, suponha que temos alguns dados armazenados em uma lista de dicionrios:
Agora suponha que deseja classificar esses dados. Python tem uma classificadas o fun- que faz isso:
Dentro [ 18 ]: classificadas ([ 2 , 4 , 3 , 5 , 1 , 6 ])
como para classificar os nossos dados. Podemos fazer isso, especificando o chave funo, uma funo que
dado um item retorna a chave de classificao para esse item:
Fora [19]:
[{ 'ARRUACEIRO': 1912, 'primeiro': 'Alan', 'ltima': 'Turing'}, { 'ARRUACEIRO': 1906,
'primeiro': 'Grace', 'ltima': 'Hopper'}, { 'ARRUACEIRO': 1956, 'primeiro': 'Guido',
'ltima': 'Van Rossum'}]
Fora [20]:
[{ 'ARRUACEIRO': 1906, 'primeiro': 'Grace', 'ltima': 'Hopper'}, { 'ARRUACEIRO':
1912, 'primeiro': 'Alan', 'ltima': 'Turing'}, { 'ARRUACEIRO': 1956, 'primeiro':
'Guido', 'ltima': 'Van Rossum'}]
Erros e Excees
No importa a sua habilidade como um programador, voc acabar por cometer um erro de
codificao. Tais erros vm em trs sabores bsicos:
Os erros de sintaxe
erros de execuo
Erros onde o cdigo sintaticamente vlido falha na execuo, talvez devido entrada do
usurio invlido (por vezes fcil de corrigir)
erros de semntica
Erros de lgica: cdigo executado sem problemas, mas o resultado no o que voc
espera (muitas vezes muito difcil identificar e corrigir)
Erros e Excees | 45
Aqui ns estamos indo centrar-se sobre como lidar corretamente com erros de execuo. Como
veremos, Python lida com erros de execuo atravs do seu manipulao de exceo estrutura.
Caso voc tenha feito qualquer codificao em Python, voc provavelmente se deparar com erros de tempo
de execuo. Eles podem acontecer em um monte de maneiras. Por exemplo, se voc tentar fazer
Dentro [ 1 ]: impresso ( Q )
---------------------------------------------------------
<Ipython-entrada-3-e796bdcf24ff> em <mdulo> ()
----> 1 impresso (Q)
Dentro [ 2 ]: 1 + 'abc'
---------------------------------------------------------
<Ipython-entrada-4-aab9e8ede4f7> em <mdulo> ()
- - - - > 1 1 + 'ABC'
Dentro [ 3 ]: 2 / 0
---------------------------------------------------------
<Ipython-entrada-5-ae0c5d243292> em <mdulo> ()
- - - - > 1 2/0
Dentro [ 4 ]: eu = [ 1 , 2 , 3 ]
eu [ 1000 ]
---------------------------------------------------------
<Ipython-input-6-06b6eb1b8957> em <module> ()
1 G = [1, 2, 3]
- - - - > 2 G [1000]
Note-se que em cada caso, Python gentil o suficiente para no simplesmente indicar que
um erro aconteceu, mas para cuspir uma significativo exceo que inclui informaes sobre o
que exatamente deu errado, juntamente com a linha exata do cdigo onde o erro aconteceu.
Ter acesso a dizer- erros ingful como este extremamente til quando se tenta rastrear a
raiz dos problemas em seu cdigo.
A principal Python ferramenta d-lhe para lidar com excees de tempo de execuo o experimentar ... exceto
Dentro [ 5 ]:
experimentar :
exceto :
impresso ( " este executado somente se houver um erro" )
Note-se que o segundo bloco aqui no foi executado: isso porque o primeiro bloco no
retornou um erro. Vamos colocar uma afir- mao problemtica na experimentar bloquear e ver
o que acontece:
Dentro [ 6 ]: experimentar :
Erros e Excees | 47
Aqui vemos que quando o erro foi criado na experimentar declarao (neste caso,
um ZeroDivisionError), o erro foi capturado, ea
exceto declarao foi executado.
Uma forma isso frequentemente usado o de verificar a entrada do usurio dentro de uma
funo ou outro pedao de cdigo. Por exemplo, pode querer ter uma funo que chama a zero
diviso e retorna algum outro valor, talvez um adequadamente grande nmero como 10 100:
Retorna uma / b
exceto :
Retorna 1E100
Dentro [ 8 ]: safe_divide ( 1 , 2 )
Dentro [ 9 ]: safe_divide ( 2 , 0 )
H um problema sutil com este cdigo, no entanto: o que acontece quando um outro tipo
de exceo vem acima? Por exemplo, isso provavelmente no o que pretendamos:
Dividindo um inteiro e uma string levanta uma TypeError, que o nosso cdigo zeloso
excesso capturado e assumiu era um ZeroDivisionError! Por esta razo, quase sempre
uma idia melhor para capturar excees
explicitamente:
Retorna uma / b
exceto ZeroDivisionError :
Retorna 1E100
Dentro [ 12 ]: safe_divide ( 1 , 0 )
---------------------------------------------------------
<Ipython-input-15-2331af6a0acf> em <module> ()
- - - - > 1 safe_divide (1, '2')
---->3 voltar a / b
4 exceto ZeroDivisionError: 5
voltar 1E100
Estamos pegando erros de diviso zero apenas, e deixando todos os outros erros
permaneam intactas.
A maneira como voc levantar suas prprias excees com o levantar declarao. Por exemplo:
---------------------------------------------------------
<Ipython-entrada-16-c6a4c1ed2f34> em <mdulo> ()
- - - - > 1 elevar RuntimeError ( "minha mensagem de erro")
( uma )
Retorna eu
Erros e Excees | 49
Um problema potencial aqui que o valor de entrada pode ser negativo. Isso no vai
actualmente causar qualquer erro na nossa funo, mas podemos querer que o usurio saiba
que um negativo N no suportado. Erros decorrentes de valores de parmetros invlidos, por
conveno, levar a uma
ValueError sendo levantadas:
( uma )
Retorna eu
Dentro [ 17 ]: fibonacci ( 10 )
Dentro [ 18 ]: fibonacci ( - 10 )
---------------------------------------------------------
<Ipython-input-20-3d291499cfa7> em <module> ()
- - - - > 1 Fibonacci (-10)
Agora o usurio sabe exatamente por que a entrada invlida, e poderia at usar um experimentar ... exceto bloquear
Dentro [ 19 ]: N = - 10
experimentar :
Resumidamente, eu quero mencionar aqui alguns outros conceitos que voc pode executar em. Eu no
vou entrar em detalhes sobre esses conceitos e como e por que us-los, mas em vez de simplesmente
mostrar-lhe a sintaxe para que possa explorar mais em seu prprio pas.
s vezes, em um experimentar ... exceto declarao, voc gostaria de ser capaz de trabalhar com a
prpria mensagem de erro. Isso pode ser feito com o Como
palavra-chave:
Dentro [ 20 ]: experimentar :
X=1/0
exceto ZeroDivisionError Como errar :
impresso ( " classe de erro : " , tipo ( errar ))
impresso ( " Mensagem de erro :" , errar )
Com este padro, voc pode personalizar ainda mais o tratamento de exceo de sua funo.
---------------------------------------------------------
<Ipython-input-23-92c36e04a9d0> em <module> ()
2 passar
Isso permitiria que voc use um experimentar ... exceto bloco que s pega esse tipo de erro:
Erros e Excees | 51
Dentro [ 22 ]:
experimentar :
Voc pode encontrar este til como voc desenvolver o cdigo mais personalizado.
a seguinte:
Dentro [ 23 ]: experimentar :
Iterators
Muitas vezes, uma parte importante da anlise de dados repetir uma culation cal-
semelhante, mais e mais, de forma automatizada. Por exemplo, voc pode ter uma tabela de
nomes que voc gostaria de dividir em datas primeiros e ltimos, ou talvez de que voc
gostaria de converter para algum tapete for- padro. Uma das respostas do Python para esta
a iterator sintaxe. Ns j vimos isso j com o alcance iterator:
0123456789
chave para a compreenso de uma ampla classe de funcionalidade Python muito til.
Iterators so, talvez, mais fcil de entender, no caso concreto de iterao atravs de
uma lista. Considere o seguinte:
3 5 7 9 11
o familiar para X dentro y sintaxe nos permite repetir alguma operao para cada valor na
lista. O fato de que a sintaxe do cdigo to perto de sua descrio Ingls ( para [cada]
valor em [a] lista) apenas uma das escolhas sintticas que faz Python um medidor de
LAN-tais intuitivo de aprender e usar.
Dentro [ 3 ]: iter ([ 2 , 4 , 6 , 8 , 10 ])
este objecto iteradora que fornece a funcionalidade exigida pela para ciclo. o iter objeto
um recipiente que lhe d acesso para o prximo objeto durante o tempo que ele
vlido, que pode ser visto com a funo built-in Prximo:
Dentro [ 4 ]: Eu = iter ([ 2 , 4 , 6 , 8 , 10 ])
Iterators | 53
Qual o propsito deste nvel de engano? Bem, acontece que isso extremamente til,
pois permite Python para tratar as coisas como listas que so na verdade no lista.
Dentro [ 8 ]: alcance ( 10 )
0123456789
O benefcio do engano iterador que a lista completa nunca criado explicitamente! Podemos
ver isso fazendo um clculo intervalo que iria sobrecarregar a nossa memria do sistema
se realmente instanciado-lo (note que em Python 2, alcance cria uma lista, para executar o
seguinte no vai levar a coisas boas!):
Dentro [ 11 ]: N = 10 ** 12
para Eu dentro alcance ( N ):
E se Eu > = 10 : impresso
pausa ( Eu , fim = '' )
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
E se alcance foram realmente criar essa lista de um trilho de valores, seria ocupar dezenas de
terabytes de memria da mquina: um desperdcio, dado o fato de que estamos ignorando todos,
mas os primeiros 10 valores! Na verdade, no h nenhuma razo que iteradores sempre tem que
terminar em tudo! Python itertools biblioteca contm uma contagem funo que atua como uma gama
infinita:
E se Eu > = 10 :
impresso pausa ( Eu ,
fim = '' )
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
Se no tivssemos jogado em uma pausa circuito aqui, ele iria alegremente contando at que
o processo interrompido manualmente ou mortos (usando, por exemplo, ctrl-C).
Iterators teis
Esta sintaxe iterador usado quase universalmente em Python built-in tipos, bem como as
mais dados especficos da cincia objeto vamos explorar em sees posteriores. Aqui ns
vamos cobrir alguns dos iterators mais teis na linguagem Python.
enumerar
Muitas vezes, voc precisa interagir no apenas os valores em uma matriz, mas tambm manter o controle
Dentro [ 13 ]: eu = [ 2 , 4 , 6 , 8 , 10 ]
para Eu dentro alcance ( len ( eu )):
impresso ( Eu , eu [ Eu ])
021
426
384
10
Embora isso no funciona, Python oferece uma sintaxe mais limpa usando o
enumerar iterator:
021
426
384
10
Esta a maneira mais Pythonic para enumerar os ndices e valores em uma lista.
Iterators | 55
fecho eclair
Outras vezes, voc pode ter vrias listas que deseja iterar simultaneamente. Voc
certamente poderia interagir sobre o ndice como no exemplo no Pythonic analismos
anteriormente, mas melhor usar o fecho eclair iteradora, que fecha em conjunto
iterables:
Dentro [ 15 ]: eu = [ 2 , 4 , 6 , 8 , 10 ]
R = [ 3 , 6 , 9 , 12 , 15 ]
para lVal , rval dentro fecho eclair ( eu , R ):
2346
6 9 8 12
10 15
Qualquer nmero de iterables podem ser compactados em conjunto, e, se eles so comprimentos dife-
mapa e filtro
0 1 4 9 16 25 36 49 64 81
o filtro iterator semelhante, exceto que s passa atravs ues va- para o qual a
funo de filtro avalia a verdade:
02468
o mapa e filtro funes, juntamente com o reduzir funo (que vive em Python functools
mdulo) so com- ponentes fundamentais da programao funcional estilo, que,
embora no um estilo de programao dominante no mundo Python, tem suas
outspo- ken proponentes (ver, por exemplo, o biblioteca pytoolz ).
0123456789
Assim, por exemplo, podemos ficar complicado e comprimir o mapa exemplo de diante
para o seguinte:
0 1 4 9 16 25 36 49 64 81
Usando este truque permite-nos responder velha questo que surge em fruns Python
alunos: por que no h descompactar() funo que faz o contrrio de fecho eclair()? Se voc se
tranca em um armrio escuro e pensar sobre isso por um tempo, voc pode perceber que o
oposto de fecho eclair()
fecho eclair()! A chave que fecho eclair() pode fechar juntamente um nmero qualquer de dores ou sequncias
de iteraes. Observar:
Dentro [ 20 ]: L1 = ( 1 , 2 , 3 , 4 )
L2 = ( 'uma' , 'B' , 'C' , 'D' )
impresso ( * z )
Refletir sobre isso por um tempo. Se voc entender por que ela funciona, voc j percorreu um longo
caminho na compreenso iterators Python!
Iterators | 57
Dentro [ 23 ]: a partir de itertools importar permutaes
p = permutaes ( alcance ( 3 ))
impresso ( * p )
Da mesma forma, o itertools.combinations itera funo sobre todas as combinaes nicas de N valores
dentro de uma lista:
Algo relacionado o produtos iterator, que itera sobre todos os conjuntos de pares entre
duas ou mais iterables:
Existem muitos iterators mais teis em itertools: A lista completa pode ser encontrada, juntamente
com alguns exemplos, em Python on-line documentao o .
compreenses lista
Se voc ler o cdigo Python suficiente, voc eventualmente se deparar com a construo
concisa e eficiente conhecido como compreenso da lista. Esta uma caracterstica de Python
eu espero que voc vai se apaixonar com se voc no usei isso antes; que algo como isto:
Fora [1]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
O resultado disso uma lista de nmeros que exclui mltiplos de 3. Enquanto este exemplo
pode parecer um pouco confuso no incio, como a familiaridade com Python cresce, leitura e
escrita compreenses lista vai se tornar uma segunda natureza.
para circuito em uma nica linha curta, legvel. Por exemplo, aqui um loop que constri uma lista
eu . acrescentar ( n ** 2 )
eu
Fora [2]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
Fora [3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
Tal como acontece com muitos comandos Python, voc quase pode ler fora do ing dizer-
desta declarao na plancie Ingls: construir uma lista consistindo da praa de n para cada n
at 12 . Esta sintaxe bsica, ento, [ expr para var dentro iterveis], Onde
expr qualquer expresso vlida, var um nome da varivel, e iterable qualquer objeto Python
iterveis.
iterao mltipla
s vezes voc quer construir uma lista no apenas a partir de um valor, mas de dois. Para
fazer isso, basta adicionar outro para expresso na hension compre-:
Fora [4]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
Note-se que o segundo para expresso funciona como o ndice interior, variando o mais rpido
na lista resultante. Este tipo de construo pode ser estendido para trs, quatro, ou mais
iterators dentro do sion compreensveis, embora em algum momento a legibilidade do cdigo
vai sofrer!
Condicionais no Iterator
possvel controlar ainda mais a iterao atravs da adio de um condicional para o fim
da expresso. No primeiro exemplo da seo, iterado todos os nmeros de 1 a 20, mas
deixou de fora mltiplos de 3. Olhe para isso de novo, e observe a construo:
Fora [5]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
A expresso ( i% 3> 0) avalia a Verdade a menos que val divisvel por 3. Mais uma vez, o
significado idioma Ingls pode ser imediatamente lido: Construir uma lista de valores para
cada valor at 20, mas apenas se o
compreenses lista | 59
valor no divisvel por 3 . Uma vez que voc est confortvel com isso, isso muito mais
fcil escrever e entender em um relance do que a sintaxe circuito equivalente:
Dentro [ 6 ]: eu = []
para val dentro alcance ( 20 ):
E se val % 3 :
eu . acrescentar ( val )
eu
Fora [6]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
Se voc j programou em C, voc pode estar familiarizado com a linha nico condicional
habilitado pelo? operador:
Python tem algo muito semelhante a este, que mais frequentemente usado dentro de
compreenses lista, lambda funes, e outros locais em que desejada uma expresso
simples:
Dentro [ 7 ]: val = - 10
val E se val > = 0 outro - val
Fora [7]: 10
compreenses lista. Isto est ficando muito com- plicado agora, mas voc poderia fazer algo
parecido com isto:
Fora [8]: [1, -2, -4, 5, 7, -8, -10, 11, 13, -14, -16, 17, 19]
Fora [9]: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121}
Lembre-se que um conjunto uma coleo que no contm duplicatas. A compreenso set
respeita esta regra, e elimina quaisquer entradas duplicadas:
Com um ligeiro ajuste, voc pode adicionar dois pontos (:) para criar um dict hension compre-:
Finalmente, se voc usar parnteses em vez de colchetes, voc recebe o que chamado de gerador
de expresso:
geradores
Aqui ns vamos dar um mergulho mais profundo em geradores de Python, incluindo expresses
Erator ge- e funes de gerador.
Expresses gerador
A diferena entre compreenses de lista e ses gerador expres- s vezes
confuso; aqui ns vamos rapidamente delinear as diferenas entre eles.
geradores | 61
Fora [1]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
Fora [3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
Quando voc cria uma lista, voc est realmente construindo uma coleo de va- lores, e h
algum custo de memria associada com isso. Quando voc cria um gerador, voc no est
construindo uma coleo de valores, mas uma receita para produzir esses valores. Ambos
expor a mesma interface iterator, como podemos ver aqui:
9 0 1 4 16 25 36 49 64 81 100 121
9 0 1 4 16 25 36 49 64 81 100 121
Um exemplo de um gerador de expresso infinito pode ser criada utilizando o contagem iterao
definido em itertools:
contagem ()
0 1 2 3 4 5 6 7 8 9 10
o contagem iterator vai continuar alegremente contando sempre at que voc diga a ele para parar; isso faz
com que seja conveniente para criar geradores que tambm ir durar para sempre:
Dentro [ 8 ]:
fatores = [ 2 , 3 , 5 , 7 ]
G = ( Eu para Eu dentro contagem () E se todos ( Eu % n > 0 para n dentro fatores ))
13 17 1 11 19 23 29 31 37 41
Voc pode ver o que estamos chegando aqui: se fssemos para expandir a lista de
fatores de forma adequada, o que teria o comeo de um gerador de nmero primo,
usando o Crivo de Eratstenes algo- rithm. Vamos explorar isso mais
momentaneamente.
A lista pode ser repetido vrias vezes; um gerador de expresso uma nica utilizao
Este um desses potenciais armadilhas de gerador de expresses. Com uma lista, que pode
diretamente fazer isso:
9 0 1 4 16 25 36 49 64 81 100 121 0 1 4 9 16 25
36 49 64 81 100 121
Fora [10]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
Dentro [ 11 ]: Lista ( G )
Fora [11]: []
geradores | 63
Isto pode ser muito til porque significa iterao pode ser parado e iniciado:
para n dentro G :
0 1 4 9 16 25 36
fazendo algo entre 49 64 81 100 121
Um lugar que eu encontrei este til quando se trabalha com colees de arquivos de dados
no disco; isso significa que voc pode facilmente analis-los em lotes, deixando a pista gerador
de sustento dos quais voc ainda tem que ver.
Vimos na seo anterior que compreenses lista so mais utilizados para criar listas
relativamente simples, ao usar um normal, para loop pode ser melhor em situaes
mais complicadas. O mesmo vale para gerador de expresses: podemos fazer
geradores mais complicados usando funes de gerador, que fazem uso da produo declarao.
Aqui temos duas formas de construir a mesma lista:
L2 = []
para n dentro alcance ( 12 ):
L2 . acrescentar ( n ** 2 )
impresso ( L1 )
impresso ( L2 )
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121] [0, 1, 4, 9, 16, 25, 36, 49,
64, 81, 100, 121]
Da mesma forma, temos aqui duas formas de construir res geraes equivalentes:
G2 = gen ()
impresso ( * G1 )
impresso ( * G2 )
9 0 1 4 16 25 36 49 64 81 100 121 0 1 4 9 16 25
36 49 64 81 100 121
Uma funo geradora uma funo que, em vez de usar Retorna para retornar um valor uma vez,
usos produo para se obter uma sequncia de (potencialmente infinito) de valores. Assim como
no gerador de expresses, o estado do gerador preservada entre as iteraes parciais, mas se
queremos uma nova cpia do gerador podemos simplesmente chamar a funo novamente.
Aqui eu vou mostrar o meu exemplo favorito de uma funo de gerador: a funo para
gerar uma srie ilimitada de nmeros primos. Um algoritmo clssico para isso o Crivo
de Eratstenes, que trabalha coisa alguns- assim:
impresso ( eu )
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, \
29, 31, 33, 35, 37, 39]
impresso ( eu )
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37]
impresso ( eu )
Se repetirmos este procedimento bastante vezes em uma lista grande o suficiente, podemos gerar tantos
primos como ns desejamos. Vamos encapsular essa lgica em uma funo de gerador:
geradores | 65
Dentro [ 19 ]: def gen_primes ( N ):
"" "Gerar nmeros primos at N" ""
primes = conjunto ()
primes . adicionar ( n )
produo n
impresso ( * gen_primes ( 70 ))
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67
Isso tudo que existe para ela! Enquanto isso no certamente o mais computacional
implementao cionalmente eficiente do Crivo de Eratstenes, ele ilustra como conveniente a
sintaxe da funo gerador pode ser para a construo de seqncias mais complicadas.
Mdulos e Pacotes
Uma caracterstica de Python que o torna til para uma ampla gama de tarefas o fato de que se
trata baterias includas, isto , a biblioteca padro do Python contm ferramentas teis para uma
ampla gama de tarefas. Alm de tudo isso, h um amplo ecossistema de ferramentas de terceiros
e idades PACK- que oferecem funcionalidade mais especializada. Aqui vamos dar uma olhada em
importar mdulos da biblioteca padro, ferramentas para a instalao de terceiros mdulos do
partido, e uma descrio de como voc pode fazer seus prprios mdulos.
Para os nomes dos mdulos mais longos, no conveniente usar o nome do mdulo
completo cada vez que voc acessar algum elemento. Por esta razo, vamos comumente
usar o import ... como ... padro para criar um alias de mais curto para o namespace. Por
exemplo, o pacote NumPy (Numerical Python), um pacote de terceiros populares til para
ence dados Sci, por conveno importados sob o pseudnimo np:
np . cos ( np . pi )
cos ( pi )
pecado ( pi ) ** 2 + cos ( pi ) ** 2
Esse padro deve ser usado com moderao, se em tudo. O problema que essas
importaes podem, por vezes, substituir os nomes das funes que voc no pretende
substituir, eo implicitness da declarao torna difcil determinar o que mudou. Por
exemplo, o Python tem um embutido soma funo que pode ser usada para vrias
operaes:
soma(...)
Mdulos e Pacotes | 67
sum (iterable [, incio]) -> valor
Podemos usar isso para calcular a soma de uma sequncia, comeando com um determinado valor
Fora [6]: 9
Fora [8]: 10
faixa (5) ao longo do ltimo eixo (indicado por - 1). Este o tipo de uao Sente que podem
surgir se no for tomado cuidado ao usar import * -Para este motivo, melhor evitar a menos
que voc saiba exatamente o que voc est fazendo.
biblioteca padro do Python contm muitos built-in mdulos teis, que voc pode ler sobre
em plena documentao do Python . Qualquer um destes pode ser importado com o importar declarao,
e depois explorado usando a funo de ajuda discutido na seo anterior. Aqui est uma
lista extremamente incompleta de alguns dos mdulos que voc pode desejar explorar e
aprender sobre:
Uma das coisas que faz Python til, especialmente dentro do mundo da cincia de
dados, seu ecossistema de mdulos de terceiros. Estes podem ser importados assim
como os mdulos internos, mas primeiro os mdulos deve ser instalado em seu sistema.
O registro padro para tais mdulos o Python Package Index ( PyPI para o short),
encontrada na Web em http://pypi.python.org/ . Por convenincia, Python vem com um
programa chamado pip ( um acrnimo recursivo que significa pip instala pacotes), que
vai buscar automaticamente pacotes lanados e lis ted em PyPI (se voc usa Python
verso 2, pip deve ser instalado separadamente). Por exemplo, se voc gostaria de
instalar o supersmoother
Para mais informaes sobre PyPI eo pip instalador, consulte a documentao em http://pypi.python.org
.
de dados, e um grande privilgio de Python neste contexto. Cordas em pito pode ser definido
Alm disso, possvel definir cordas de vrias linhas usando um triplo Citao sintaxe:
Com isso, vamos dar um rpido passeio de algumas das cordas ferramentas a manipulao do Python.
Para manipulao bsica de cordas, mtodos string embutidas do Python pode ser extremamente
conveniente. Se voc tem um fundo de trabalho em C ou outra linguagem de baixo nvel, voc
provavelmente vai encontrar a simplicidade dos mtodos do Python extremamente refrescante.
Ns introduzimos tipo string do Python e alguns desses mtodos anteriores; aqui vamos mergulhar
um pouco mais.
Python torna bastante fcil de ajustar o caso de uma string. Aqui ns vamos olhar para o superior(),
mais baixo(), capitalizar (), ttulo (), e caso swap () mtodos, utilizando a seguinte cadeia confuso
como um exemplo:
Para converter toda a cadeia em maisculas ou minsculas, voc pode usar o superior() ou mais
baixo() mtodos respectivamente:
Para remover apenas um espao para a direita ou para a esquerda, o uso RSTRIP () ou lstrip (),
respectivamente:
Para remover diferentes espaos caracteres, voc pode passar o caractere desejado para
o faixa() mtodo:
Por exemplo, podemos usar o centro() mtodo para centrar uma determinada seqncia dentro de um
de um determinado comprimento:
Todos estes mtodos adicionalmente aceitar qualquer caractere que ser usado para preencher o
espao. Por exemplo:
Porque zero enchimento uma necessidade, tal comum, Python tambm fornece
zfill (), que um mtodo especial para-pad direita uma string com zeros:
find () / rfind (), ndice () / rindex (), e substituir() mtodos so os melhores mtodos
embutidos.
Fora [18]: 16
Fora [19]: 16
A nica diferena entre encontrar() e ndice() o seu comportamento quando a cadeia de pesquisa
no for encontrado; encontrar() retornos - 1, enquanto
ndice() levanta uma ValueError:
Fora [20]: -1
<Ipython-input-21-4cbe6ee9b0eb> em <module> ()
- - - - > 1 line.index ( 'bear')
Fora [22]: 35
Para o caso especial de verificao para uma substring no incio ou no final de uma
string, Python fornece a comea com() e termina com()
mtodos:
Para ir um passo alm e substituir uma dada substring com uma nova string, voc
pode usar o substituir() mtodo. Aqui, vamos substituir
'Castanho' com ' vermelho':
Para uma abordagem mais flexvel para esse substituir() funcionalidade, veja a discusso de
expresses regulares em Padro flexvel correspondncia com expresses regulares na pgina
76 .
Se voc gostaria de encontrar uma substring e depois dividir a string com base em sua
localizao, o partio () e / ou Dividido() mtodos so o que voc est procurando. Ambos
retornar uma sequncia de subsequncias. o partio () mtodo retorna um tuplo com trs
elementos: a subcadeia antes do primeiro exemplo do ponto de diviso, a prpria diviso
ponto, e depois a subcadeia:
Um mtodo relacionado splitlines (), que divide a nova linha ters tersticas. Vamos fazer
isso com um haiku popularmente atribudo ao 17th- sculo poeta Matsuo Bash:
haiku . splitlines ()
Um padro comum usar o carcter especial \ n ( nova linha) para unir linhas que
tenham sido previamente divididos, e recuperar a entrada:
Matsushima-ya aah
Matsushima-ya-ya
matsushima
Cordas formato
Dentro [ 32 ]: pi = 3.14159
str ( pi )
Para formatos mais complicados, voc pode ser tentado a usar aritmtica seqncia, conforme
descrito no Basic Python Semntica: Operadores na pgina 17 :
Uma maneira mais flexvel de fazer isso usar seqncias de formato, que so sequncias com
marcadores especiais (observado por chaves), no qual vai ser inserido valores formatado
cordas. Aqui est um exemplo bsico:
Dentro [ 35 ]:
"" "Primeira letra:. {0} ltima carta:. {1}" "" . formato ( 'UMA' , 'Z' )
Se voc incluir uma seqncia, ele ir consultar a chave de qualquer argu- mento palavra-chave:
Dentro [ 36 ]:
"" "Primeiro: {primeiro} Last:.. {ltimo}" "" . formato ( ltimo = 'Z' , primeiro = 'UMA' )
Como antes, aqui a 0 refere-se ao ndice do valor a ser inserido. As marcas que:
cdigos de formato seguir. O . 3F codifica a preciso desejada: trs dgitos alm
do ponto decimal, formato de ponto flutuante.
Este estilo de especificao do formato muito flexvel, e os exemplos aqui apenas arranhar
a superfcie das opes de formatao disponveis. Para mais informaes sobre a sintaxe
destas cadeias de formato, consulte o
seo Format Specification de documentao on-line do Python.
Os mtodos de Python str Tipo dar-lhe um poderoso conjunto de ferramentas para formatao,
separao, e manipular dados de cadeia. Mas as ferramentas ainda mais poderosas esto
disponveis em built-in de Python expresso regular mdulo. As expresses regulares so um
tpico enorme; h livros inteiros escritos sobre o tema (incluindo Jeffrey EF Friedl do Dominando
Expresses Regulares, 3rd Edition ), Por isso vai ser difcil fazer justia dentro de apenas uma
nica subseo.
Meu objetivo aqui dar-lhe uma idia dos tipos de problemas que podem ser resolvidos usando
expresses regulares, bem como uma idia bsica de como us-los em Python. Vou sugerir
algumas referncias para ing aprendi- mais em Recursos para a aprendizagem posterior na
pgina 90 . Fundamentalmente, as expresses regulares so um meio de correspondncia de
padro flexvel em cordas. Se voc costuma usar a linha de comando, voc provavelmente est
familiarizado com este tipo de correspondncia flexvel com o Acter char- *, que atua como um
curinga. Por exemplo, podemos listar todos os cadernos IPy- thon (ou seja, arquivos com
extenso. ipynb) com Python em seu nome usando o curinga * para corresponder todos os
caracteres entre:
01-How-to-Run-Python-Code.ipynb 02-Basic-Python-Syntax.ipynb
Dentro [ 39 ]: importar r
regex = r . compilar ( '\ s +' )
regex . Dividido ( linha )
Aqui ns temos primeiro compilado uma expresso regular, em seguida, usou-o para Dividido uma
linha. Assim como Python Dividido() mtodo retorna uma lista de todas as cadeias sub entre espaos
em branco, a expresso regular Dividido() mtodo retorna uma lista de todos os substrings entre
partidas para o padro de entrada. Neste caso, a entrada \ s +: \ s um personagem especial que
personagem que indica um ou mais da entidade precedente. Assim, a expresso lar regula-
corresponde a qualquer subsequncia que consiste em um ou mais espaos. o Dividido() mtodo aqui
basicamente uma rotina convenincia construda sobre esta correspondncia de padro comportamento;
mais fundamental a
Gostar Dividido(), existem rotinas de convenincia semelhantes para encontrar o primeiro jogo (como
Com isso, podemos ver que o regex.search () mtodo funciona muito como str.index
() ou str.find ():
Fora [42]: 16
Fora [43]: 16
Com um pouco de pensamento, outras operaes de cadeia nativa tambm pode ser escalado como
expresses regulares.
Mas, voc pode perguntar, por que voc iria querer usar a sintaxe e bem acabado e
detalhado mais compli- de expresses regulares em vez dos mtodos de string mais
intuitiva e simples? A vantagem que as expresses regulares oferecem longe mais
flexibilidade.
Usando isso, se estamos dada uma linha de um documento, que pode rapidamente extrair coisas que se
Podemos fazer outras operaes, como substituir esses endereos de e-mail com uma outra
corda, talvez para esconder endereos na sada:
Finalmente, note que se voc realmente quer para combinar qualquer endereo de e-mail, a
expresso regular precedente muito simples. Por exemplo, s permite endereos feitas de
caracteres alfanumricos que terminam em um dos vrios sufixos comum de domnio. Assim,
por exemplo, o perodo utilizado aqui significa que s encontrar parte do endereo:
Isso vai mostrar como implacvel expresses regulares pode ser se voc no tiver cuidado! Se
voc pesquisar em torno on-line, voc pode encontrar algumas sugestes de expresses
regulares que ir corresponder todos e-mails vlidos, mas cuidado: eles so muito mais
envolvido do que o expres- simples usado aqui!
A sintaxe de expresses regulares muito grande um assunto para esta seo curta. Ainda assim,
um pouco de familiaridade pode percorrer um longo caminho: eu vou andar por algumas das
construes bsicas aqui, e em seguida, listar alguns recursos mais completos a partir do qual voc
pode aprender mais. Minha esperana que o seguinte cartilha rpida permitir que voc use esses
recursos de forma eficaz.
. ^ $ * +? {} [] \ | ()
Vamos discutir o significado de algumas delas momentaneamente. Enquanto isso, voc deve saber
que se voc gostaria de combinar qualquer um desses caracteres diretamente, voc pode escapar -los
com uma barra invertida:
o r prefaciar em R'\$' indica um string bruta; em strings em Python padro, a barra invertida
usado para indicar caracteres especiais. Por exemplo, um separador indicado por \ t:
abc
um \ tb \ tc
Por esta razo, sempre que voc usar barras invertidas em uma expres- regular, uma boa
prtica de usar uma corda crua.
Coloc-los juntos, podemos criar uma expresso regular que ir corresponder quaisquer duas
cartas / dgitos com espaos em branco entre eles:
Fora [54]: [ 'e f', 'x i', 's 9', 's o']
Descrio da personagem
Isto no uma lista ou descrio abrangente; para mais detalhes, consulte Python documentao
sintaxe de expresso regular .
qualquer conjunto de caracteres que voc est interessado em Por exemplo, o seguinte ir corresponder a
Da mesma forma, voc pode usar um trao para indicar um intervalo: por exemplo, [ az]
3. Por exemplo, voc pode precisar de extractos de documentos cdigos numricos especficos que
consistem em uma letra maiscula seguido por um dgito. Voc pode fazer isso da seguinte forma:
w \ w. Porque esta uma necessidade to comum, h uma sintaxe especfica para combinar chaves
* Corresponder a zero ou mais repeties de precedente ab * fsforos um, ab, abb, ABBB ...
+ combinar com um ou mais repeties da precedente ab + fsforos ab, abb, ABBB mas no uma
Se queremos agora modificar isso para que o endereo de email Obama partidas,
podemos faz-lo usando a notao de colchetes:
Ns mudamos \ w + para [\ w.] +, por isso vamos corresponder a qualquer caractere alfanumrico ou um
periodo. Com esta expresso mais flexvel, que pode coincidir com uma ampla gama de endereos
de e-mail (embora ainda no todos, voc pode identificar outras deficincias dessa expresso?).
parnteses indicam grupos extrair. Para express~oes regulares compostos como a nossa
correspondncia e-mail, muitas vezes deseja extrair as suas com- ponentes em vez do jogo
completo. Isso pode ser feito usando parnteses para grupo os resultados:
Como podemos ver, este agrupamento realmente extrai uma lista dos subcomponentes do
utilizando o (? P <name>) sintaxe, caso em que os grupos pode ser extrada como um dicionrio
Python:
Dentro [ 63 ]:
Combinando essas idias (bem como alguns dos poderosos imposto syn- regexp que ns
no cobrimos aqui) permite-lhe flexibilidade e rapidamente extrair informaes de strings
em Python.
Vamos dar uma breve olhada em cada um destes, por sua vez.
Ele fornece uma ndarray estrutura, que permite o armazenamento e a manipulao eficiente de
vetores, matrizes, e os conjuntos de dados de dimenso superior.
Ele fornece uma sintaxe legvel e eficiente para operar nesses dados, a partir de
aritmtica elemento-wise simples de operaes algbricas lineares mais complicados.
No caso mais simples, matrizes Numpy parecem muito com listas Python. Por exemplo, aqui
uma matriz que contm a gama de nmeros de 1 a 9 (compare isto com o Python do
embutido alcance()):
X = np . arange ( 1 , 10 )
X
matrizes de Numpy oferecer tanto o armazenamento eficiente de dados, bem como operaes
elemento-wise eficientes sobre os dados. Por exemplo, ao quadrado cada elemento da matriz, que
pode aplicar o operador ** para a matriz directamente:
Dentro [ 2 ]: X ** 2
Fora [2]: matriz ([1, 4, 9, 16, 25, 36, 49, 64, 81])
Ao contrrio de listas Python (que so limitadas a uma dimenso), matrizes Numpy pode ser
multidimensional. Por exemplo, aqui vamos reformular nossa X matriz em uma matriz de 3x3:
Dentro [ 4 ]: M = X . remodelar (( 3 , 3 ))
M
Uma matriz bidimensional uma representao de uma matriz, e NumPy sabe como
fazer eficientemente operaes de matriz tpico. Por exemplo, voc pode calcular a
transposta usando. T:
Dentro [ 5 ]: M . T
Dentro [ 6 ]: np . ponto ( M , [ 5 , 6 , 7 ])
Fora [7]:
matriz ([1.61168440e + 01, + 00 -1.11684397e, -1.30367773e-15])
Tal manipulao algbrica linear sustenta grande parte da anlise de dados moderna,
especialmente quando se trata de reas de aprendizado de mquina e minerao de dados.
Para mais informaes sobre NumPy, consulte recursos para mais ing aprendi- na pgina 90 .
Pandas um pacote muito mais novo do que NumPy, e de fato construdo em cima dela. O
Pandas fornece uma interface rotulados para multidimensional de dados sionais, na forma de
um objeto trama de dados que vai se sentir muito familiar aos usurios de R e lnguas
relacionadas. DataFrames em Pandas algo parecido com isto:
Dentro [ 8 ]:
A interface Pandas permite que voc faa coisas como selecionar colunas pelo nome:
Dentro [ 9 ]: df [ 'rtulo' ]
Fora [9]: 0 A
1 B
2 C
3 A
4 B
5 C
Fora [10]: 0 a
1 b
2 c
trs um
4 b
5 c
Nome: etiqueta, dtipo: objeto
Fora [11]: 21
Aqui em uma linha que temos calculado a soma de todos os objetos que compartilham o mesmo
rtulo, algo que muito mais detalhada (e muito menos eficiente), utilizando ferramentas
fornecidas no NumPy e Python ncleo. Para mais informaes sobre o uso Pandas, consulte os
recursos listados em
Recursos para a aprendizagem posterior na pgina 90 .
Para usar Matplotlib, podemos comear ativando o modo de notebook (para uso no
caderno Jupyter) e depois importar o pacote como PLT:
Dentro [ 14 ]:
Agora vamos criar alguns dados (como matrizes Numpy, claro) e traar os resultados:
Este o exemplo mais simples de uma trama Matplotlib; de ideias sobre a vasta gama de tipos de
grficos disponveis, consulte galeria de Matplotlib bem como outras referncias listadas em Recursos
para a aprendizagem posterior na pgina 90 .
SciPy uma coleo de funcionalidade cientfica que construdo sobre NumPy. O pacote
comeou como um conjunto de wrappers Python para bem bibliotecas Fortran conhecidos
para computao numrica, e cresceu a partir da. O pacote organizado como um conjunto
de sub-mdulos, cada um implementando alguma classe de algoritmos numricos. Aqui est
uma amostra incompleta de alguns dos mais importantes para ence dados Sci:
# plotar os resultados
plt . figura () # nova figura
plt . enredo ( X , y , 'O' )
plt . enredo ( x_interp , y_interp );
Construdo no topo destas ferramentas so uma srie de outros pacotes de cincia de dados, incluindo
Scikit-Imagem para anlise de imagem e StatsModels para eling Mod de estatstica, bem como
mais pacotes especficos de domnio como AstroPy para
No importa que tipo de problema cientfico, numrica ou estatstica que voc est enfrentando,
provvel que existe um pacote Python l fora que podem ajud-lo a resolv-lo.
Tentei cobrir as peas e padres na linguagem Python que ser mais til para um cientista
de dados utilizando Python, mas este no tem os meios sido uma introduo completa. Se
voc gostaria de ir mais fundo na compreenso da linguagem Python em si e como us-lo
de modo eficaz, aqui esto um punhado de recursos que eu recomendo:
Para cavar mais em ferramentas de Python para a cincia de dados e puting com- cientfico, eu
recomendo os seguintes livros:
Este livro aborda a biblioteca Pandas em detalhes, bem como dar informaes teis sobre
algumas das outras ferramentas que o permitem. Finalmente, para um olhar ainda mais amplo