Sei sulla pagina 1di 98

Um rpido tour de Python

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

Estados Unidos da Amrica.

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

esto disponveis para a maioria dos ttulos ( http://safaribooksonline.com ). Para mais

em formao, entre em contato com o nosso corporate / institucional Departamento de vendas:

800-998-9938 ou corporate@oreilly.com.

Editor: Dawn Schanafelt Designer de interiores: David Futato

Editor de produo: Kristen Brown Cover Designer: Karen Montgomery


Editor de cpia: Jasmine Kwityn ilustrador: Rebecca Demarest

Agosto 2016: Primeira edio

Histrico de reviso para a primeira edio

2016/08/10: First Release

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

Um rpido tour de Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1


Introduo 1
Usando exemplos de cdigo 2
Como executar o cdigo Python 5
Uma excurso rpida de Python Linguagem Sintaxe 7
Bsicos Python Semntica: Variveis e objetos 13
Bsicos Python Semntica: Operadores 17
Tipos built-in: valores simples 24
Built-In Estruturas de Dados 30
Controle de fluxo 37
Definindo e usando funes 41
Erros e Excees 45
Iterators 52
compreenses lista 58
geradores 61
Mdulos e Pacotes 66
Manipulao de corda e Expresses Regulares 69
A pr-visualizao de Ferramentas Cincia Dados 84
Recursos para a aprendizagem futura 90

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.

O apelo do Python na sua simplicidade e beleza, bem como a convenincia do grande


ecossistema de ferramentas especficas de domnio que foram construdas em cima dela.
Por exemplo, a maioria do cdigo Python em computao e dados cincia cientfico
construdo em torno de um grupo de pacotes maduros e teis:

NumPy fornece armazenamento eficiente e computao de matrizes de dados


multidimensionais.

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

para manipular, filtro, grupo, e transformar os dados.

matplotlib proporciona uma til interface para criao de


parcelas publicao de qualidade e figuras.

Scikit-learn fornece um conjunto de ferramentas uniforme para a aplicao de algoritmos de

aprendizagem de mquina comum aos dados.

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.

No menos importantes so as inmeras outras ferramentas e pacotes que acompanham estes:


se houver uma tarefa de anlise cientfica ou dados que voc deseja executar, as chances so
de algum escreveu um pacote que vai fazer isso por voc.

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.

Usando exemplos de cdigo


material suplementar (exemplos de cdigo, cadernos ipython, etc.) est disponvel para
download em https://github.com/jakevdp/WhirlwindTour OfPython / .

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.

2 | Um rpido tour de Python


Respondendo a uma pergunta citando este livro e citando exemplo de cdigo no
exige permisso. Incorporar uma quantidade significativa de cdigo de exemplo
deste livro na documentao do seu produto requer permisso.

Agradecemos, mas no exigimos, atribuio. Uma atribuio normal- aliado inclui


o ttulo, autor, editora e ISBN. Por exemplo: " Um rpido tour de Python por Jake
VanderPlas (O'Reilly). Copyright 2016 O'Reilly Media, Inc., 978-1-491-96465-1.

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 .

Instalao e Consideraes Prticas


Instalando Python eo conjunto de bibliotecas que permitem computao cientfica
simples se voc usa o Windows, Linux ou Mac OS X. Esta seo ir descrever
algumas das consideraes ao configurar seu computador.

Python 2 versus 3 Python

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.

Instalao com Conda

Apesar de existirem vrias maneiras de instalar o Python, o que eu gostaria de


sugerir-especialmente se voc deseja, eventualmente, usar as ferramentas da cincia dados
mencionados anteriormente, atravs do cross-platform Anaconda distri- buio. Existem dois
tipos de distribuio Anaconda:

Usando exemplos de cdigo| 3


Miniconda d-lhe o interpretador Python em si, juntamente com uma ferramenta de linha de

comando chamado Conda que funciona como um gerenciador de pacotes multi-plataforma

voltada para pacotes Python, semelhante em esprito apto ou yum ferramentas que os usurios

do Linux pode estar familiarizado com.

jibia inclui tanto Python e Conda, e, adicionalmente, agrupa um conjunto de


outros pacotes pr-instalados voltados para computao cientfica.

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 comear, faa o download e instalar o pacote-certifique-se de escolher uma


verso com Python Miniconda 3 e, em seguida, instalar o pacote notebook IPython:

[~] $ Conda instalar ipython-notebook

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:

Dentro [ 1 ]: importar esta

O Zen de Python, por Tim Peters

Bonito melhor que feio. Explcito melhor que


implcito. Simples melhor que complexo. Complexo
melhor do que complicada. Plano melhor que
aninhado.

4 | Um rpido tour de Python


Escassa melhor que denso. contagens
de legibilidade.
Casos especiais no so especiais o suficiente para quebrar as regras. Embora
praticidade bate pureza. Erros nunca deve passar em silncio. A menos que
explicitamente silenciados.

Em face da ambigidade, recuse a tentao de adivinhar. Deve haver um - e


preferencialmente s um - modo bvio
para faz-lo.
Apesar de que maneira pode no ser bvio primeira vista, a menos
voc seja holands. Agora
melhor do que nunca.
Embora nunca tenha sido muitas vezes melhor do que * direito * agora. Se a implementao
difcil de explicar, uma m idia. Se a implementao fcil de explicar, pode ser uma boa
idia. Namespaces so uma grande idia buzinando - vamos fazer mais daqueles!

Com isso, vamos comear nossa excurso da linguagem Python.

Como executar o cdigo Python


Python uma linguagem flexvel, e h vrias maneiras de us-lo, dependendo da
sua tarefa particular. Uma coisa que distingue Python a partir de outras linguagens
de programao que interpretado
ao invs de compilado. Isso significa que ele executado linha por linha, que permite a
programao para ser interativo de uma forma que no diretamente possvel com
linguagens compiladas como Fortran, C ou Java. Esta seo ir descrever quatro maneiras
principais que voc pode executar cdigo Python: o interpretador Python, a intrprete IPython, atravs
da autnomo roteiros, ou na notebook Jupyter.

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 ...
>>>

Como executar o cdigo Python| 5


Com o interpretador em execuo, voc pode comear a digitar e executar trechos de
cdigo. Aqui ns vamos usar o interpretador como uma calculadora simples, realizar
clculos e atribuir valores s variveis:

>>> 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.

IPython 4.0.0 - Um Python interativo reforada. ?


- > Introduo e viso geral dos recursos do ipython.
% QuickRef -> Referncia rpida. Socorro
- > prprio sistema de ajuda do Python.
objeto? -> Detalhes sobre 'objeto', use 'objeto ??' para adicional ...

Em 1]:

A principal diferena esttica entre o interpretador e o interpretador IPython reforada


encontra-se em linha de comandos: Python usa >>> por padro, enquanto IPython utilizaes
numerados mandos com- (por exemplo, Em 1]:). Independentemente disso, podemos executar
cdigo linha por linha, assim como fizemos antes:

Dentro [ 1 ]: 1 + 1
Fora [ 1 ]: 2

Dentro [ 2 ]: X = 5

Dentro [ 3 ]: X * 3
Fora [ 3 ]: 15

6 | Um rpido tour de Python


Note-se que da mesma maneira que a entrada numerada, a sada de cada com- mand
numerado como bem. IPython torna disponvel uma grande variedade de caractersticas teis; para
algumas sugestes sobre onde para ler mais, veja
Recursos para a aprendizagem posterior na pgina 90 .

scripts Python auto-suficientes

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

pton nome do arquivo no prompt de comando:

$ Test.py python
Correndo test.py
Resultado 15

Para programas mais complicados, a criao de scripts independentes como este uma
obrigao.

O notebook Jupyter

Um hbrido til do terminal interactivo, e o script auto-contido, a notebook Jupyter, um


formato de documento que permite que o cdigo exe- cutable, texto formatado, grficos e
recursos interativos, mesmo para ser combinadas em um nico documento. Embora o
notebook comeou como um formato somente Python, que desde ento tem sido feito
compatvel com um grande nmero de linguagens de programao, e agora uma parte
essencial da Projeto Jupyter . O notebook til tanto como um ambiente de desen- volvimento
e como um meio de compartilhar o trabalho via ricas narrativas tational e data-driven
computaes que misturam cdigo, nmeros, dados e texto.

Uma excurso rpida de Python Linguagem Sintaxe


Python foi originalmente desenvolvido como uma lngua de ensino, mas a sua facilidade
de uso e sintaxe limpa a levaram a ser abraado por iniciantes e experts. A limpeza da
sintaxe do Python levou alguns a cham

Uma excurso rpida de Python Linguagem Sintaxe


| 7
-lo pseudo-cdigo executvel, e na verdade a minha prpria experincia tem sido que muitas vezes
muito mais fcil de ler e entender um script Python do que ler um script semelhante escrito em,
digamos, C. Aqui ns vamos comear a discutir as principais caractersticas do sintaxe do Python.

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:

Dentro [ 1 ]: # definir o ponto mdio


ponto mdio = 5

# fazer duas listas vazias


mais baixo = []; superior = []

# dividir os nmeros no inferior e superior


para Eu dentro alcance ( 10 ):

E se ( Eu < ponto mdio ):

mais baixo . acrescentar ( Eu )

outro :
superior . acrescentar ( Eu )

impresso ( " mais baixo:" , mais baixo )

impresso ( " superior:" , superior )

inferior: [0, 1, 2, 3, 4] superior: [5,


6, 7, 8, 9]

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 so marcados por #

O roteiro comea com um comentrio:

# definir o ponto mdio

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

8 | Um rpido tour de Python


Python no tem nenhuma sintaxe para comentrios de vrias linhas, como o / * ... * / Sintaxe usada
em C e C ++, embora cordas de vrias linhas so muitas vezes utilizados como um substituto para
comentrios de vrias linhas (mais sobre isso em Manipulao de Cordas e expresses regulares
na pgina 69 ).

End-of-Line Termina uma Declarao

A prxima linha no script

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 \

marcador para indicar o seguinte:

Dentro [ 2 ]: X = 1 + 2 + 3 + 4 + \
5+6+7+8

Tambm possvel continuar expresses na linha seguinte entre parnteses,


sem usar o \ marcador:

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).

Ponto e vrgula pode, opcionalmente, encerrar uma instruo

s vezes pode ser til para colocar vrias instrues em uma nica linha. A
prxima parte do script :

mais baixo = []; superior = []

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

totalmente equivalente escrita:

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.

Uma excurso rpida de Python Linguagem Sintaxe


| 9
Recuo: Matters espaos em branco!

Em seguida, chegamos ao bloco principal de cdigo:

para Eu dentro alcance ( 10 ):

E se Eu < ponto mdio :

mais baixo . acrescentar ( Eu )

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 talvez a caracterstica mais controversa da sintaxe do Python: espao em branco

significativo! Em linguagens de programao, um quadra de cdigo um conjunto de instrues

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 ++ ) {

// chaves indicam bloco de cdigo


total + = Eu ; }

Em Python, blocos de cdigo so indicados por recuo:

para Eu dentro alcance ( 100 ):

# indentao indica bloco de cdigo


total + = 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:

> > > E se X < 4 : > > > E se X < 4 :


... y=X*2 ... y=X*2
... impresso ( X ) ... impresso ( X )

No trecho esquerda, impresso (x) no bloco recuado, e somente se, ser


executado X menos do que 4. No trecho direita,
impresso (x) est fora do bloco, e ser executado independentemente do valor de x!

10 | Um rpido tour de Python


uso de espao em branco significativo de Python muitas vezes surpreendente pr grammers
que esto acostumados a outras lnguas, mas na prtica isso pode levar a cdigo muito mais
consistente e legvel do que as lnguas que no aplicam recuo dos blocos de cdigo. Se voc
encontrar o uso de desagradvel espao em branco do Python, eu encoraj-lo a dar-lhe uma
tentativa: como eu fiz, voc pode achar que voc vir a apreci-lo. Finalmente, voc deve estar
ciente de que o montante de espaos em branco utilizado para recuar blocos de cdigo cabe ao
usurio, enquanto ele consistente em todo o script. Por conveno, a maioria dos guias de
estilo recomendar para recuar blocos de cdigo por quatro espaos, e que a conveno vamos
seguir neste relatrio. Note-se que muitos editores de texto como o Emacs e Vim contm modos
de Python que fazer quatro espao de recuo automatica- mente.

whitespace Dentro Linhas no importa


Enquanto o mantra de espao em branco significativo vale para o espao white- antes linhas (que
indicam um cdigo de bloco), um espao em branco dentro
no linhas de cdigo Python no importa. Por exemplo, todos os trs destas expresses so
equivalentes:

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 .

Uma excurso rpida de Python Linguagem Sintaxe


| 11
Os parnteses so para agrupar ou Chamar

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:

Dentro [ 6 ]: impresso ( ' primeiro valor:' , 1 )

primeiro valor: 1

Dentro [ 7 ]: impresso ( ' segundo valor:' , 2 )

segundo valor de: 2

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.

Uma nota sobre a impresso Function ()


o impresso() funo uma pea que tenha mudado entre duas Python. X e Python 3. x. Em
Python 2, impresso comportado como uma ment-que State- , voc poderia escrever:

# 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:

12 | Um rpido tour de Python


# Python 3 s!
> > > impresso ( " primeiro valor:" , 1 )
primeiro valor : 1

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.

Terminando e Aprender Mais


Esta tem sido uma muito breve explorao das caractersticas essenciais da sintaxe Python;
o seu objectivo dar-lhe um bom quadro de referncia para quando voc estiver lendo o
cdigo em sees posteriores. Vrias vezes ns mencionamos Python guias de estilo, que
podem ajudar as equipes a escrever cdigo em um estilo consistente. O guia de estilo mais
amplamente usado em Python conhecido como PEP8, e podem ser encontradas em https:
// www.python.org/dev/peps/pep-0008/ . Quando voc comea a escrever mais cdigo
Python, que seria til para ler este! gestes O estilo suge- conter a sabedoria de muitos
gurus Python, ea maioria das gestes suge- ir alm da simples pedantismo: so
recomendaes baseadas na experincia que podem ajudar a evitar erros sutis e erros em
seu cdigo.

Bsicos Python Semntica: Variveis e objetos


Esta seco vai comear a cobrir a semntica bsicos da linguagem Python. Ao contrrio
do sintaxe coberto na seco anterior, o semntica de uma linguagem envolvem o
significado das declaraes. Tal como acontece com a nossa discusso da sintaxe, aqui
vamos visualizar algumas das construes semnticas essenciais em Python para dar-lhe
um melhor quadro de referncia para a compreenso do cdigo nas sees seguintes.

Esta seo ir cobrir a semntica variveis e objetos, que so as principais formas de


armazenar, de referncia, e operar em dados dentro de um script Python.

As variveis em Python so ponteiros

Atribuindo variveis em Python to fcil como colocar um nome de varivel esquerda do


sinal de igual (=):

Bsicos Python Semntica: Variveis e objetos | 13


# atribuir 4 para a varivel X
X=4

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.

Em muitas linguagens de programao, variveis so melhor pensado como contentores ou baldes


em que voc colocar os dados. Assim, em C, por exemplo, quando voc escreve

// 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

ponteiros. Assim, em Python, quando voc escreve

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:

Dentro [ 1 ]: X = 1 # x um nmero inteiro


X = 'Ol' # agora x uma string
X = [ 1 , 2 , 3 ] # agora x uma lista

Enquanto os usurios de linguagens de tipagem esttica pode perder o tipo de segurana que vem com

declaraes como aquelas encontradas em C,

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

14 | Um rpido tour de Python


Ns criamos duas variveis X e y que ambos apontam para o mesmo objecto. Devido a isso,
se ns modificar a lista atravs de um de seus nomes, vamos ver que a lista de outros ser
modificado assim:

Dentro [ 3 ]: impresso ( y )

[1, 2, 3]

Dentro [ 4 ]: X . acrescentar ( 4 ) # anexar 4 lista apontada pelo x


impresso ( y ) # lista de y modificado, bem!

[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

objetos, em seguida, esse comportamento faz sentido.

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:

Dentro [ 5 ]: X = 'algo mais'


impresso ( y ) # y inalterado

[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

impresso ( " x =" , X )


impresso ( " y =" , y )

x = 15 y
= 10

Quando chamamos x + = 5, no estamos modificando o valor da 5 objeto apontado por x,


mas ns estamos mudando o objeto ao qual X

Bsicos Python Semntica: Variveis e objetos | 15


pontos. Por esta razo, o valor de y no afetado pela o opera-.

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 )

Fora [7]: int

Dentro [ 8 ]: X = 'Ol'
tipo ( X )

Fora [8]: str

Dentro [ 9 ]: X = 3.14159
tipo ( X )

Fora [9]: float

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

lista, e acessado atravs da sintaxe de ponto (.):

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

16 | Um rpido tour de Python


exemplo, tipos numricos tm um real e imag atributo que devolver a parte real e
imaginria do valor, se visto como um nmero complexo:

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 ()

Fora [12]: Falso

Dentro [ 13 ]: X = 4.0
X . is_integer ()

Fora [13]: True

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:

Dentro [ 14 ]: tipo ( X . is_integer )

Fora [14]: builtin_function_or_method

Ns vamos descobrir que a escolha de design tudo--objeto de Python permite algumas


construes de linguagem muito conveniente.

Bsicos Python Semntica: Operadores


Na seo anterior, comeamos a olhar para a semntica das variveis em Python e
objetos; aqui ns vamos cavar a semntica dos vrios
operadores includo na lngua. At o final desta seo, voc ter as ferramentas bsicas
para comear a comparar e operando em dados em Python.

Operaes aritimticas

Python implementa sete operadores aritmticos binrios bsicos, dois dos quais pode
dobrar como operadores unrios. Eles esto resumidos na tabela a seguir:

Bsicos Python Semntica: Operadores | 17


Nome do operador Descrio

a + b Adio Soma de uma e b

a-b Subtrao diferena de uma e b

a * b Multiplicao Product of uma e BA / b

A verdadeira diviso quociente de uma e b

a // b diviso cho quociente de uma e b, a remoo de peas fraccionais

a% b Mdulo Resto da diviso de uma de b

uma b ** exponenciao uma elevado potncia de b

- uma Negao A negativo de uma

+uma alm unrio uma inalterados (raramente usado)

Estes operadores podem ser usados e combinados em maneiras intuitivos, usando parnteses
padro para as operaes de grupo. Por exemplo:

Dentro [ 1 ]: # adio, subtraco, multiplicao


( 4 + 8 ) * ( 6,5 - 3 )

Fora [1]: 42,0

diviso piso verdadeira diviso com fraes truncado:

Dentro [ 2 ]: # A verdadeira diviso

impresso ( 11 / 2 )

5.5

Dentro [ 3 ]: # diviso cho


impresso ( 11 // 2 )

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.

Finalmente, vou mencionar que um operador aritmtico oitavo foi adicionado no


Python 3.5: o a @ b operador, que se destina a indicar o
produto matriz do uma e b, para uso em vrios pacotes de lgebra linear.

Operaes bit a bit

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-

18 | Um rpido tour de Python


es, mas til saber que eles existem. tores a seis bit a bit ope- esto
resumidos na tabela seguinte:

Nome do operador Descrio

a & b Bit a bit e bits definido em ambas uma e ba | b OR bit a bit

Os bits definido na uma ou b ou ambos

uma b ^ XOR bits definidos na uma ou b mas no ambos

a << b mudana pouco esquerda


Mudar pedaos de uma deixada por b unidades

a >> b Bit mudar pedaos de deslocamento para a direita uma junto b unidades

~a bit a bit NO Bit a bit negao da uma

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 )

Fora [4]: '0b1010'

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

Da mesma forma, podemos escrever:

Dentro [ 5 ]: caixa ( 4 )

Fora [5]: '0b100'

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 )

Fora [7]: '0b1110'

Estes operadores bit a bit no so to imediatamente til como os operadores aritmticos


Dard Standards, mas til para v-los pelo menos uma vez para entender o que classe de
operao que ele realizar. Em particular, os usurios de outras lnguas so por vezes
tentados a usar XOR (ou seja,
a ^ b) quando eles realmente querem dizer exponenciao (ie, um ** b).

Bsicos Python Semntica: Operadores | 19


Operaes de atribuio

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

anteriormente. Por exemplo, para adicionar 2 a uma ns escrevemos:

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:

Dentro [ 10 ]: uma + = 2 # equivalente a a = a + 2


impresso ( uma )

26

H um operador de atribuio aumentada correspondente a cada um dos operadores binrios


listados anteriormente; em resumo, so eles:

a + = ba - = ba * = ba / = ba // = ba% = ba ** = ba

& = ba | = ba ba ^ = << = ba >> = b

Cada um equivalente operao correspondente, seguido de atribuio: isto , para


qualquer operador #, a expresso um # = b equivalente a A = A # b, com um ligeiro
captura. Para objetos mutveis como listas, matrizes ou DataFrames, essas operaes
atribuio ampliada so realmente sutilmente diferente do que suas contrapartes mais
detalhado: eles modificam o contedo do objeto original em vez de criar um novo objeto
para armazenar o resultado.

Operaes de comparao

Outro tipo de operao que pode ser muito til a comparao de valores diferentes.
Para isso, Python implementa comparao padro

20 | Um rpido tour de Python


operadores, que retornam valores booleanos Verdade e Falso. As operaes de com- parao
esto listados na tabela a seguir:

operao Descrio

um == ba igual a ba! = ba no

igual a ba <b

uma menos que ba>

b uma Melhor que ba <= ba menos

que ou igual a ba> = ba maior do que ou

igual a b

Estes operadores de comparao pode ser combinada com os operadores aritmticos e


bitwise para expressar uma gama praticamente ilimitada de testes para os nmeros. Por
exemplo, podemos verificar se um nmero mpar, verificando que o mdulo com 2 retorna
1:

Dentro [ 11 ]: # 25 impar
25 % 2 == 1

Fora [11]: True

Dentro [ 12 ]: # 66 impar
66 % 2 == 1

Fora [12]: Falso

Podemos encadear mltiplas comparaes para verificar relaes cado mais


compli-:

Dentro [ 13 ]: # verificar se uma entre 15 e 30


uma = 25 15 < uma < 30

Fora [13]: True

E, s para fazer sua cabea doer um pouco, d uma olhada nesta filho compara-:

Dentro [ 14 ]: - 1 == ~ 0

Fora [14]: True

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.

Bsicos Python Semntica: Operadores | 21


Operaes booleanas

Ao trabalhar com valores booleanos, Python fornece operadores para combinar os


valores usando os conceitos padro de e, ou, e no. Previsivelmente, esses
operadores so expressas usando as palavras
e, ou, e no:

Dentro [ 15 ]: X = 4
(X<6)e(X>2)

Fora [15]: True

Dentro [ 16 ]: ( X > 10 ) ou ( X % 2 == 0 )

Fora [16]: True

Dentro [ 17 ]: no ( X < 6 )

Fora [17]: Falso

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:

Dentro [ 18 ]: # ( x> 1) xor (x <10)


( X > 1 ) ! = ( X < 10 )

Fora [18]: Falso

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.

Operadores de identidade e de filiao

Gostar e, ou, e no, Python tambm contm operadores de prosa-like para verificar
identidade e filiao. Eles so os seguintes:

22 | Um rpido tour de Python


Operador Descrio

ab verdadeiro se uma e b so objectos idnticos

um no B verdadeiro se uma e b no so objetos idnticos

um em b verdadeiro se uma um membro de b

um no em b verdadeiro se uma no um membro da b

operadores de identidade: e no

Os operadores de identidade, e no , verificar se h identidade do objeto.


identidade do objeto diferente de igualdade, como podemos ver aqui:

Dentro [ 19 ]: uma = [ 1 , 2 , 3 ]
b=[1,2,3]

Dentro [ 20 ]: uma == b

Fora [20]: True

Dentro [ 21 ]: uma b

Fora [21]: Falso

Dentro [ 22 ]: uma no b

Fora [22]: True

O que objetos idnticos parece? Aqui est um exemplo:

Dentro [ 23 ]: uma = [ 1 , 2 , 3 ]
b = aa b

Fora [23]: True

A diferena entre os dois casos que no primeiro, uma e b


aponta para objetos diferentes, enquanto que no segundo eles apontam para o mesmo
objecto. Como vimos na seo anterior, as variveis em Python so ponteiros. o operador
verifica se as duas variveis esto apontando para o mesmo recipiente (objeto), em vez de
se referindo ao que o recipiente contm. Com isto em mente, na maioria dos casos que um
iniciante tentado a usar , o que eles realmente querem dizer ==.

operadores de associao

operadores adeso verificar a adeso dentro objetos compostos. Assim, por


exemplo, podemos escrever:

Dentro [ 24 ]: 1 dentro [ 1 , 2 , 3 ]

Fora [24]: True

Bsicos Python Semntica: Operadores | 23


Dentro [ 25 ]: 2 no em [ 1 , 2 , 3 ]

Fora [25]: Falso

Estas operaes de associao so um exemplo do que faz Python to fcil de usar


em comparao com linguagens de baixo nvel, como C. Em C, a adeso seria
geralmente ser determinado por manualmente con- structing um loop sobre a lista e
verificando a igualdade de cada valor. Em Python, basta digitar o que voc quer
saber, de forma niscent remi- da prosa Ingls simples.

Tipos built-in: valores simples


Ao discutir as variveis em Python e objetos, mencionamos o fato de que todos os
objetos Python tm informaes de tipo anexado. Aqui ns vamos brevemente percorrer
os tipos simples internos oferecidos pelo Python. Dizemos tipos simples para
contrastar com vrios tipos de compostos, que sero discutidos na seo seguinte. tipos
simples do Python esto resumidos na Tabela 1-1 .

Tabela 1-1. tipos Python escalares

Tipo Exemplo Descrio

int x=1 Inteiros (isto , nmeros inteiros)

flutuador x = 1,0 nmeros de ponto flutuante (isto , nmeros reais)

complexo x = 1 + 2j Os nmeros complexos (ie, nmeros com uma parte real e imaginria)

bool x = True Boolean: Verdadeiro / Falso valores

str x = 'ABC' String: caracteres ou texto

NoneType x = Nenhum nulos especiais objeto indicando

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 )

Fora [1]: int

inteiros Python so realmente um pouco mais sofisticado do que inteiros em linguagens como
C. inteiros C so fixadas com preciso, e normalmente

24 | Um rpido tour de Python


estouro em algum valor (muitas vezes perto de 2 31 ou 2 63, dependendo do seu sis- tema). inteiros
Python so variveis de preciso, de modo que voc pode fazer computaes que transbordam em
outros idiomas:

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

Fora [3]: 2,5

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

Finalmente, note que, embora Python 2. X ambos tinham um int e longo


Tipo, Python 3 combina o comportamento destes dois em um nico int
tipo.

Nmeros de ponto flutuante

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

Tipos built-in: valores simples | 25


Na notao exponencial, o e ou E pode ser lido ... vezes dez elevado ..., de modo que 1.4e6
interpretado como 1,4 10 6.

Um inteiro pode ser explicitamente convertido a um flutuador com a flutuador


construtor:

Dentro [ 7 ]: flutuador ( 1 )

Fora [7]: 1,0

preciso de ponto flutuante

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:

Dentro [ 8 ]: 0,1 + 0,2 == 0,3

Fora [8]: Falso

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:

Dentro [ 9 ]: impresso ( " 0,1 {= 0: .17f}" . formato ( 0,1 ))


impresso ( " 0,2 {= 0: .17f}" . formato ( 0,2 ))
impresso ( " 0,3 = {0: .17f}" . formato ( 0,3 ))

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:

1/8 = 1 10- 1 + 2 10- 2 + 5 10- 3

No familiarizado base-10 representao, ns representamos esta na expresso


decimal familiar: 0,125.

Computadores geralmente armazenar valores em notao binria, de modo que cada nmero expresso

como uma soma de potncias de 2:

1/8 = 0 2- 1 + 0 2- 2 + 1 2- 3

26 | Um rpido tour de Python


Em uma representao base-2, podemos escrever este 0,001 2, onde o script sub- 2 indica
notao binria. O valor de 0,125 = 0,001 2 passa a ser um nmero que notao e binria
de decimal pode represen- reenviado em um nmero finito de dgitos.

No familiarizado base-10 representao de nmeros, voc provavelmente est familiarizado


com nmeros que no podem ser expressos em um nmero finito de dgitos. Por exemplo,
dividindo 1 por 3 d, em decimal padro nota- o:

1/3 = 0,333333333 ...

Os 3s continuar para sempre, isto , para representar verdadeiramente este quociente, o nmero de

dgitos necessrios infinito!

Da mesma forma, h um nmero para o qual representaes binrias requerem um


nmero infinito de dgitos. Por exemplo:

1/10 = ,00011001100110011 ... 2

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

igualdade exatas com valores de ponto flutuante.

Nmeros complexos

Os nmeros complexos so nmeros com (ponto flutuante) partes reais e imaginrias.


Ns vimos nmeros inteiros e reais antes; podemos us-los para construir um nmero
complexo:

Dentro [ 10 ]: complexo ( 1 , 2 )

Fora [10]: (1 + 2j)

Alternativamente, podemos usar o j sufixo em expresses para indicar a parte imaginria:

Dentro [ 11 ]: 1 + 2j

Fora [11]: (1 + 2j)

Tipos built-in: valores simples | 27


Os nmeros complexos tm uma variedade de atributos interessantes e mto- dos que vamos
brevemente demonstram aqui:

Dentro [ 12 ]: c = 3 + 4j

Dentro [ 13 ]: c . real # parte real

Fora [13]: 3,0

Dentro [ 14 ]: c . imag # parte imaginria

Fora [14]: 4.0

Dentro [ 15 ]: c . conjugado () # conjugado complexo

Fora [15]: (3-4j)

Dentro [ 16 ]:

abs ( c ) # magnitude - isto , sqrt (c.real ** 2 + c.imag ** 2)

Fora [16]: 5.0

tipo String
Strings em Python so criados com aspas simples ou duplas:

Dentro [ 17 ]: mensagem = "do que voc gosta?"


resposta = 'Spam'

Python tem muitas funes de cadeia extremamente teis e mtodos; aqui esto algumas
delas:

Dentro [ 18 ]: # comprimento de corda


len ( resposta )

Fora [18]: 4

Dentro [ 19 ]: # Faa maisculas. Veja tambm str.lower ()


resposta . superior ()

Fora [19]: 'spam'

Dentro [ 20 ]: # Capitalizar. Veja tambm str.title ()


mensagem . capitalizar ()

Fora [20]: 'O que voc gosta?'

Dentro [ 21 ]: # concatenao com +


mensagem + resposta

Fora [21]: 'o que voc gosta de spam'

Dentro [ 22 ]: # multiplicao mltiplo concatenao


5 * resposta

Fora [22]: 'spamspamspamspamspam'

28 | Um rpido tour de Python


Dentro [ 23 ]: # caracteres individuais de acesso (baseado em zero de indexao)
mensagem [ 0 ]

Fora [23]: 'w'

Para mais discusso de indexao em Python, veja Listas na pgina 31 .

Nenhum Tipo

Python inclui um tipo especial, o NoneType, que tem apenas um valor possvel gle pecado: Nenhum.
Por exemplo:

Dentro [ 24 ]: tipo ( Nenhum )

Fora [24]: NoneType

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:

Dentro [ 25 ]: valor de retorno = impresso ( ' abc' )

abc

Dentro [ 26 ]: impresso ( valor de retorno )

Nenhum

Da mesma forma, qualquer funo em Python sem valor de retorno , na realidade, voltando Nenhum.

Tipo booleano

O tipo booleano um tipo simples com dois valores possveis: Verdade e


Falso, e devolvida por operadores de comparao discutidos estru- amente:

Dentro [ 27 ]: resultado = ( 4 < 5 )


resultado

Fora [27]: True

Dentro [ 28 ]: tipo ( resultado )

Fora [28]: bool

Tenha em mente que os valores booleanos so case-sensitive: diferentemente de outras


linguagens, Verdade e Falso deve ser capitalizado!

Dentro [ 29 ]: impresso ( Verdade , Falso )

Verdadeiro falso

Tipos built-in: valores simples | 29


Booleanos tambm pode ser construdo usando o booleano () objeto tor construtivo: valores de
qualquer outro tipo pode ser convertido para Boolean via regras previsveis. Por exemplo,
qualquer tipo numrico False se igual a zero, e Verdadeiro de outra forma:

Dentro [ 30 ]: bool ( 2014 )

Fora [30]: True

Dentro [ 31 ]: bool ( 0 )

Fora [31]: Falso

Dentro [ 32 ]: bool ( 3,1415 )

Fora [32]: True

A converso de booleano Nenhum sempre falso:

Dentro [ 33 ]: bool ( Nenhum )

Fora [33]: Falso

Para strings, booleano (s) False para cadeias vazias e verdadeiro, caso contrrio:

Dentro [ 34 ]: bool ( "" )

Fora [34]: Falso

Dentro [ 35 ]: bool ( "abc" )

Fora [35]: True

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 ])

Fora [36]: True

Dentro [ 37 ]: bool ([])

Fora [37]: Falso

Built-In Estruturas de Dados


Vimos tipos simples do Python: int, float, complexo, bool, str,
e assim por diante. Python tambm tem vrios tipos de compostos embutidos, que actuam como recipientes

para outros tipos. Estes tipos de compostos so os seguintes:

Tipo Exemplo Nome Descrio

Lista [1, 2, 3] coleo ordenada

tuple (1, 2, 3) coleo ordenada imutvel

30 | Um rpido tour de Python


Tipo Exemplo Nome Descrio

dict { 'A': 1, 'b': 2, 'c': 3} Desordenada (, valor de chave) mapeamento

conjunto {1, 2, 3} coleo desordenada de valores exclusivos

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:

Dentro [ 2 ]: # Comprimento de uma lista

len ( eu )

Fora [2]: 4

Dentro [ 3 ]: # Acrescentar um valor para a extremidade

eu . acrescentar ( 11 )

eu

Fora [3]: [2, 3, 5, 7, 11]

Dentro [ 4 ]: # Alm concatena listas


eu + [ 13 , 17 , 19 ]

Fora [4]: [2, 3, 5, 7, 11, 13, 17, 19]

Dentro [ 5 ]: # sort () tipos de mtodos in-place


eu = [ 2 , 5 , 1 , 6 , 3 , 4 ]
eu . ordenar ()

eu

Fora [5]: [1, 2, 3, 4, 5, 6]

Alm disso, h muitos mais mtodos lista interna; eles so bem-coberto de


Python de documentao on-line .

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:

Built-In Estruturas de Dados | 31


Dentro [ 6 ]: eu = [ 1 , 'dois' , 3,14 , [ 0 , 3 , 5 ]]

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

vamos explorar no prximo.

indexao lista e corte

Python fornece acesso aos elementos em tipos de compostos atravs


indexao para os elementos individuais, e fatiamento por mltiplos elementos. Como veremos,
ambos so indicados por uma sintaxe de colchetes. Suponha que voltar a nossa lista dos primeiros
vrios primos:

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

Voc pode visualizar esse esquema de indexao desta forma:

32 | Um rpido tour de Python


Aqui valores na lista so representados por grandes nmeros nas praas; ndices de
listas so representados por pequenos nmeros acima e abaixo. Nesse caso, G [2] retornos
5, porque este o prximo valor no ndice 2.

Onde indexao um meio de buscar um nico valor a partir da lista,


fatiamento um meio de acesso a vrios valores de sub-listas. Ele usa um clon para indicar o
ponto de incio (inclusive) e ponto final (no includo) da sub-disposio. Por exemplo, para
conseguir os trs primeiros ele- mentos da lista, podemos escrev-lo da seguinte forma:

Dentro [ 12 ]: eu [ 0 : 3 ]

Fora [12]: [2, 3, 5]

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 ]

Fora [13]: [2, 3, 5]

Da mesma forma, se deixar de fora o ltimo ndice, o padro o comprimento da lista. Assim, os trs

ltimos elementos podem ser acessados da seguinte forma:

Dentro [ 14 ]: eu [ - 3 :]

Fora [14]: [5, 7, 11]

Finalmente, possvel especificar uma terceira nmero inteiro que representa a dimenso do passo; por

exemplo, para selecionar cada segundo elemento da lista, podemos escrever:

Dentro [ 15 ]: eu [:: 2 ] # equivalente a L [0: len (L): 2]

Fora [15]: [2, 5, 11]

Uma verso particularmente til deste especificar um passo negativo, o que ir


inverter a matriz:

Dentro [ 16 ]: eu [:: - 1 ]

Fora [16]: [11, 7, 5, 3, 2]

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]

Built-In Estruturas de Dados | 33


Dentro [ 18 ]: eu [ 1 : 3 ] = [ 55 , 56 ]
impresso ( eu )

[100, 55, 56, 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

A principal caracterstica distintiva de tuplas que eles so imutvel:


isto significa que uma vez que eles so criados, seu tamanho e contedo no pode ser alterado:

Dentro [ 23 ]: t [ 1 ] = 4

---------------------------------------------------------

TypeError Traceback (chamada mais recente passada)

<Ipython-input-23-141c76cb54a2> em <module> ()
- - - - > 1 t [1] = 4

TypeError: 'tuple' objeto no suporta atribuio artigo

34 | Um rpido tour de Python


Dentro [ 24 ]: t . acrescentar ( 4 )

---------------------------------------------------------

AttributeError Traceback (chamada mais recente passada)

<Ipython-entrada-24-e8bd1632f9dd> em <mdulo> ()
- - - - > 1 t.append (4)

AttributeError: 'tuple' objeto no tem nenhum atributo 'anexar'

Tuplas so muitas vezes utilizados em um programa Python; um caso particularmente


comum nas funes que tm vrios valores de retorno. Por exemplo, a as_integer_ratio () mtodo
de objectos de ponto flutuante retorna um numerador e denominador; esse valor de retorno
dupla vem na forma de uma tupla:

Dentro [ 25 ]: X = 0,125
X . as_integer_ratio ()

Fora [25]: (1, 8)

Estes mltiplos valores de retorno podem ser atribudas individualmente como segue:

Dentro [ 26 ]: numerador , denominador = X . as_integer_ratio ()


impresso ( numerador / denominador )

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:

Dentro [ 27 ]: nmeros = { '1' : 1 , 'dois' : 2 , 'trs' : 3 }

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:

Dentro [ 28 ]: # Acesse um valor atravs da tecla


nmeros [ 'dois' ]

Fora [28]: 2

Built-In Estruturas de Dados | 35


Novos itens podem ser adicionados ao dicionrio usando indexao, bem como:

Dentro [ 29 ]: # Definir uma nova chave valor par /


nmeros [ 'noventa' ] = 90
impresso ( nmeros )

{ 'Trs': 3, 'noventa': 90 'dois': 2, 'um': 1}

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:

Dentro [ 31 ]: # Unio: Os produtos que aparecem em qualquer


primes | probabilidade # com um operador
primes . Unio ( probabilidade ) # equivalentemente com um mtodo

Fora [31]: {1, 2, 3, 5, 7, 9}

Dentro [ 32 ]: # Interseo: itens que aparecem em ambas


primes & probabilidade # com um operador
primes . interseo ( probabilidade ) # equivalentemente com um mtodo

Fora [32]: {3, 5, 7}

Dentro [ 33 ]: # diferena: itens em nmeros primos, mas no em probabilidades


primes - probabilidade # com um operador
primes . diferena ( probabilidade ) # equivalentemente com um mtodo

Fora [33]: {2}

36 | Um rpido tour de Python


Dentro [ 34 ]:

# diferena simtrica: produtos que aparecem em apenas um conjunto


primes ^ probabilidade # com um operador
primes . symmetric_difference ( probabilidade ) # equivalentemente com um mtodo

Fora [34]: {1, 2, 9}

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.

Mais Estruturas de Dados Specialized

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.

Em particular, eu encontrei o seguinte muito til na ocasio:

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).

Demonstraes condicional: se, elif e else

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 :

impresso ( X , " zero" )


elif X > 0 :
impresso ( X , " positivo" )
elif X < 0 :
impresso ( X , " negativo" )
outro :
impresso ( X , " diferente de tudo que eu j vi ..." )

- 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

como voc gostaria.

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:

Dentro [ 2 ]: para N dentro [ 2 , 3 , 5 , 7 ]:


impresso ( N , fim = '' ) # imprimir todos na mesma linha

2357

Observe a simplicidade do para loop: ns especificar a varivel que deseja usar a


seqncia queremos loop sobre, e usar o dentro ator opera- lig-los juntos em uma
maneira intuitiva e de fcil leitura. Mais precisamente, o objeto direita do dentro pode
ser qualquer Python iterator.

38 | Um rpido tour de Python


Um iterador pode ser pensado como uma seqncia generalizada, e vamos discuti-los em Iterators
na pgina 52 .

Por exemplo, um dos iterators mais geralmente usados em Python a alcance objeto,
o que gera uma sequncia de nmeros:

Dentro [ 3 ]: para Eu dentro alcance ( 10 ):

impresso ( Eu , fim = '' )

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:

Dentro [ 4 ]: # gama 5-10


Lista ( alcance ( 5 , 10 ))

Fora [4]: [5, 6, 7, 8, 9]

Dentro [ 5 ]: # variam de 0 a 10 por dois


Lista ( alcance ( 0 , 10 , 2 ))

Fora [5]: [0, 2, 4, 6, 8]

Voc pode notar que o significado de alcance argumentos muito seme- lar para a sintaxe

corte que ns coberto de Listas na pgina 31 . Note-se que o comportamento de alcance()

uma das principais diferenas entre Python 2 e 3: 2 em Python, alcance() produz uma lista,

enquanto em Python 3, alcance() produz um objecto iterveis.

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 :

impresso ( Eu , fim = '' )


Eu + = 1

0123456789

O argumento do enquanto loop avaliada como uma expresso booleana, eo lao


executado at que a instruo for avaliada como False.

break e continue: ajustar sua Loops


H duas declaraes teis que podem ser usados dentro de loops para afinar como eles
so executados:

Flow Control | 39
o pausa breaks declarao fora do circuito inteiramente

o continuar declarao ignora o restante do circuito de corrente, e vai para a prxima


iterao Estes podem ser usados em ambos para e enquanto rotaes. Aqui est um exemplo

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:

Dentro [ 7 ]: para n dentro alcance ( 20 ):

# 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

preencher uma lista com todos os nmeros de Fibonacci at um certo valor:

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 )

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

Observe que usamos uma while True loop, que far um loop para sempre a menos que tenhamos uma

instruo break!

Loops com uma outra Bloco

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

40 | Um rpido tour de Python


outro bloco executado apenas se o lacete termina naturalmente, sem encontrar uma pausa

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

para n dentro alcance ( 2 , nmx ):


para fator dentro eu :
E se n % fator == 0 :
quebrar outra : #

sem intervalo

eu . acrescentar ( n )

impresso ( eu )

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

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.

Definindo e usando funes


At agora, nossos scripts tm sido, de uso nico blocos de cdigo simples. Uma
maneira de organizar nosso cdigo Python e para torn-lo mais legvel e reutilizvel
fator-out peas teis em reutilizvel funes. Aqui ns vamos cobrir duas maneiras de
criar funes: a def declarao, til para qualquer tipo de funo, ea lambda declarao,
til para criar funes annimas curtas.

usando funes

As funes so grupos de cdigo que tm um nome e podem ser chamados usando


parnteses. Ns vimos funes antes. Por exemplo, impresso
em Python 3 uma funo de:

Dentro [ 1 ]: impresso ( ' abc' )

abc

Aqui impresso o nome da funo, e ' abc' a funo de argu- mento.

Alm de argumentos, h argumentos nomeados que so especificados pelo nome.


Um argumento chave disponvel para o impresso()

Definindo e usando funes | 41


funo (em Python 3) sep, que diz o carter ou tersticas ters deve ser usado
para separar vrios itens:

Dentro [ 2 ]: impresso ( 1 , 2 , 3 )

123

Dentro [ 3 ]: impresso ( 1 , 2 , 3 , setembro = '-' )

1--2--3

Quando argumentos no-palavras-chave so usadas em conjunto com os argumentos de

palavra-chave, a palavra-chave argumentos devem vir no final.

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:

Dentro [ 4 ]: def fibonacci ( N ):


eu = []
uma , b = 0 , 1
enquanto len ( eu ) < N :
uma , b = b , uma + b L . acrescentar

( 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 )

Fora [5]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

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:

Dentro [ 6 ]: def real_imag_conj ( val ):


Retorna val . real , val . imag , val . conjugado ()

42 | Um rpido tour de Python


r , Eu , c = real_imag_conj ( 3 + 4j )
impresso ( r , Eu , c )

3,0 4,0 (3-4j)

Valores de argumento padro

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:

Dentro [ 7 ]: def fibonacci ( N , uma = 0 , b = 1 ):


eu = []
enquanto len ( eu ) < N :
uma , b = b , uma + b L . acrescentar

( uma )

Retorna eu

Com um nico argumento, o resultado da chamada de funo idntica anterior:

Dentro [ 8 ]: fibonacci ( 10 )

Fora [8]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Mas agora podemos usar a funo de explorar coisas novas, tais como o efeito de novos
valores iniciais:

Dentro [ 9 ]: fibonacci ( 10 , 0 , 2 )

Fora [9]: [2, 2, 4, 6, 10, 16, 26, 42, 68, 110]

Os valores tambm podem ser especificadas por nome se desejado, caso em que a ordem dos
valores nomeados no importa:

Dentro [ 10 ]: fibonacci ( 10 , b = 3 , uma = 1 )

Fora [10]: [3, 4, 7, 11, 18, 29, 47, 76, 123, 199]

* args e kwargs **: Argumentos flexveis


s vezes voc pode querer escrever uma funo em que, inicialmente, no sei quantos
argumentos o usurio vai passar. Neste caso, voc pode usar o formulrio especial * args e
** kwargs para pegar todos os argumentos que so passados. Aqui est um exemplo:

Dentro [ 11 ]: def catch_all ( * args , ** kwargs ):


impresso ( " args =" , args )
impresso ( " kwargs = " , kwargs )

Definindo e usando funes | 43


Dentro [ 12 ]: catch_all ( 1 , 2 , 3 , uma = 4 , b = 5 )

args = (1, 2, 3) kwargs = { 'a': 4 'b': 5}

Dentro [ 13 ]: catch_all ( 'uma' , palavra chave = 2 )

args = ( 'um',)
kwargs = { 'palavra-chave': 2}

Aqui no o nome args e kwargs que so importantes, mas o


* caracteres que precede as mesmas. args e kwargs so apenas os nomes de variveis, muitas
vezes usados por conveno, abreviao de argumentos e argumentos palavra chave-. A
diferena operativa os asteriscos: * um nico antes de uma varivel significa expandir esta como
uma sequncia, enquanto uma dupla ** antes de uma varivel significa expandir este como um
dicionrio. Na verdade, esta sintaxe pode ser usado no s com a definio da funo, mas com a
chamada de funo, bem!

Dentro [ 14 ]: inputs = ( 1 , 2 , 3 )
palavras-chave = { 'Pi' : 3,14 }

catch_all ( * inputs , ** palavras-chave )

args = (1, 2, 3) kwargs = { 'pi':


3,14}

Anonymous (lambda) Funes

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:

Dentro [ 15 ]: adicionar = lambda X , y : X + y


adicionar ( 1 , 2 )

Fora [15]: 3

Esta funo lambda aproximadamente equivalente a

Dentro [ 16 ]: def adicionar ( X , y ):


Retorna X + y

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:

44 | Um rpido tour de Python


Dentro [ 17 ]:

dados = [{ 'primeiro' : 'Guido' , 'ltimo' : 'Van Rossum' , 'ARRUACEIRO' : 1956 },


{ 'primeiro' : 'Graa' , 'ltimo' : 'Hopper' , 'ARRUACEIRO' : 1906 },

{ 'primeiro' : 'Alan' , 'ltimo' : 'Turing' , 'ARRUACEIRO' : 1912 }]

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 ])

Fora [18]: [1, 2, 3, 4, 5, 6]

Mas dicionrios no so orderable: precisamos de uma maneira de dizer a funo

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:

Dentro [ 19 ]: # Classificar em ordem alfabtica pelo primeiro nome

classificadas ( dados , chave = lambda item : item [ 'primeiro' ])

Fora [19]:
[{ 'ARRUACEIRO': 1912, 'primeiro': 'Alan', 'ltima': 'Turing'}, { 'ARRUACEIRO': 1906,
'primeiro': 'Grace', 'ltima': 'Hopper'}, { 'ARRUACEIRO': 1956, 'primeiro': 'Guido',
'ltima': 'Van Rossum'}]

Dentro [ 20 ]: # ordenar por ano de nascimento


classificadas ( dados , chave = lambda item : item [ 'ARRUACEIRO' ])

Fora [20]:
[{ 'ARRUACEIRO': 1906, 'primeiro': 'Grace', 'ltima': 'Hopper'}, { 'ARRUACEIRO':
1912, 'primeiro': 'Alan', 'ltima': 'Turing'}, { 'ARRUACEIRO': 1956, 'primeiro':
'Guido', 'ltima': 'Van Rossum'}]

Embora essas funes-chave certamente poderia ser criada pelo normal,


def sintaxe, o lambda sintaxe conveniente para tais funes curtas pontuais como
estes.

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 onde o cdigo no Python vlido (geralmente fceis de corrigir)

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.

Erros de tempo de execuo

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

referncia a uma varivel indefinida:

Dentro [ 1 ]: impresso ( Q )

---------------------------------------------------------

NameError Traceback (chamada mais recente passada)

<Ipython-entrada-3-e796bdcf24ff> em <mdulo> ()
----> 1 impresso (Q)

NameError: nome 'Q' no est definido

Ou se voc tentar uma operao que no est definido:

Dentro [ 2 ]: 1 + 'abc'

---------------------------------------------------------

TypeError Traceback (chamada mais recente passada)

<Ipython-entrada-4-aab9e8ede4f7> em <mdulo> ()
- - - - > 1 1 + 'ABC'

TypeError: tipo (s) operando sem suporte para +: 'int' e 'str'

Ou voc pode estar tentando calcular um resultado matematicamente mal definida:

Dentro [ 3 ]: 2 / 0

---------------------------------------------------------

ZeroDivisionError Traceback (chamada mais recente passada)

<Ipython-entrada-5-ae0c5d243292> em <mdulo> ()
- - - - > 1 2/0

ZeroDivisionError: diviso por zero

46 | Um rpido tour de Python


Ou talvez voc est tentando acessar um elemento de sequncia que no existe:

Dentro [ 4 ]: eu = [ 1 , 2 , 3 ]
eu [ 1000 ]

---------------------------------------------------------

IndexError Traceback (chamada mais recente passada)

<Ipython-input-6-06b6eb1b8957> em <module> ()
1 G = [1, 2, 3]
- - - - > 2 G [1000]

ndice de lista fora do intervalo: IndexError

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.

Pegando Excees: tentar e excepto

A principal Python ferramenta d-lhe para lidar com excees de tempo de execuo o experimentar ... exceto

clusula. Sua estrutura bsica esta:

Dentro [ 5 ]:

experimentar :

impresso ( " este executado em primeiro lugar" )

exceto :
impresso ( " este executado somente se houver um erro" )

este executado primeiro

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 :

impresso ( " vamos tentar algo:" )


X = 1 / 0 # ZeroDivisionError
exceto :
impresso ( " algo rum aconteceu!" )

vamos tentar algo: algo de ruim


aconteceu!

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:

Dentro [ 7 ]: def safe_divide ( uma , b ):


experimentar :

Retorna uma / b

exceto :
Retorna 1E100

Dentro [ 8 ]: safe_divide ( 1 , 2 )

Fora [8]: 0,5

Dentro [ 9 ]: safe_divide ( 2 , 0 )

Fora [9]: 1e + 100

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:

Dentro [ 10 ]: safe_divide ( 1 , '2' )

Fora [10]: 1e + 100

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:

Dentro [ 11 ]: def safe_divide ( uma , b ):


experimentar :

Retorna uma / b

exceto ZeroDivisionError :
Retorna 1E100

Dentro [ 12 ]: safe_divide ( 1 , 0 )

Fora [12]: 1e + 100

Dentro [ 13 ]: safe_divide ( 1 , '2' )

---------------------------------------------------------

TypeError Traceback (chamada mais recente passada)

<Ipython-input-15-2331af6a0acf> em <module> ()
- - - - > 1 safe_divide (1, '2')

48 | Um rpido tour de Python


<Ipython-entrada-13-10b5f0163af8> em safe_divide (a, b)
1 safe_divide def (a, b): 2
experimentar:

---->3 voltar a / b
4 exceto ZeroDivisionError: 5
voltar 1E100

TypeError: tipo (s) operando sem suporte para /: 'int' e 'str'

Estamos pegando erros de diviso zero apenas, e deixando todos os outros erros
permaneam intactas.

Levantando Excees: levantar

Ns vimos o quo importante ter excees informativos quando se utiliza partes da


linguagem Python. igualmente valioso para fazer uso de excees informativos dentro do
cdigo que voc escreve, para que os usurios de seu cdigo (acima de tudo voc mesmo!)
Pode descobrir o que causou seus erros.

A maneira como voc levantar suas prprias excees com o levantar declarao. Por exemplo:

Dentro [ 14 ]: levantar RuntimeError ( " minha mensagem de erro" )

---------------------------------------------------------

RuntimeError Traceback (chamada mais recente passada)

<Ipython-entrada-16-c6a4c1ed2f34> em <mdulo> ()
- - - - > 1 elevar RuntimeError ( "minha mensagem de erro")

RuntimeError: a minha mensagem de erro

Como um exemplo de onde isso pode ser til, vamos voltar ao


fibonacci funo que definimos anteriormente:

Dentro [ 15 ]: def fibonacci ( N ):


eu = []
uma , b = 0 , 1
enquanto len ( eu ) < N :
uma , b = b , uma + b L . acrescentar

( 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:

Dentro [ 16 ]: def fibonacci ( N ):


E se N < 0 :

levantar ValueError ( " N tem de ser no negativo" )


eu = []
uma , b = 0 , 1
enquanto len ( eu ) < N :
uma , b = b , uma + b L . acrescentar

( uma )

Retorna eu

Dentro [ 17 ]: fibonacci ( 10 )

Fora [17]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Dentro [ 18 ]: fibonacci ( - 10 )

---------------------------------------------------------

RuntimeError Traceback (chamada mais recente passada)

<Ipython-input-20-3d291499cfa7> em <module> ()
- - - - > 1 Fibonacci (-10)

<Ipython-entrada-18-01d0cf168d63> em Fibonacci (N)


1 Fibonacci def (N): 2
Se n <0:
---->3 levantar ValueError ( "N tem de ser no negativo")
4 G = [] 5
a, b = 0, 1

ValueError: N tem de ser no negativo

Agora o usurio sabe exatamente por que a entrada invlida, e poderia at usar um experimentar ... exceto bloquear

a lidar com isso!

Dentro [ 19 ]: N = - 10
experimentar :

impresso ( " tentar este ..." )


impresso ( fibonacci ( N ))
exceto ValueError :
impresso ( " Bad valor: necessidade de fazer outra coisa" )

tentar este ...


Bad valor: necessidade de fazer outra coisa

50 | Um rpido tour de Python


Mergulho mais profundo em Excees

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.

Acessando a mensagem de erro

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 )

classe de erro : <class 'ZeroDivisionError'> Mensagem de erro :


diviso por zero

Com este padro, voc pode personalizar ainda mais o tratamento de exceo de sua funo.

Definindo excees personalizadas

Alm de excees incorporadas, possvel definir excees personalizadas atravs herana


de classe. Por exemplo, se voc quiser um tipo espe- cial de ValueError, voc consegue fazer
isso:

Dentro [ 21 ]: classe MySpecialError ( ValueError ):


passar

levantar MySpecialError ( "Aqui est a mensagem" )

---------------------------------------------------------

MySpecialError Traceback (chamada mais recente passada)

<Ipython-input-23-92c36e04a9d0> em <module> ()
2 passar

- - - - > 4 elevar MySpecialError ( "aqui est a mensagem")

MySpecialError: aqui est a mensagem

Isso permitiria que voc use um experimentar ... exceto bloco que s pega esse tipo de erro:

Erros e Excees | 51
Dentro [ 22 ]:

experimentar :

impresso ( " faa alguma coisa" )

levantar MySpecialError ( "[Mensagem de erro informativo aqui]" )


exceto MySpecialError :
impresso ( " fazer outra coisa" )

fazer alguma coisa fazer


outra coisa

Voc pode encontrar este til como voc desenvolver o cdigo mais personalizado.

tente ... exceto ... else ... finalmente

Alm de experimentar e exceto, voc pode usar o outro e finalmente


palavras-chave para sintonizar mais ainda a manipulao do seu cdigo de excees. A estrutura de base

a seguinte:

Dentro [ 23 ]: experimentar :

impresso ( " tentar algo aqui" )


exceto :
impresso ( " isso acontece apenas se falhar" )
outro :
impresso ( " isso acontece apenas se for bem sucedido" )
finalmente :

impresso ( " isso acontece no importa o que" )

tentar algo aqui


isso acontece apenas se conseguir isso
acontece no importa o que

O utilitrio de outro aqui clara, mas o que o ponto de finalmente?


Bem o finalmente clusula realmente executado no importa o que: Eu costumo v-lo usado para fazer

algum tipo de limpeza depois de uma operao concluda.

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:

Dentro [ 1 ]: para Eu dentro alcance ( 10 ):

impresso ( Eu , fim = '' )

0123456789

52 | Um rpido tour de Python


Aqui ns vamos cavar um pouco mais. Acontece que em Python 3,
alcance no uma lista, mas uma coisa chamada iterador, e aprender como ele funciona a

chave para a compreenso de uma ampla classe de funcionalidade Python muito til.

Iterao sobre listas

Iterators so, talvez, mais fcil de entender, no caso concreto de iterao atravs de
uma lista. Considere o seguinte:

Dentro [ 2 ]: para valor dentro [ 2 , 4 , 6 , 8 , 10 ]:


# fazer alguma operao
impresso ( valor + 1 , fim = '' )

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.

Mas o comportamento face-valor no o que realmente acontecendo. Quando


voc escreve algo como para val em L, as Python interpretador verifica se ela tem
uma iterator interface, que pode verificar-se com o built-in iter funo:

Dentro [ 3 ]: iter ([ 2 , 4 , 6 , 8 , 10 ])

Fora [3]: <list_iterator em 0x104722400>

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 ])

Dentro [ 5 ]: impresso ( Prximo ( Eu ))

Dentro [ 6 ]: impresso ( Prximo ( Eu ))

Dentro [ 7 ]: impresso ( Prximo ( Eu ))

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.

range (): A lista no sempre uma lista

Talvez o exemplo mais comum desta iterao indireta a


alcance() funo em Python 3 (nomeado xrange () em Python 2), que no retorna uma lista,

mas um especial alcance() objeto:

Dentro [ 8 ]: alcance ( 10 )

Fora [8]: gama (0, 10)

alcance, como uma lista, expe um iterador:

Dentro [ 9 ]: iter ( alcance ( 10 ))

Fora [9]: <range_iterator em 0x1045a1810>

Ento Python sabe trat-la At parece uma lista:

Dentro [ 10 ]: para Eu dentro alcance ( 10 ):

impresso ( Eu , fim = '' )

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:

54 | Um rpido tour de Python


Dentro [ 12 ]: a partir de itertools importar contagem

para Eu dentro contagem ():

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

do ndice. Voc pode ser tentado a fazer as coisas desta maneira:

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:

Dentro [ 14 ]: para Eu , val dentro enumerar ( eu ):


impresso ( Eu , val )

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 ):

impresso ( lVal , rval )

2346
6 9 8 12
10 15

Qualquer nmero de iterables podem ser compactados em conjunto, e, se eles so comprimentos dife-

rentes, a mais curta ir determinar o comprimento da fecho eclair.

mapa e filtro

o mapa iterador tem uma funo e aplica-o aos valores em um iterador:

Dentro [ 16 ]: # encontrar os primeiros 10 nmeros quadrados


quadrado = lambda X : X ** 2
para val dentro mapa ( quadrado , alcance ( 10 )):
impresso ( val , fim = '' )

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:

Dentro [ 17 ]: # encontrar valores at 10 para o qual x zero% 2


is_even = lambda X : X % 2 == 0
para val dentro filtro ( is_even , alcance ( 10 )):
impresso ( val , fim = '' )

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 ).

56 | Um rpido tour de Python


Iteradores como argumentos da funo

Vimos no Args * e kwargs **: Argumentos flexveis na pgina 43 aquele


* args e ** kwargs pode ser usado para transmitir sequncias e dicionrios de funes.
Acontece que o * args sintaxe no funciona apenas com seqncias, mas com qualquer
iterador:

Dentro [ 18 ]: impresso ( * alcance ( 10 ))

0123456789

Assim, por exemplo, podemos ficar complicado e comprimir o mapa exemplo de diante
para o seguinte:

Dentro [ 19 ]: impresso ( * mapa ( lambda X : X ** 2 , alcance ( 10 )))

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' )

Dentro [ 21 ]: z = fecho eclair ( L1 , L2 )

impresso ( * z )

(1, 'a') (2 'b') (3, 'c') (4 'd')

Dentro [ 22 ]: z = fecho eclair ( L1 , L2 )

new_L1 , new_L2 = fecho eclair ( * z )

impresso ( new_L1 , new_L2 )

(1, 2, 3, 4) ( 'a', 'b', 'c', 'd')

Refletir sobre isso por um tempo. Se voc entender por que ela funciona, voc j percorreu um longo
caminho na compreenso iterators Python!

Iterators especializadas: itertools

Ns brevemente olhou para o infinito alcance iterador, itertools.count,


mais cedo. o itertools mdulo contm uma srie de iteraes res teis; vale bem a
pena o seu tempo a explorar o mdulo para ver o que est disponvel. Como
exemplo, considere o itertools.permutations
funo, que itera sobre todas as permutaes de uma sequncia:

Iterators | 57
Dentro [ 23 ]: a partir de itertools importar permutaes
p = permutaes ( alcance ( 3 ))
impresso ( * p )

(0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)

Da mesma forma, o itertools.combinations itera funo sobre todas as combinaes nicas de N valores
dentro de uma lista:

Dentro [ 24 ]: a partir de itertools importar combinaes


c = combinaes ( alcance ( 4 ), 2 )
impresso ( * c )

(0, 1) (0, 2) (0, 3) (1, 2) (1, 3) (2, 3)

Algo relacionado o produtos iterator, que itera sobre todos os conjuntos de pares entre
duas ou mais iterables:

Dentro [ 25 ]: a partir de itertools importar produtos


p = produtos ( 'Ab' , alcance ( 3 ))
impresso ( * p )

( 'Um', 0) ( 'A', 1) ( 'um', 2) ( 'b', 0) ( 'b', 1) ( 'b', 2)

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:

Dentro [ 1 ]: [ Eu para Eu dentro alcance ( 20 ) E se Eu % 3 > 0 ]

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.

Lista bsica Comprehensions

compreenses lista so simplesmente uma maneira de compactar uma lista de construo

para circuito em uma nica linha curta, legvel. Por exemplo, aqui um loop que constri uma lista

dos 12 primeiros nmeros inteiros quadrados:

58 | Um rpido tour de Python


Dentro [ 2 ]: eu = []
para n dentro alcance ( 12 ):

eu . acrescentar ( n ** 2 )
eu

Fora [2]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]

O equivalente compreenso da lista deste o seguinte:

Dentro [ 3 ]: [ n ** 2 para n dentro alcance ( 12 )]

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-:

Dentro [ 4 ]: [( Eu , j ) para Eu dentro alcance ( 2 ) para j dentro alcance ( 3 )]

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:

Dentro [ 5 ]: [ val para val dentro alcance ( 20 ) E se val % 3 > 0 ]

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]

Condicionais sobre o Valor

Se voc j programou em C, voc pode estar familiarizado com a linha nico condicional
habilitado pelo? operador:

int ABSVAL = ( val < 0 ) ? - val : val

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

Vemos que isso simplesmente duplica a funcionalidade do built-in


abs () funo, mas a construo permite fazer algumas coisas esting realmente inter dentro de

compreenses lista. Isto est ficando muito com- plicado agora, mas voc poderia fazer algo
parecido com isto:

Dentro [ 8 ]: [ val E se val % 2 outro - val


para val dentro alcance ( 20 ) E se val % 3 ]

Fora [8]: [1, -2, -4, 5, 7, -8, -10, 11, 13, -14, -16, 17, 19]

Note-se a quebra de linha dentro da compreenso de lista antes do para


expresso: este vlida em Python, e muitas vezes uma boa maneira de break-up longa lista
compreenses para maior legibilidade. Olhe sobre isso: o que estamos fazendo est construindo
uma lista, deixando de fora mltiplos de 3, e negando todos os mltiplos de 2.

Depois de entender a dinmica das compreenses lista, simples para passar


para outros tipos de compreenses. A sintaxe em grande parte o mesmo; a nica
diferena o tipo de suporte que voc usa.

60 | Um rpido tour de Python


Por exemplo, com chaves voc pode criar um conjunto com um definir preenso com-:

Dentro [ 9 ]: { n ** 2 para n dentro alcance ( 12 )}

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:

Dentro [ 10 ]: { uma % 3 para uma dentro alcance ( 1000 )}

Fora [10]: {0, 1, 2}

Com um ligeiro ajuste, voc pode adicionar dois pontos (:) para criar um dict hension compre-:

Dentro [ 11 ]: { n : n ** 2 para n dentro alcance ( 6 )}

Fora [11]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Finalmente, se voc usar parnteses em vez de colchetes, voc recebe o que chamado de gerador
de expresso:

Dentro [ 12 ]: ( n ** 2 para n dentro alcance ( 12 ))

Fora [12]: <object gerador <genexpr> at 0x1027a5a50>

Um gerador de expresso essencialmente uma compreenso lista na qual os elementos so


gerados quando necessrio, em vez de tudo de uma vez, e a simplicidade aqui desmente o
poder deste recurso de linguagem: vamos explorar isso mais prxima.

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.

compreenses lista usar colchetes, enquanto gerador de expresses usar parnteses

Esta uma compreenso de lista representativa:

Dentro [ 1 ]: [ n ** 2 para n dentro alcance ( 12 )]

geradores | 61
Fora [1]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]

Embora este seja um gerador de expresso representativa:

Dentro [ 2 ]: ( n ** 2 para n dentro alcance ( 12 ))

Fora [2]: <generator objeto <genexpr> at 0x104a60518>

Observe que a impresso da expresso gerador no imprimir o contedo; uma


maneira de imprimir o contedo de um gerador de expresso pass-lo ao Lista construtor:

Dentro [ 3 ]: G = ( n ** 2 para n dentro alcance ( 12 ))


Lista ( G )

Fora [3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]

Uma lista um conjunto de valores, enquanto um gerador uma receita para a


produo de valores

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:

Dentro [ 4 ]: eu = [ n ** 2 para n dentro alcance ( 12 )]


para val dentro eu :

impresso ( val , fim = '' )

9 0 1 4 16 25 36 49 64 81 100 121

Dentro [ 5 ]: G = ( n ** 2 para n dentro alcance ( 12 ))


para val dentro G :

impresso ( val , fim = '' )

9 0 1 4 16 25 36 49 64 81 100 121

A diferena que um gerador de expresso na verdade no com- pute os valores at que


sejam necessrios. Isto no s leva a eficincia da memria, mas a eficincia computacional
bem! Isto tambm significa que enquanto o tamanho de uma lista limitado pela memria
disponvel, o tamanho de um gerador de expresso ilimitado!

Um exemplo de um gerador de expresso infinito pode ser criada utilizando o contagem iterao
definido em itertools:

Dentro [ 6 ]: a partir de itertools importar contagem

contagem ()

Fora [6]: contagem (0)

62 | Um rpido tour de Python


Dentro [ 7 ]: para Eu dentro contagem ():

impresso ( Eu , fim = '' )


E se Eu > = 10 : pausa

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 ))

para val dentro G :

impresso ( val , fim = '' )


E se val > 40 : pausa

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:

Dentro [ 9 ]: eu = [ n ** 2 para n dentro alcance ( 12 )]


para val dentro eu :

impresso ( val , fim = '' )


impresso ()

para val dentro eu :

impresso ( val , fim = '' )

9 0 1 4 16 25 36 49 64 81 100 121 0 1 4 9 16 25
36 49 64 81 100 121

Um gerador de expresso, por outro lado, utilizado-se aps uma iterao:

Dentro [ 10 ]: G = ( n ** 2 para n dentro alcance ( 12 ))


Lista ( G )

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:

Dentro [ 12 ]: G = ( n ** 2 para n dentro alcance ( 12 ))


para n dentro G :

impresso ( n , fim = '' )


E se n > 30 : pausa

impresso ( "\ N fazendo algo entre" )

para n dentro G :

impresso ( n , fim = '' )

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.

Funes do gerador: Usando rendimento

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:

Dentro [ 13 ]: L1 = [ n ** 2 para n dentro alcance ( 12 )]

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:

Dentro [ 14 ]: G1 = ( n ** 2 para n dentro alcance ( 12 ))

def gen ():


para n dentro alcance ( 12 ):

64 | Um rpido tour de Python


produo n ** 2

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.

Exemplo: Prime Number Generator

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:

Dentro [ 15 ]: # Gerar uma lista de candidatos


eu = [ n para n dentro alcance ( 2 , 40 )]
impresso ( eu )

[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, \


17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, \
30, 31, 32, 33, 34, 35, 36, 37, 38, 39]

Dentro [ 16 ]: # Remova todos os mltiplos do primeiro valor


eu = [ n para n dentro eu E se n == eu [ 0 ] ou n % eu [ 0 ] > 0 ]

impresso ( eu )

[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, \
29, 31, 33, 35, 37, 39]

Dentro [ 17 ]: # Remova todos os mltiplos do segundo valor


eu = [ n para n dentro eu E se n == eu [ 1 ] ou n % eu [ 1 ] > 0 ]

impresso ( eu )

[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37]

Dentro [ 18 ]: # Remova todos os mltiplos do terceiro valor


eu = [ n para n dentro eu E se n == eu [ 2 ] ou n % eu [ 2 ] > 0 ]

impresso ( eu )

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]

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 ()

para n dentro alcance ( 2 , N ):

E se todos ( n % p > 0 para p dentro primes ):

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.

Carregando mdulos: a declarao de importao

Para os mdulos de carga integrado em e de terceiros, fornece o Python


importar declarao. Existem algumas maneiras de usar a declarao, que vamos mencionar

brevemente aqui, desde o mais recomendado para o menos recomendado.

Explcita importao mdulo

importao explcita de um mdulo preserva o contedo do mdulo em um namespace. O


namespace ento usado para se referir ao seu contedo com
uma . entre eles. Por exemplo, aqui ns vamos importar o built-in matemtica
mdulo e calcular o seno de pi:

Dentro [ 1 ]: importar matemtica

matemtica . cos ( matemtica . pi )

Fora [1]: -1.0

66 | Um rpido tour de Python


Explcita mdulo de importao por alis

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:

Dentro [ 2 ]: importar numpy Como np

np . cos ( np . pi )

Fora [2]: -1.0

importao explcita do contedo do mdulo

s vezes, em vez de importar o namespace mdulo, voc gostaria apenas de


importar alguns itens especficos do mdulo. Isso pode ser feito com o de ...
importao ... padronizar. Por exem- plo, podemos importar apenas o cos e a funo
pi constante do matemtica mdulo:

Dentro [ 3 ]: a partir de matemtica importar cos , pi

cos ( pi )

Fora [3]: -1.0

importao implcita do contedo do mdulo

Finalmente, s vezes til para importar a totalidade dos contedos do mdulo


no namespace local. Isso pode ser feito com o
a partir de ... import * padronizar:

Dentro [ 4 ]: a partir de matemtica importar *

pecado ( pi ) ** 2 + cos ( pi ) ** 2

Fora [4]: 1,0

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:

Dentro [ 5 ]: Socorro ( soma )

Ajuda na soma funo built-in em builtins mdulo:

soma(...)

Mdulos e Pacotes | 67
sum (iterable [, incio]) -> valor

Retorna a soma de um itervel de nmeros (e no cordas)


mais o valor do parmetro 'start' (cujo padro 0). Quando o
iterable estiver vazia, retornar incio.

Podemos usar isso para calcular a soma de uma sequncia, comeando com um determinado valor

(aqui, vamos comear com - 1):

Dentro [ 6 ]: soma ( alcance ( 5 ), - 1 )

Fora [6]: 9

Agora observe o que acontece se fizermos a exatamente a mesma chamada de funo

aps a importao * from numpy:

Dentro [ 7 ]: a partir de numpy importar *

Dentro [ 8 ]: soma ( alcance ( 5 ), - 1 )

Fora [8]: 10

O resultado off por um! A razo para isso que o import *


declarao substitui o embutido soma com a funo numpy.sum
funo, que tem uma assinatura chamada diferente: no primeiro caso, estamos somando faixa
(5) Comeando s - 1; no segundo, estamos somando

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.

Importar da biblioteca padro do Python

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:

OS e sys Ferramentas para a interface com o sistema operacional, incluindo a navegao em


estruturas de diretrios de arquivos e executar comandos shell

matemtica e cmath funes matemticas e operaes em nmeros reais e complexos

itertools Ferramentas para construir e interagir com iteradores e geradores

functools Ferramentas que auxiliam na programao funcional

aleatria As ferramentas para a gerao de nmeros pseudo-aleatrios

68 | Um rpido tour de Python


salmoura Ferramentas para a persistncia de objetos: salvar objetos e objetos de carregamento de disco

json e csv Ferramentas para leitura de arquivos formatados em JSON e CSV-formatado

urllib Ferramentas para fazer HTTP e outras solicitaes da web

Voc pode encontrar informaes sobre estes, e muitos mais, na documentao da


biblioteca padro do Python: https://docs.python.org/3/library/ .

Importando de Mdulos de Terceiros

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

pacote que eu escrevi, tudo que necessrio digitar o seguinte na linha de


comando:

$ Pip instalar supersmoother

O cdigo fonte para o pacote ser baixado automaticamente a partir do repositrio


PyPI, eo pacote instalado no caminho padro do Python (supondo que voc tem
permisso para faz-lo no com- putador voc est usando).

Para mais informaes sobre PyPI eo pip instalador, consulte a documentao em http://pypi.python.org
.

Manipulao de corda e Expresses Regulares


Um lugar onde a linguagem Python realmente brilha na a manipulao de strings.
Esta seo ir cobrir algumas das operaes de built-in mtodos de string e formatao
do Python, antes de passar para um guia rpido para o assunto extremamente til de expresses
regulares.
Tais pattens de manipulao de cadeia chegar a muitas vezes no contexto de trabalho de cincia

de dados, e um grande privilgio de Python neste contexto. Cordas em pito pode ser definido

utilizando quer taes quo- simples ou dupla (so funcionalmente equivalente):

Manipulao de corda e Expresses Regulares | 69


Dentro [ 1 ]: X = 'uma linha'
y = "uma linha"
X == y

Fora [1]: True

Alm disso, possvel definir cordas de vrias linhas usando um triplo Citao sintaxe:

Dentro [ 2 ]: multilinha = """


um dois
trs """

Com isso, vamos dar um rpido passeio de algumas das cordas ferramentas a manipulao do Python.

A manipulao de cadeia simples em 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.

cordas de formatao: caso Ajustar

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:

Dentro [ 3 ]: Raposa = "O Fox rpido de Brown."

Para converter toda a cadeia em maisculas ou minsculas, voc pode usar o superior() ou mais
baixo() mtodos respectivamente:

Dentro [ 4 ]: Raposa . superior ()

Fora [4]: 'THE QUICK BROWN FOX.

Dentro [ 5 ]: Raposa . mais baixo ()

Fora [5]: "A ligeira raposa marrom.

A necessidade de formatao comum capitalizar apenas a primeira letra de cada


palavra, ou talvez a primeira letra de cada frase. Isso pode ser feito com o ttulo() e capitalizar()
mtodos:

Dentro [ 6 ]: Raposa . ttulo ()

70 | Um rpido tour de Python


Fora [6]: 'The Quick Brown Fox.'

Dentro [ 7 ]: Raposa . capitalizar ()

Fora [7]: "A ligeira raposa marrom.

Os casos podem ser trocados usando o swapcase () mtodo:

Dentro [ 8 ]: Raposa . swapcase ()

Fora [8]: 'The Fox rpido de Brown.'

cordas de formatao: Adicionar e remover espaos

Outra necessidade comum remover espaos (ou outros caracteres) a partir do


incio ou no final da cadeia. O mtodo bsico de caracteres remoo a faixa() mtodo,
que exclui os espaos do incio e fim da linha:

Dentro [ 9 ]: linha = ' este o contedo '


linha . faixa ()

Fora [9]: 'este o contedo'

Para remover apenas um espao para a direita ou para a esquerda, o uso RSTRIP () ou lstrip (),

respectivamente:

Dentro [ 10 ]: linha . RSTRIP ()

Fora [10]: ' este o contedo'

Dentro [ 11 ]: linha . lstrip ()

Fora [11]: 'este o contedo '

Para remover diferentes espaos caracteres, voc pode passar o caractere desejado para
o faixa() mtodo:

Dentro [ 12 ]: num = "000000000000435"


num . faixa ( '0' )

Fora [12]: '435'

O oposto desta operao, a adio de espaos ou outros caracteres, podem ser


realizadas usando o centro (), ljust (), e rjust ()
mtodos.

Por exemplo, podemos usar o centro() mtodo para centrar uma determinada seqncia dentro de um

determinado nmero de espaos:

Dentro [ 13 ]: linha = "Este o contedo"


linha . centro ( 30 )

Fora [13]: ' este o contedo '

Manipulao de corda e Expresses Regulares | 71


Similarmente, ljust () e rjust () vai esquerda justificar ou justificar o boto direito na cadeia dentro de espaos

de um determinado comprimento:

Dentro [ 14 ]: linha . ljust ( 30 )

Fora [14]: 'este o contedo '

Dentro [ 15 ]: linha . rjust ( 30 )

Fora [15]: ' este o contedo'

Todos estes mtodos adicionalmente aceitar qualquer caractere que ser usado para preencher o
espao. Por exemplo:

Dentro [ 16 ]: '435' . rjust ( 10 , '0' )

Fora [16]: '0000000435'

Porque zero enchimento uma necessidade, tal comum, Python tambm fornece

zfill (), que um mtodo especial para-pad direita uma string com zeros:

Dentro [ 17 ]: '435' . zfill ( 10 )

Fora [17]: '0000000435'

Localizar e substituir substrings

Se voc quiser encontrar ocorrncias de um determinado caractere em uma string, o

find () / rfind (), ndice () / rindex (), e substituir() mtodos so os melhores mtodos
embutidos.

encontrar() e ndice() so muito semelhantes, na medida em que procurar a primeira ocorrncia

de um caractere ou substring dentro de uma cadeia, e retornar o ndice do substring:

Dentro [ 18 ]: linha = 'A ligeira raposa marrom saltou sobre um co preguioso'


linha . encontrar ( 'Raposa' )

Fora [18]: 16

Dentro [ 19 ]: linha . ndice ( 'Raposa' )

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:

Dentro [ 20 ]: linha . encontrar ( 'Urso' )

Fora [20]: -1

Dentro [ 21 ]: linha . ndice ( 'Urso' )

72 | Um rpido tour de Python


---------------------------------------------------------

ValueError Traceback (chamada mais recente passada)

<Ipython-input-21-4cbe6ee9b0eb> em <module> ()
- - - - > 1 line.index ( 'bear')

ValueError: no substring encontrada

o afins rfind () e rindex () funcionam de forma semelhante, se no se procurar a


primeira ocorrncia do final, em vez do ning in- da string:

Dentro [ 22 ]: linha . rfind ( 'uma' )

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:

Dentro [ 23 ]: linha . termina com ( 'cachorro' )

Fora [23]: True

Dentro [ 24 ]: linha . comea com ( 'Raposa' )

Fora [24]: Falso

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':

Dentro [ 25 ]: linha . substituir ( 'Castanho' , 'vermelho' )

Fora [25]: 'a raposa vermelha rpida saltou sobre um co preguioso'

o substituir() funo retorna uma nova string, e ir substituir todas as ocorrncias da


entrada:

Dentro [ 26 ]: linha . substituir ( 'O' , '-' )

Fora [26]: 'o br rpida - wn f - x saltou --ver um d preguioso - g'

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 .

Manipulao de corda e Expresses Regulares | 73


cordas diviso e particionamento

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:

Dentro [ 27 ]: linha . divisria ( 'Raposa' )

Fora [27]: ( 'o marrom rpida', 'fox', 'pulou um co preguioso')

o rpartition () mtodo semelhante, mas procura da direita da string. o Dividido() mtodo


talvez mais til; ele encontra todos instncias do ponto de diviso e retorna as
subsequncias no meio. O padro dividido em qualquer espao em branco, retornando
uma lista das palavras individuais em uma string:

Dentro [ 28 ]: linha . Dividido ()

Fora [28]: [ 'a', 'rpida', 'marrom', 'fox', 'saltou', \


'Over', 'a', 'preguioso', 'co']

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:

Dentro [ 29 ]: haiku = "" "Matsushima-ya


aah Matsushima-ya
Matsushima-ya """

haiku . splitlines ()

[ 'Matsushima-ya', 'aah Matsushima-ya', 'Matsushima-ya']

Note que se voc gostaria de desfazer um Dividido(), voc pode usar o


Junte-se() mtodo, o qual devolve uma cadeia construda a partir de um ponto de diviso e um iterveis:

Dentro [ 30 ]: '-' . Junte-se ([ '1' , '2' , '3' ])

Fora [30]: '1--2--3'

Um padro comum usar o carcter especial \ n ( nova linha) para unir linhas que
tenham sido previamente divididos, e recuperar a entrada:

74 | Um rpido tour de Python


Dentro [ 31 ]: impresso ( "\ N" . Junte-se ([ 'Matsushima-ya' , 'Aah Matsushima-ya' ,
'Matsushima-ya' ]))

Matsushima-ya aah
Matsushima-ya-ya
matsushima

Cordas formato

Nos mtodos anteriores, ns aprendemos como para extrair os valores de cadeias, e de


manipular-se cordas em esteiras para- desejados. Outra utilizao de mtodos de corda
manipular cadeia representaes de valores de outros tipos. Claro, representaes de
seqncia sempre podem ser encontrados usando o str () funo; por exemplo:

Dentro [ 32 ]: pi = 3.14159
str ( pi )

Fora [32]: '3,14159'

Para formatos mais complicados, voc pode ser tentado a usar aritmtica seqncia, conforme
descrito no Basic Python Semntica: Operadores na pgina 17 :

Dentro [ 33 ]: "O valor de pi " + str ( pi )

Fora [33]: 'O valor de pi 3,14159'

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 [ 34 ]: "O valor de pi {}" . formato ( pi )

Fora [34]: 'O valor de pi 3,14159'

Dentro do marcador {} voc tambm pode incluir informaes sobre exatamente


o que voc gostaria de aparecer l. Se voc incluir um nmero, ele ir se referir ao ndice
do argumento para inserir:

Dentro [ 35 ]:

"" "Primeira letra:. {0} ltima carta:. {1}" "" . formato ( 'UMA' , 'Z' )

Fora [35]: 'Primeira letra: A. ltima carta: 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' )

Fora [36]: 'Primeiro: A. Last: Z.'

Manipulao de corda e Expresses Regulares | 75


Finalmente, para as entradas numricas, voc pode incluir cdigos de formato que con- trolo como o
valor convertido para uma cadeia. Por exemplo, para imprimir um nmero como um ponto flutuante
com trs dgitos depois do ponto decimal, voc pode usar o seguinte:

Dentro [ 37 ]: "Pi = {0: .3f}" . formato ( pi )

Fora [37]: 'pi = 3,142'

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.

Padro flexvel correspondncia com expresses regulares

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:

Dentro [ 38 ]: ! ls * pton *. ipynb

01-How-to-Run-Python-Code.ipynb 02-Basic-Python-Syntax.ipynb

76 | Um rpido tour de Python


As expresses regulares generalizar essa idia wildcard para uma ampla gama de sintaxes
de correspondncia de cordas flexveis. A interface Python para expresses regulares est
contido no built-in r mdulo; Como um exemplo simples, vamos us-lo para duplicar a
funcionalidade da corda
Dividido() mtodo:

Dentro [ 39 ]: importar r
regex = r . compilar ( '\ s +' )
regex . Dividido ( linha )

Fora [39]: [ 'a', 'rpida', 'marrom', 'fox', 'saltou', \


'Over', 'a', 'preguioso', 'co']

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

corresponde a qualquer espao em branco (espao, tabulao, nova linha, etc.), e a + um

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

partida() mtodo, que ir dizer se o incio de uma string corresponde ao padro:

Dentro [ 40 ]: para s dentro [ " " , "Abc" , "Abc" ]:


E se regex . partida ( s ):
impresso ( repr ( s ), "fsforos" )
outro :
impresso ( repr ( s ), "no corresponde" )

' 'Partidas 'ABC' no


coincide com' jogos ABC'

Gostar Dividido(), existem rotinas de convenincia semelhantes para encontrar o primeiro jogo (como

str.index () ou str.find ()) ou para localizar e substituir (como

str.replace ()). Ns novamente vai usar a linha de antes:

Dentro [ 41 ]: linha = 'A ligeira raposa marrom saltou sobre um co preguioso'

Com isso, podemos ver que o regex.search () mtodo funciona muito como str.index
() ou str.find ():

Manipulao de corda e Expresses Regulares | 77


Dentro [ 42 ]: linha . ndice ( 'Raposa' )

Fora [42]: 16

Dentro [ 43 ]: regex = r . compilar ( 'Raposa' )


partida = regex . pesquisa ( linha )
partida . comear ()

Fora [43]: 16

Similarmente, a regex.sub () mtodo funciona muito como


str.replace ():

Dentro [ 44 ]: linha . substituir ( 'Raposa' , 'URSO' )

Fora [44]: 'O urso marrom rpida saltou sobre um co preguioso'

Dentro [ 45 ]: regex . sub ( 'URSO' , linha )

Fora [45]: 'O urso marrom rpida saltou sobre um co preguioso'

Com um pouco de pensamento, outras operaes de cadeia nativa tambm pode ser escalado como

expresses regulares.

Um exemplo mais sofisticado

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.

Aqui vamos considerar um exemplo mais complicado: a tarefa comum de correspondncia de


endereos de email. Vou comear por simplesmente escrever uma expresso regular (algo
indecifrvel), e depois a p atravs do que est acontecendo. Aqui vai:

Dentro [ 46 ]: o email = r . compilar ( '\ W + @ \ w + \. [Az] {3}' )

Usando isso, se estamos dada uma linha de um documento, que pode rapidamente extrair coisas que se

parecem com endereos de e-mail:

Dentro [ 47 ]: texto = "Para o correio electrnico Guido, tente guido@python.org \


ou o endereo guido@google.com mais velho ".
o email . encontrar tudo ( texto )

Fora [47]: [ 'guido@python.org', 'guido@google.com']

(Note-se que estes endereos so inteiramente composto, h provavelmente melhores maneiras de

entrar em contato com Guido).

Podemos fazer outras operaes, como substituir esses endereos de e-mail com uma outra
corda, talvez para esconder endereos na sada:

Dentro [ 48 ]: o email . sub ( '--@--.--' , texto )

78 | Um rpido tour de Python


Fora [48]:
'Para enviar e-mail Guido, tente --@--.-- ou o endereo mais velho --@--.--.'

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:

Dentro [ 49 ]: o email . encontrar tudo ( 'Barack.obama@whitehouse.gov' )

Fora [49]: [ 'obama@whitehouse.gov']

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!

Noes bsicas de sintaxe de expresso regular

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.

cordas simples so combinados diretamente. Se voc construir uma expresso regular


em uma seqncia simples de caracteres ou dgitos, ele ir corresponder essa seqncia exata:

Dentro [ 50 ]: regex = r . compilar ( 'on' )


regex . encontrar tudo ( 'Grandes Expectativas' )

Fora [50]: [ 'ion']

Alguns caracteres tm significados especiais. Enquanto letras simples ou fibras NUM-


so partidas diretas, h um punhado de personagens que tm significados especiais dentro
expresses regulares. Eles so:

. ^ $ * +? {} [] \ | ()

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:

Dentro [ 51 ]: regex = r . compilar (r '\ $' )


regex . encontrar tudo ( "O custo de US $ 20" )

Manipulao de corda e Expresses Regulares | 79


Fora [51]: [ '$']

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:

Dentro [ 52 ]: impresso ( ' uma\ t b \ t c' )

abc

Tais substituies no so feitas em uma string bruta:

Dentro [ 53 ]: impresso ( r 'A \ tb \ tc' )

um \ tb \ tc

Por esta razo, sempre que voc usar barras invertidas em uma expres- regular, uma boa
prtica de usar uma corda crua.

caracteres especiais pode combinar grupos de caracteres. Assim como o caractere \


dentro de expresses regulares pode escapar caracteres especiais, transformando-os em
caracteres normais, ele tambm pode ser usado para dar caracteres normais significado
especial. Estes caracteres especiais coincidir com grupos especficos de caracteres, e ns temos
visto antes. No regexp endereo de e-mail de antes, foi utilizado o caractere \ W, que um
marcador especial correspondncia qualquer caractere alfanumrico. Da mesma forma, no
simples Dividido() exemplo, vimos tambm \ s, um marcador especial indicando qualquer caractere
espao em branco.

Coloc-los juntos, podemos criar uma expresso regular que ir corresponder quaisquer duas
cartas / dgitos com espaos em branco entre eles:

Dentro [ 54 ]: regex = r . compilar (r '\ W \ s \ w' )


regex . encontrar tudo ( 'A raposa de 9 anos' )

Fora [54]: [ 'e f', 'x i', 's 9', 's o']

Este exemplo comea a insinuar o poder ea flexibilidade de expresses regulares.

A tabela a seguir lista alguns desses personagens que so comumente til:

Descrio da personagem

\d Combinar qualquer dgito

\D Combinar qualquer no-dgito

\s Combinar qualquer espao em branco

\S Combinar qualquer no-espao em branco

80 | Um rpido tour de Python


Descrio da personagem

\W Corresponde a qualquer caractere alfanumrico

\W Corresponde a qualquer caractere no alfanumrico

Isto no uma lista ou descrio abrangente; para mais detalhes, consulte Python documentao
sintaxe de expresso regular .

colchetes corresponder grupos de caracteres personalizado. Se o ca- built-in


grupos Ter no so especficas o suficiente para voc, voc pode usar ets brack- quadrado para especificar

qualquer conjunto de caracteres que voc est interessado em Por exemplo, o seguinte ir corresponder a

qualquer vogal minsculas.:

Dentro [ 55 ]: regex = r . compilar ( '[Aeiou]' )


regex . Dividido ( 'Consequente' )

Fora [55]: [ 'c', 'NS', 'q', '', 'NT', '' 'l']

Da mesma forma, voc pode usar um trao para indicar um intervalo: por exemplo, [ az]

ir corresponder a qualquer letra minscula, e [ 1-3] ir corresponder a qualquer dos 1, 2, ou

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:

Dentro [ 56 ]: regex = r . compilar ( '[AZ] [0-9]' )


regex . encontrar tudo ( '1043879, G2, H6' )

Fora [56]: [ 'G2', 'H6']

Wildcards corresponder caracteres repetidos. Se voc gostaria de combinar um


string com, digamos, trs caracteres alfanumricos em uma fileira, possvel escrever, por exemplo, \ w \

w \ w. Porque esta uma necessidade to comum, h uma sintaxe especfica para combinar chaves

repeties-encaracolado com um nmero de telefone:

Dentro [ 57 ]: regex = r . compilar (r '\ W {3}' )


regex . encontrar tudo ( 'A raposa' )

Fora [57]: [ 'A', 'qui', 'bro', 'raposa']

H tambm marcadores disponveis para combinar com qualquer nmero de repeties

- por exemplo, o personagem + ir corresponder um ou mais repeties do que o precede:

Dentro [ 58 ]: regex = r . compilar (r '\ W +' )


regex . encontrar tudo ( 'A raposa' )

Fora [58]: [ 'A', 'rpida', 'marrom', 'raposa']

Manipulao de corda e Expresses Regulares | 81


O seguinte uma tabela dos marcadores de repetio disponveis para uso em expresses
regulares:

Descrio da personagem Exemplo

? Corresponder zero ou uma repeties de precedente ab? fsforos uma ou ab

* 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

{N} Combine n repeties de precedente ab {2} fsforos abb

{M, n} jogo entre m e n repeties de ab {2,3} fsforos abb ou ABBB


precedente

Com estes princpios em mente, vamos retornar nossa correspondncia e-mail:

Dentro [ 59 ]: o email = r . compilar (r '\ W + @ \ w + \. [Az] {3}' )

Agora podemos entender o que isso significa: queremos um ou mais caracteres


alfanumricos (\ w +) seguido pela arroba (@), seguido por um ou mais caracteres
alfanumricos (\ W +), seguido por um ponto (\ .- notar a necessidade de uma fuga barra
invertida), seguido por exatamente trs letras minsculas.

Se queremos agora modificar isso para que o endereo de email Obama partidas,
podemos faz-lo usando a notao de colchetes:

Dentro [ 60 ]: email2 = r . compilar (r '[\ W.] + @ \ W + \. [Az] {3}' )


email2 . encontrar tudo ( 'Barack.obama@whitehouse.gov' )

Fora [60]: [ 'barack.obama@whitehouse.gov']

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:

Dentro [ 61 ]: email3 = r . compilar (r '([\ W.] +) @ (\ W +) \. ([Z] {3})' )

Dentro [ 62 ]: texto = "Para o correio electrnico Guido, tente guido@python.org" \


"Ou o guido@google.com endereo mais velho."
email3 . encontrar tudo ( texto )

82 | Um rpido tour de Python


Fora [62]:
[( 'Guido', 'pito', 'org'), ( 'guido', 'google', 'com')]

Como podemos ver, este agrupamento realmente extrai uma lista dos subcomponentes do

endereo de e-mail. Ns podemos ir um pouco mais longe e nome os componentes extrados

utilizando o (? P <name>) sintaxe, caso em que os grupos pode ser extrada como um dicionrio

Python:

Dentro [ 63 ]:

email4 = r . compilar (r '(? P <usurio> [\ w.] +) @ (? P <domnio> \ w +)' \


'\. (? P <sufixo> [az] {3})' )
partida = email4 . partida ( 'Guido@python.org' )
partida . groupdict ()

Fora [63]: { 'domnio': 'python', 'sufixo': 'org', 'user': 'guido'}

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.

Outros Recursos em expresses regulares

A discusso anterior apenas um tratamento rpido (e longe de ser completa) deste


grande tema. Se voc gostaria de aprender mais, eu recomendar os seguintes recursos:

Python r documentao do pacote


Acho que eu me esquecer prontamente como usar expresses regulares apenas sobre cada
vez que eu us-los. Agora que eu tenho o bsico para baixo, eu encontrei esta pgina para ser
um recurso extremamente valioso para recordar o que cada personagem ou seqncia
especfica significa dentro de uma expresso regular.

COMO FAZER expresso regular oficial do Python


Uma abordagem mais narrativa para expresses regulares em Python.

Dominando Expresses Regulares (O'Reilly, 2006)


Este um livro 500+ pgina sobre o assunto. Se voc quer um tratamento realmente
completa deste tpico, este o recurso para voc. Para alguns exemplos de manipulao de
strings e expresses regulares em ao em uma escala maior, ver Pandas: marcado com
Coluna Oriented dados na pgina 86 , Onde olhamos para aplicar esses tipos de
express~oes atravs tabelas de dados de cadeia dentro do pacote Pandas.

Manipulao de corda e Expresses Regulares | 83


A pr-visualizao de Ferramentas Cincia Dados
Se voc gostaria de saltar a partir daqui e ir mais longe em usar Python para
computao cientfica ou cincia de dados, existem alguns pacotes que ir tornar
sua vida muito mais fcil. Esta seo ir introduzir e visualizar vrios dos mais
importantes, e dar-lhe uma idia dos tipos de aplicativos que eles so projetados
para. Se voc estiver usando o ambiente Anaconda ou Miniconda sugeriu no incio
deste relatrio, voc pode instalar os pacotes relevantes com o seguinte comando:

$ Conda instalar pandas SciPy numpy matplotlib scikit-learn

Vamos dar uma breve olhada em cada um destes, por sua vez.

NumPy: Numerical Python

NumPy fornece um meio eficiente para armazenar e manipular matrizes densas


multidimensionais em Python. As caractersticas importantes do NumPy so:

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()):

Dentro [ 1 ]: importar numpy Como np

X = np . arange ( 1 , 10 )
X

Fora [1]: matriz ([1, 2, 3, 4, 5, 6, 7, 8, 9])

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])

84 | Um rpido tour de Python


Compare isso com o estilo Python preenso lista com- muito mais detalhado para o
mesmo resultado:

Dentro [ 3 ]: [ val ** 2 para val dentro alcance ( 1 , 10 )]

Fora [3]: [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

Fora [4]: matriz ([[1, 2, 3],


[4, 5, 6], [7, 8,
9]])

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

Fora [5]: matriz ([[1, 4, 7],


[2, 5, 8], [3, 6,
9]])

ou um produto de matriz-vector utilizando np.dot:

Dentro [ 6 ]: np . ponto ( M , [ 5 , 6 , 7 ])

Fora [6]: matriz ([38, 92, 146])

e at mesmo operaes mais sofisticadas, como autovalor decomposio o:

Dentro [ 7 ]: np . linalg . eigvals ( M )

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 .

A pr-visualizao de Ferramentas Cincia


| Dados
85
Pandas: Dados Orientada a coluna denominada

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 ]:

importar pandas Como pd

df = pd . Quadro de dados ({ 'rtulo' : [ 'UMA' , 'B' , 'C' , 'UMA' , 'B' , 'C' ],


'valor' : [ 1 , 2 , 3 , 4 , 5 , 6 ]})
df

Fora [8]: rtulo valor 0 A


1
1B 2
2C 3
3A 4
4B 5
5C 6

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

Nome: etiqueta, dtipo: objeto

Aplicar operaes de cadeia atravs de entradas de cadeia:

Dentro [ 10 ]: df [ 'rtulo' ] . str . mais baixo ()

Fora [10]: 0 a
1 b
2 c
trs um
4 b
5 c
Nome: etiqueta, dtipo: objeto

Aplicar agrega em entradas numricas:

Dentro [ 11 ]: df [ 'valor' ] . soma ()

Fora [11]: 21

86 | Um rpido tour de Python


E, talvez mais importante, fazer eficiente de estilo de banco de dados se junta e agrupamentos:

Dentro [ 12 ]: df . groupby ( 'rtulo' ) . soma ()

Fora [12]: rtulo


valor A
5
B 7
C 9

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 .

Matplotlib: visualizao cientfica de estilo MATLAB

Matplotlib atualmente o mais popular pacotes de visualizao cientfica em Python. Mesmo


defensores admitem que sua interface por vezes excessivamente detalhado, mas uma
biblioteca poderosa para criar uma grande variedade de terrenos.

Para usar Matplotlib, podemos comear ativando o modo de notebook (para uso no
caderno Jupyter) e depois importar o pacote como PLT:

Dentro [ 13 ]: # executar este se estiver usando Jupyter notebook


% notebook matplotlib

Dentro [ 14 ]:

importar matplotlib.pyplot Como plt


plt . estilo . usar ( 'Ggplot' ) # fazer grficos no estilo de ggplot de R

Agora vamos criar alguns dados (como matrizes Numpy, claro) e traar os resultados:

Dentro [ 15 ]: X = np . linspace ( 0 , 10 ) # gama de valores de 0 a 10


y = np . pecado ( X ) # seno destes valores
plt . enredo ( X , y ); # lote como uma linha

A pr-visualizao de Ferramentas Cincia


| Dados
87
Se voc executar este cdigo ao vivo, voc vai ver um enredo interativo que permite que voc pan, zoom e

rolar para explorar os dados.

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: Python Scientific

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:

scipy.fftpack transformao rpida de Fourier

scipy.integrate Integrao numrica

scipy.interpolate interpolao numrica

scipy.linalg rotinas de lgebra linear

scipy.optimize otimizao numrica de funes

scipy.sparse Dispersa armazenamento matriz e lgebra linear

scipy.stats rotinas de anlise estatstica

88 | Um rpido tour de Python


Por exemplo, vamos dar uma olhada interpolando uma curva suave entre alguns
dados:

Dentro [ 16 ]: a partir de scipy importar interpolar

# escolher oito pontos entre 0 e 10


X = np . linspace ( 0 , 10 , 8 )
y = np . pecado ( X )

# criar uma funo de interpolao cbica


func = interpolar . interp1d ( X , y , tipo = 'cbico' )

# interpolao em uma grade de 1.000 pontos


x_interp = np . linspace ( 0 , 10 , 1000 )
y_interp = func ( x_interp )

# plotar os resultados
plt . figura () # nova figura
plt . enredo ( X , y , 'O' )
plt . enredo ( x_interp , y_interp );

O que vemos uma interpolao suave entre os pontos.

Outros dados Pacotes Cincia

Construdo no topo destas ferramentas so uma srie de outros pacotes de cincia de dados, incluindo

ferramentas gerais como Scikit-learn para aprendizagem de mquina,

Scikit-Imagem para anlise de imagem e StatsModels para eling Mod de estatstica, bem como
mais pacotes especficos de domnio como AstroPy para

A pr-visualizao de Ferramentas Cincia


| Dados
89
astronomia e astrofsica, NiPy por neuro-imagem, e muitos, muitos mais.

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.

Recursos para a aprendizagem futura


Isso conclui nossa rpido tour da linguagem Python. Minha esperana que se voc leu
at aqui, voc tem uma idia da sintaxe essencial, semntica, operaes e funcionalidades
oferecidas pelo Python LAN-calibre, bem como uma ideia da gama de ferramentas e
cdigo constri que voc pode explorar mais distante.

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:

Fluente Python por Luciano Ramalho


Este um excelente livro O'Reilly que explora as melhores prticas e expresses
idiomticas para Python, incluindo tirar o mximo proveito da biblioteca padro.

Dive Into Python por Mark Pilgrim


Este um livro online gratuito que fornece uma introduo o ground-se
linguagem Python.

Saiba Python the Hard Way por Zed Shaw


Este livro segue uma abordagem de aprender por tentar, e deliberadamente enfatiza
desenvolvendo o que pode ser a habilidade mais til uma gramtica pro- pode aprender:
pesquisando coisas que voc no entende.

Python referncia essencial por David Beazley


Este monstro de 700 pginas bem escrito, e abrange praticamente tudo o que
h para saber sobre a linguagem Python e sua built-in bibliotecas. Para um
Python aplicao mais focada p-through, ver Beazley de Python Cookbook .

Para cavar mais em ferramentas de Python para a cincia de dados e puting com- cientfico, eu
recomendo os seguintes livros:

90 | Um rpido tour de Python


O Data Handbook Cincia Python por sinceramente
Este livro comea precisamente onde este relatrio deixa de fora, e vides pro- um guia
completo para as ferramentas essenciais na pilha cincia de dados do Python, a partir de
dados munging e manipulao para a aprendizagem de mquina.

Computao eficaz em Fsica por Katie Huff e Anthony Scopatz


Este livro aplicvel a pessoas muito alm do mundo da investigao ics phys-.
um passo-a-passo, a introduo incio para Sci computao entific, incluindo uma
excelente introduo a muitas das ferramentas mencionadas neste relatrio.

Python de Anlise de Dados por Wes McKinney, criador do pacote Pandas

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

no que est l fora, eu recomendo o seguinte:

O'Reilly Recursos Python


O'Reilly apresenta uma srie de excelentes livros sobre o prprio Python e tpicos
especializados no mundo Python.

PyCon, SciPy e PyData


As conferncias PyCon, SciPy e PyData atrair milhares de participantes a cada ano, e
arquivar a maior parte de seus programas a cada ano como vdeos online grtis. Estes
transformaram-se em um conjunto incrvel de recursos para aprender sobre si Python,
Python pack-as idades, e assuntos relacionados. Pesquisa online para vdeos de ambas as
palestras e tutoriais: os primeiros tendem a ser mais curto, cobrindo novas idades PACK-
ou aparncia fresca na antigos. Os tutoriais tendem a ser vrias horas, abrangendo a
utilizao das ferramentas mencionados aqui, bem como outros.

Recursos para a aprendizagem futura | 91


Sobre o autor
Jake VanderPlas um usurio de longa data e colaborador da pilha cientfica Python. Ele
atualmente trabalha como diretor de pesquisa interdisciplinar da Universidade de
Washington, conduz sua prpria investigao nomia astron-, e passa o tempo assessoria e
consultoria com cientistas locais de uma ampla gama de campos.

Potrebbero piacerti anche