0% acharam este documento útil (0 voto)
8 visualizações93 páginas

Python Handbook

O Manual do Python é um guia prático que segue a regra 80/20 para ensinar os fundamentos da linguagem Python rapidamente. O documento abrange tópicos como instalação, execução de programas, diferenças entre Python 2 e 3, e conceitos básicos de programação, visando facilitar o aprendizado para iniciantes e programadores de outras linguagens. Escrito por Flávio, o manual também fornece recursos e dicas para aprimorar a experiência de codificação em Python.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações93 páginas

Python Handbook

O Manual do Python é um guia prático que segue a regra 80/20 para ensinar os fundamentos da linguagem Python rapidamente. O documento abrange tópicos como instalação, execução de programas, diferenças entre Python 2 e 3, e conceitos básicos de programação, visando facilitar o aprendizado para iniciantes e programadores de outras linguagens. Escrito por Flávio, o manual também fornece recursos e dicas para aprimorar a experiência de codificação em Python.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Machine Translated by Google

Machine Translated by Google

Índice
Prefácio

O manual do Python
Conclusão

1
Machine Translated by Google

Prefácio
O Manual do Python segue a regra 80/20: aprenda em 20% do tempo os 80% de um tópico.

Em particular, o objetivo é fazer com que você se familiarize rapidamente com o Python.

Este livro foi escrito por Flávio. Publico tutoriais de programação no meu blog [Link] e

organizo um bootcamp anual em [Link].

Você pode entrar em contato comigo no Twitter @flaviocopes.

Aproveitar!

2
Machine Translated by Google

O manual do Python
1. Introdução ao Python 2.

Instalando o Python 3.

Executando programas Python 4.

Python 2 vs Python 3 5.

Noções básicas de como trabalhar com Python

5.1. Variável

5.2. Expressões e enunciado 5.3.

Comentário 5.4.

Recuo

6. Tipos de

dados 7. Operadores

7.0.1. Operador de atribuição

7.0.2. Operador aritmético 7.0.3.

Operador de comparação 7.0.4.

Operador booleano 7.0.5.

Operador bit a bit 7.0.6. é e

em 8. O Operador

Ternário 9. Strings 10.

Booleanos

11. Números

11.0.1. Número inteiro

11.0.2. Número de ponto flutuante

11.0.3. Número complexo

11.0.4. Operações aritméticas no número 11.0.5.

Função integrada
12. Constantes

13. Enums

14. Entrada do

usuário 15. Declarações de controle


16. Listas

3
Machine Translated by Google

17. Tuplas
18. Dicionários

19.
Conjuntos 20. Funções

21. Objetos
22. Loops
22.1. enquanto ciclo
22.2. para o ciclo
22.3. Interromper e continuar
23. Aulas 24.
Módulos 25. A

Biblioteca Padrão Python 26. O guia


de estilo Python PEP8 27. Depuração
28. Escopo de
variáveis 29. Aceitar
argumentos da linha de comando 30. Funções Lambda
31. Recursão 32. Funções
aninhadas 33.
Fechamentos 34.
Decoradores
35. Docstrings

36. Introspecção
37. Anotações 38.
Exceções 39. A

instrução with 40.


Instalando pacotes de

terceiros usando pip 41. Compreensões de lista 42.


Polimorfismo 43. Sobrecarga
de operador 44.
Ambientes virtuais

1. Introdução ao Python

4
Machine Translated by Google

Python está literalmente devorando o mundo da programação. Sua popularidade e uso


estão crescendo de maneiras praticamente sem precedentes na história da
computadores.

Há uma grande variedade de cenários nos quais o Python se destaca. Shell scripting,
automação de tarefas e desenvolvimento Web são apenas alguns exemplos básicos.

Python é a linguagem preferida para análise de dados e aprendizado de máquina, mas


também pode se adaptar para criar jogos e trabalhar com dispositivos embarcados.

Mais importante ainda, é o idioma preferido para cursos introdutórios à ciência da


computação em universidades de todo o mundo.

Muitos estudantes aprendem Python como sua primeira linguagem de programação.


Muitos estão aprendendo agora, muitos aprenderão no futuro. E para muitos deles,
Python será a única linguagem de programação de que precisam.

Graças a esta posição única, o Python provavelmente crescerá ainda mais no futuro.

A linguagem é simples, expressiva e bastante direta.

O ecossistema é enorme. Parece haver uma biblioteca para tudo que você possa
imaginar.

Python é uma linguagem de programação de alto nível adequada para iniciantes graças
à sua sintaxe intuitiva, à sua enorme comunidade e ao seu ecossistema vibrante.

Também é apreciado por profissionais de diversas áreas.

Tecnicamente falando é uma linguagem interpretada que não possui uma fase
intermediária de compilação como uma linguagem compilada, por exemplo C ou
Java.

E como muitas linguagens interpretadas, ela é digitada dinamicamente, o que significa


que você não precisa indicar os tipos de variáveis que usa e as variáveis não estão
vinculadas a um tipo específico.

5
Machine Translated by Google

Isso tem prós e contras. Em particular podemos mencionar que você escreve
programas mais rápido, mas por outro lado você tem menos ajuda das
ferramentas para evitar possíveis bugs e você descobrirá alguns tipos de
problemas apenas executando o programa em tempo de execução.

Python oferece suporte a uma ampla variedade de paradigmas de programação diferentes, incluindo

programação processual, programação orientada a objetos e programação funcional. É flexível o

suficiente para se adaptar a muitas necessidades diferentes.

Criado em 1991 por Guido van Rossum, sua popularidade vem crescendo -
especialmente nos últimos 5 anos, como mostra este infográfico do Google Trends:

Começar com Python é muito fácil. Tudo que você precisa é instalar o pacote
oficial do [Link], para Windows, macOS ou Linux, e você está pronto para
ir.

6
Machine Translated by Google

Se você é novo em programação, nos próximos posts irei orientá-lo para ir do zero a se
tornar um programador Python.

E mesmo que você seja atualmente um programador especializado em outra linguagem,


Python é uma linguagem que vale a pena conhecer porque acho que estamos apenas no
começo.

Linguagens de nível inferior, como C++ e Rust, podem ser ótimas para programadores
experientes, mas são difíceis de começar e levam muito tempo para serem dominadas.
Python, por outro lado, é uma linguagem de programação para programadores, é claro,
mas também para não-programadores. Os estudantes, as pessoas que fazem seu trabalho
diário com o Excel, os cientistas.

A linguagem que todos os interessados em codificação deveriam aprender primeiro.

2. Instalando Python
Vá para [Link] escolha o menu Downloads, escolha seu sistema
operacional e um painel com um link para baixar o pacote oficial aparecerá
aparecer:

7
Machine Translated by Google

Certifique-se de seguir as instruções específicas para o seu sistema operacional. No


macOS você pode encontrar um guia detalhado em [Link]
installation-macos/.

3. Executando programas Python


Existem algumas maneiras diferentes de executar programas Python.

Em particular, você tem uma distinção entre usar prompts interativos, onde você digita o
código Python e ele é executado imediatamente, e salvar um programa Python em um
arquivo e executá-lo.

Vamos começar com prompts interativos.

Se você abrir seu terminal e digitar python , verá uma tela como esta:

8
Machine Translated by Google

Este é o Python REPL (Read-Evaluate-Print-Loop)

Observe o símbolo >>> e o cursor depois disso. Você pode digitar qualquer código
Python aqui e pressionar a tecla Enter para executá-lo.

Por exemplo, tente definir uma nova variável usando

nome = "Flávio"

e então imprima seu valor, usando print() :

imprimir(nome)

9
Machine Translated by Google

Nota: no REPL, você também pode simplesmente digitar name , pressionar a tecla Enter e

você receberá o valor de volta. Mas em um programa, você não verá nenhuma saída se

fizer isso - você precisa usar print() em vez disso.

Qualquer linha de Python que você escrever aqui será executada imediatamente.

Digite quit() para sair deste REPL Python.

Você pode acessar o mesmo prompt interativo usando o aplicativo IDLE instalado

automaticamente pelo Python:

Isso pode ser mais conveniente para você porque com o mouse você pode mover e copiar/

colar mais facilmente do que com o terminal.

Esses são os princípios básicos que vêm com o Python por padrão. Porém eu recomendo

instalar o IPython, provavelmente o melhor aplicativo REPL de linha de comando que você

pode encontrar.

Instale-o com

pip instalar ipython

Certifique-se de que os binários do pip estejam no seu caminho e execute ipython :

10
Machine Translated by Google

ipython é outra interface para trabalhar com um REPL Python e fornece


alguns recursos interessantes, como destaque de sintaxe, conclusão de código e muito m
mais.

A segunda maneira de executar um programa Python é escrever o código do programa Python em

um arquivo, por exemplo [Link] :

e execute-o com python [Link]

11
Machine Translated by Google

Observe que salvamos programas Python com a extensão .py , isso é uma convenção.

Neste caso o programa é executado como um todo e não uma linha por vez. E normalmente
é assim que executamos programas.

Usamos o REPL para prototipagem rápida e para aprendizado.

No Linux e no macOS, um programa Python também pode ser transformado em um shell


script, anexando todo o seu conteúdo com uma linha especial que indica qual executável
usar para executá-lo.

No meu sistema, o executável Python está localizado em /usr/bin/python3 digite , então eu

#!/usr/bin/python3 na primeira linha:

Então posso definir a permissão de execução no arquivo:

12
Machine Translated by Google

chmod u+x [Link]

e posso executar o programa com

./[Link]

Isto é especialmente útil quando você escreve scripts que interagem com o terminal.

Temos muitas outras maneiras de executar programas Python.

Um deles é usar o VS Code e, em particular, a extensão oficial do Python da Microsoft:

13
Machine Translated by Google

Depois de instalar esta extensão você terá o preenchimento automático do código Python e
verificação de erros, formatação automática e linting de código com pylint e ,
alguns comandos especiais, incluindo:

Python: inicie o REPL para executar o REPL no terminal integrado:

14
Machine Translated by Google

Python: execute o arquivo Python no terminal para executar o arquivo atual no


terminal:

Python: execute o arquivo atual na janela interativa do Python:

e muitos mais. Basta abrir a paleta de comandos (Exibir -> Paleta de Comandos ou
Cmd-Shift-P) e digitar python para ver todos os comandos relacionados ao Python:

15
Machine Translated by Google

Outra maneira de executar código Python facilmente é usar [Link], um site muito bom
que fornece um ambiente de codificação no qual você pode criar e executar seus
aplicativos, em qualquer linguagem, incluindo Python:

16
Machine Translated by Google

Cadastre-se (é grátis) e, em "criar uma reposição", clique em Python:

17
Machine Translated by Google

e você verá imediatamente um editor com um arquivo [Link] , pronto para


ser preenchido com muito código Python:

18
Machine Translated by Google

Depois de ter algum código, clique em "Executar" para executá-lo no lado direito do
janela:

19
Machine Translated by Google

Acho que [Link] é útil porque:

você pode facilmente compartilhar código apenas

compartilhando o link várias pessoas podem

trabalhar no mesmo código ele pode

hospedar programas de

longa duração você pode instalar pacotes ele fornece um banco de dados de valores-chave para aplica

4. Python 2 versus Python 3


Um tópico importante para falar, desde o início, é a discussão sobre Python 2 vs Python 3.

O Python 3 foi introduzido em 2008 e está em desenvolvimento como a versão principal do

Python, enquanto o Python 2 continuou sendo mantido com correções de bugs e patches de

segurança até o início de 2020.

Naquela data, o suporte ao Python 2 foi descontinuado.

20
Machine Translated by Google

Muitos programas ainda são escritos usando Python 2, e as organizações ainda trabalham
ativamente neles, porque a migração para Python 3 não é trivial e esses programas
exigiriam muito trabalho para atualizá-los. E migrações grandes e importantes sempre
introduzem novos bugs.

Mas o novo código, a menos que você tenha que aderir às regras definidas pela sua
organização que forçam o Python 2, deve sempre ser escrito em Python 3.

Este livro se concentra em Python 3.

5. Noções básicas de trabalho


com Python

5.1. Variável
Podemos criar uma nova variável Python atribuindo um valor a um rótulo, usando o
operador de atribuição = .

Neste exemplo atribuímos uma string com o valor "Roger" ao rótulo do nome :

nome = "Rogério"

Aqui está um exemplo com um número:

idade = 8

O nome de uma variável pode ser composto por caracteres, números, sublinhado. _

Não pode começar com um número. Tudo isso é válido


nomes de variáveis:

21
Machine Translated by Google

nome1
IDADE

idade

a11111
o meu nome

_nome

Estes são nomes de variáveis inválidos:

123
teste!
nome%

Fora isso, qualquer coisa é válida, a menos que seja uma palavra-chave Python. Existem
, importação
algumas palavras-chave como se , enquantoe, muito mais.

Não há necessidade de memorizá-los, pois o Python irá alertá-lo se você usar


um deles como variável, e você gradualmente os reconhecerá como parte da
sintaxe da linguagem de programação Python.

5.2. Expressões e declaração


Podemos expressar qualquer tipo de código que retorne um valor. Por exemplo

1+1

"Rogério"

Uma instrução, por outro lado, é uma operação sobre um valor, por exemplo, estas
são 2 afirmações:

nome = "Roger"
print(nome)

Um programa é formado por uma série de instruções. Cada instrução é colocada


em sua própria linha, mas você pode usar ponto e vírgula para ter mais de uma
instrução em uma única linha:

22
Machine Translated by Google

nome = "Rogério"; imprimir(nome)

5.3. Comente
Em um programa Python, tudo depois de uma hash é ignorado e considerado um
comentário:

#esta é uma linha comentada

name = "Roger" # este é um comentário embutido

5.4. Recuo
O recuo em Python é significativo.

Você não pode recuar aleatoriamente assim:

nome = "Flávio"
imprimir(nome)

Algumas outras linguagens não possuem espaços em branco significativos, mas em


Python, o recuo é importante.

Nesse caso, se você tentar executar este programa, obterá um erro IndentationError:
inesperado indent , porque o recuo tem um significado especial.

Tudo o que é recuado pertence a um bloco, como uma instrução de controle ou bloco
condicional, ou uma função ou corpo de classe. Veremos mais sobre isso mais tarde.

6. Tipos de dados
Python possui vários tipos integrados.

23
Machine Translated by Google

Se você criar a variável nome atribuindo a ela o valor "Roger", automaticamente


esta variável passa a representar um tipo de dados String.

nome = "Rogério"

Você pode verificar qual tipo de variável é usando a função type() , passando a
variável como argumento e comparando o resultado com str :

nome = "Roger"
type(nome) == str #True

Ou usando isinstance() :

nome = "Roger"
isinstance(nome, str) #True

Observe que para ver o valor True em Python, fora de um REPL, você precisa
agrupar esse código dentro de print() mas ,por motivos de clareza evito usá-
lo

Usamos a classe str aqui, mas o mesmo funciona para outros tipos de dados.

Primeiro, temos números. Os números inteiros são representados usando a


classe int . Os números de ponto flutuante (frações) são do tipo float :

idade =
1 tipo(idade) == int #True

fração = 0,1

tipo(fração) == float #True

Você viu como criar um tipo a partir de um valor literal, assim:

nome = "Flávio"
idade = 20

24
Machine Translated by Google

Python detecta automaticamente o tipo do tipo de valor.

Você também pode criar uma variável de um tipo específico usando o construtor da classe,
passando um valor literal ou um nome de variável:

nome = str("Flávio")
outroNome = str(nome)

Você também pode converter de um tipo para outro usando o construtor de classe.
Python tentará determinar o valor correto, por exemplo, extraindo um número de uma string:

idade = int("20")
print(idade) #20

fração = 0,1
intFraction = int(fração) print(intFraction)

#0

Isso é chamado de fundição. É claro que esta conversão nem sempre funciona dependendo
do valor passado. Se você escrever test em vez de 20 na string acima, obterá um ValueError:
invalid literal for int() with base
10: erro de 'teste' .

Esses são apenas o básico dos tipos. Temos muito mais tipos em Python:

complexo para números complexos


bool para booleanos
lista para listas

tupla para tuplas


intervalo para
intervalos dict para dicionários
conjunto para conjuntos

e mais!

Exploraremos todos eles em breve.

25
Machine Translated by Google

7. Operadores
Operadores Python são símbolos que usamos para executar operações sobre valores e
variáveis.

Podemos dividir os operadores com base no tipo de operação que realizam:

operador de atribuição
operadores aritméticos
operadores de comparação
Operadores lógicos
operadores bit a bit

além de alguns interessantes como é e em .

7.0.1. Operador de atribuição


O operador de atribuição é usado para atribuir um valor a uma variável:

idade = 8

Ou para atribuir um valor de variável a outra variável:

idade = 8
outraVariável = idade

Desde Python 3.8, o operador := walrus é usado para atribuir um valor a um


variável como parte de outra operação. Por exemplo, dentro de um if ou no
parte condicional de um loop. Mais sobre isso mais tarde.

7.0.2. Operador aritmético


Python tem vários operadores aritméticos: + (resto), , - , * ,
/ (divisão), %
** (exponencialização) e // (divisão mínima):

26
Machine Translated by Google

1 + 1 #2
2 - 1 #1
2 * 2 #4
4 / 2 #2
4 % 3 #1
4 ** 2 # 16
4 // 2 #2

Observe que você não precisa de espaço entre os operandos, mas é bom para
facilitar a leitura.

- também funciona como um operador menos unário:

imprimir(-4) #-4

+ também é usado para concatenar valores String:

"Roger" + "é um bom cachorro"


#Roger é um bom cachorro

Podemos combinar o operador de atribuição com operadores aritméticos:

+=

-=

*=

/=

%=

..e assim por diante

Exemplo:

idade =
8 idade +=
1 # idade agora é 9

7.0.3. Operador de comparação

27
Machine Translated by Google

Python define alguns operadores de comparação:

==

!=

>

<

>=

<=

Você pode usar esses operadores para obter um valor booleano ( True ou False )
dependendo do resultado:

uma = 1
b=2

a == b #Falso
a! = b #Verdadeiro
a > b #Falso
a <= b #Verdadeiro

7.0.4. Operador booleano


Python nos fornece os seguintes operadores booleanos:

não

ou

Ao trabalhar com atributos True ou False , eles funcionam como AND lógico,
OR e NOT, e são frequentemente usados na avaliação de expressões condicionais if :

condição1 = Verdadeiro
condição2 = Falso

não condição1 #Falso


condição1 e condição2 #Falso
condição1 ou condição2 #True

28
Machine Translated by Google

Caso contrário, preste atenção a uma possível fonte de confusão.

ou usado em uma expressão retorna o valor do primeiro operando que não é um


valor falso ( Falso , 0 , '' , [] ..). Caso contrário, retorna o último operando.

imprimir(0 ou 1) ### 1
print(Falso ou 'ei') ### 'ei'
print('oi' ou 'oi') ### 'oi'
imprimir([] ou Falso) ### Falso
imprimir(Falso ou []) ### []

. x
Os documentos do Python descrevem isso como se x fosse falso, então y, senão

e só avalia o segundo argumento se o primeiro for verdadeiro. Então, se o primeiro


, '' esse
argumento é falso ( False [] ..),, ele0 retorna , argumento.
Caso contrário, avalia o segundo argumento:

imprimir(0 e 1) ### 0
imprimir(1 e 0) ### 0
print(Falso e 'ei') ### Falso
print('oi' e 'oi') ### 'oi'
imprimir([] e Falso ) ### []
print(Falso e [] ) ### Falso

Os documentos do Python descrevem isso como se x fosse falso, então x, caso contrário, y .

7.0.5. Operador bit a bit


Alguns operadores são usados para trabalhar com bits e números binários:

& executa AND binário


| executa OR binário
^ executa uma operação XOR binária
~ executa uma operação NOT binária
<< operação de mudança para a esquerda

>> operação de deslocamento para a direita

29
Machine Translated by Google

Operadores bit a bit raramente são usados, apenas em situações muito específicas,
mas vale a pena mencioná-los.

7.0.6. está e em
is é chamado de operador identidade. É usado para comparar dois objetos e
retorna verdadeiro se ambos forem o mesmo objeto. Mais sobre objetos posteriormente.

in é chamado de operador de associação. É usado para saber se um valor está contido em uma lista ou

em outra sequência. Mais sobre listas e outras sequências posteriormente.

8. O Operador Ternário
O operador ternário em Python permite definir rapidamente uma condicional.

Digamos que você tenha uma função que compara uma variável de idade com o valor
18 e retorna True ou False dependendo do resultado.

Em vez de escrever:

def is_adult(idade): se
idade > 18:
retornar verdadeiro

outro:
retorna falso

Você pode implementá-lo com o operador ternário desta forma:

def is_adult(age):
return True se idade > 18 else False

Primeiro você define o resultado se a condição for verdadeira, depois avalia a condição
e depois define o resultado se a condição for falsa:

<result_if_true> if <condição> senão <result_if_false>

30
Machine Translated by Google

9. Cordas
Uma string em Python é uma série de caracteres entre aspas ou caracteres duplos
citações:

"Rogério"
'Rogério'

Você pode atribuir um valor de string a uma variável:

nome = "Rogério"

Você pode concatenar duas strings usando o operador + :

frase = "Roger" + "é um bom cachorro"

Você pode anexar a uma string usando += :

nome = "Rogério"
nome += "é um bom cachorro"

print(nome) #Roger é um bom cachorro

Você pode converter um número em uma string usando o construtor da classe str :

str(8) #"8"

Isso é essencial para concatenar um número a uma string:

"
print("Roger é " + str(8) + anos") #Roger tem 8 anos

Uma string pode ser multilinha quando definida com uma sintaxe especial, colocando a
string entre um conjunto de 3 aspas:

31
Machine Translated by Google

print("""Roger é

anos """)

#aspas duplas ou aspas simples

imprimir('''
Rogério é

anos ''')

Uma string possui um conjunto de métodos integrados, como:

isalpha() para verificar se uma string contém apenas caracteres e não está vazia
isalnum() para verificar se uma string contém caracteres ou dígitos e não está vazia

isdecimal() para verificar se uma string contém dígitos e não está vazia
lower() para obter uma versão em letras minúsculas
de uma string islower() para verificar se uma
string está em letras minúsculas upper() para obter
uma versão em letras maiúsculas de uma string
isupper() para verificar se uma string está em letras
maiúsculas title() para obter uma versão em letras maiúsculas de uma string
startswith( ) para verificar se a string começa com uma substring
específica endswith() para verificar se a
string termina com uma substring específica replace() para
substituir uma parte de uma string split() para dividir
uma string em um separador de caracteres
específico strip() para apare o espaço em branco de uma string join() para acrescentar novas letras

e muitos mais.

32
Machine Translated by Google

Nenhum desses métodos altera a string original. Eles retornam uma string nova e
modificada. Por exemplo:

nome = "Roger"
print([Link]()) #"roger"
print(nome) #"Roger"

Você também pode usar algumas funções globais para trabalhar com strings.

Em particular penso em len() , que fornece o comprimento de uma string:

nome = "Roger"
print(len(nome)) #5

O operador in permite verificar se uma string contém uma substring:

nome = "Roger"
print("ger" no nome) #True

Escapar é uma forma de adicionar caracteres especiais a uma string.

Por exemplo, como você adiciona aspas duplas em uma string entre aspas duplas?

nome = "Rogério"

"Ro"Ger" não funcionará, pois o Python pensará que a string termina em "Ro" .

O caminho a seguir é escapar das aspas duplas dentro da string, com o caractere \
barra invertida:

nome = "Ro\"ger"

Isso também se aplica a aspas simples , e para caracteres de formatação especial


\' como \t para tabulação, \n para nova linha e \\ para barra invertida.

33
Machine Translated by Google

Dada uma string, você pode obter seus caracteres usando colchetes para obter
um item específico, dado seu índice, começando em 0:

nome = "Roger"
nome[0] #'R'
nome[1] #'o'
nome[2] #'g'

Usar um número negativo começará a contar do final:

nome = "Roger"
nome[-1] #"r"

Você também pode usar um intervalo, usando o que chamamos de fatiamento:

nome = "Roger"
nome[0:2] #"Ro"
nome[:2] #"Ro"
nome[2:] #"ger"

10. Booleanos
Python fornece o tipo bool , que pode ter dois valores: True e
Falso (maiúsculo)

feito = Falso
feito = Verdadeiro

Booleanos são especialmente úteis com estruturas de controle condicional como if


declarações:

34
Machine Translated by Google

feito = Verdadeiro

se feito:
# execute algum código aqui
outro:
#executa algum outro código

Ao avaliar um valor como Verdadeiro ou Falso, , se o valor não for um bool, nós
temos algumas regras dependendo do tipo que estamos verificando:

os números são sempre verdadeiros, a menos que para o

número 0 as strings sejam falsas apenas

quando listas vazias, tuplas, conjuntos e dicionários são falsas apenas quando vazias

Você pode verificar se um valor é booleano desta forma:

feito = Verdadeiro

tipo(concluído) == bool #True

Ou usando isinstance() , passando 2 argumentos: a variável e a classe bool :

feito = Verdadeiro

isinstance(concluído, bool) #True

A função global any() também é muito útil ao trabalhar com booleanos, pois retorna
True se algum dos valores do iterável (lista, por exemplo) passado como argumento for
True :

book_1_read = Verdadeiro
book_2_read = Falso

read_any_book = qualquer([book_1_read, book_2_read])

A função global all() é a mesma, mas retorna True se todos os valores passados para
ela forem True :

35
Machine Translated by Google

ingredientes_purchased =
Verdadeiro refeição_cooked = Falso

pronto_para_servir = todos([ingredientes_comprados, refeição_cozida])

11. Números
Os números em Python podem ser de 3 tipos: int , flutuante e complexo .

11.0.1. Número inteiro


Os números inteiros são representados usando a classe int . Você pode definir um
número inteiro usando um valor literal:

idade = 8

Você também pode definir um número inteiro usando o construtor int() :

idade = int(8)

Para verificar se uma variável é do tipo int , você pode usar a função global type() :

tipo(idade) == int #True

11.0.2. Número de ponto flutuante


Os números de ponto flutuante (frações) são do tipo float . Você pode definir um
número inteiro usando um valor literal:

fração = 0,1

Ou usando o construtor float() :

36
Machine Translated by Google

fração = flutuante (0,1)

Para verificar se uma variável é do tipo float , você pode usar a função global type() :

tipo(fração) == float #True

11.0.3. Número complexo


Os números complexos são do tipo complex .

Você pode defini-los usando um valor literal:

número complexo = 2+3j

ou usando o construtor complex() :

númerocomplexo = complexo(2, 3)

Depois de ter um número complexo, você pode obter sua parte real e imaginária:

[Link] #2.0
[Link] #3.0

Novamente, para verificar se uma variável é do tipo complex , você pode usar a função
global type() :

tipo(complexNumber) == complexo #True

11.0.4. Operações aritméticas em números

37
Machine Translated by Google

Você pode realizar operações aritméticas em números, usando os operadores


+ e // (divisão , - , * , aritmética / (divisão), % (resto), ** (exponencialização):
de piso):

1 + 1 #2
2 - 1 #1
2 * 2 #4
4 / 2 #2
4 % 3 #1
4 ** 2 # 16
4 // 2 #2

e você pode usar os operadores de atribuição compostos

+=
-=

*=

/=

%=

..e assim por diante

para realizar operações rapidamente em variáveis também:

idade =
8 idade += 1

11.0.5. Função integrada


Existem 2 funções integradas que ajudam com números:

abs() retorna o valor absoluto de um número.

round() dado um número, retorna seu valor arredondado para o número inteiro mais próximo:

rodada (0,12) #0

Você pode especificar um segundo parâmetro para definir a precisão dos pontos decimais:

38
Machine Translated by Google

rodada (0,12, 1) #0,1

Várias outras funções e constantes utilitárias matemáticas são fornecidas pelo

Biblioteca padrão Python:

o pacote math fornece funções matemáticas gerais e constantes; o pacote cmath

fornece utilitários para trabalhar com números complexos. o pacote decimal fornece

utilitários para trabalhar com decimais e números de ponto flutuante. o pacote frações

fornece utilitários para

trabalhar com números racionais

Exploraremos alguns deles separadamente mais tarde.

12. Constantes
Python não tem como forçar uma variável a ser uma constante.

O mais próximo que você pode chegar é usar um enum:

Constantes de classe (Enum):


LARGURA = 1024
ALTURA = 256

E chegue a cada valor usando, por exemplo, [Link] .

Ninguém pode reatribuir esse valor.

Caso contrário, se você quiser confiar nas convenções de nomenclatura, você pode aderir a esta:

declare variáveis que nunca devem mudar para maiúsculas:

LARGURA = 1024

Ninguém impedirá a substituição desse valor e o Python não impedirá isso.

Isso é o que faz a maior parte do código Python que você verá.

39
Machine Translated by Google

13. Enums
Enums são nomes legíveis vinculados a um valor constante.

Para usar enums, importe Enum do módulo de biblioteca padrão de enum :

da importação de enum Enum

Então você pode inicializar um novo enum desta maneira:

estado da classe (Enum):


INATIVO = 0
ATIVO = 1

Depois de fazer isso, você pode fazer referência a [Link] e [Link] ,, e


eles servem como constantes.

Agora, se você tentar imprimir [Link] por exemplo:

imprimir([Link])

não retornará 1 , mas [Link] .

O mesmo valor pode ser alcançado pelo número atribuído no enum:


print(State(1)) retornará [Link] . O mesmo para usar o quadrado
notação de colchetes State['ACTIVE'] .

No entanto, você pode obter o valor usando [Link] .

Você pode listar todos os valores possíveis de um enum:

list(Estado) # [<[Link]: 0>, <[Link]: 1>]

Você pode contá-los:

len(Estado) # 2

40
Machine Translated by Google

14. Entrada do usuário

Em um aplicativo de linha de comando Python, você pode exibir informações ao usuário

usando a função print() :

nome = "Roger"
print(nome)

Também podemos aceitar a entrada do usuário, usando input() :

print('Qual é a sua idade?')


idade = input()
'
print('Sua idade é + idade)

Essa abordagem obtém entrada em tempo de execução, o que significa que o programa

interromperá a execução e aguardará até que o usuário digite algo e pressione a tecla Enter .

Você também pode fazer um processamento de entrada mais complexo e aceitar entradas no
momento da invocação do programa, e veremos como fazer isso mais tarde.

Isso funciona para aplicativos de linha de comando. Outros tipos de aplicativos precisarão de

uma forma diferente de aceitar entradas.

15. Declarações de Controle

O que é interessante fazer com booleanos, e expressões que retornam um booleano em

particular, é que podemos tomar decisões e seguir caminhos diferentes dependendo de seu

valor Verdadeiro ou Falso .

Em Python fazemos isso usando a instrução if :

41
Machine Translated by Google

condição = Verdadeiro

se condição == Verdadeiro:

# faça alguma coisa

Quando o teste de condição é resolvido como True , como no caso acima, seu bloco
é executado.

O que é um bloco? Um bloco é aquela parte recuada um nível (geralmente


4 espaços) à direita:

condição = Verdadeiro

se condição == Verdadeiro:

print("A condição") print("era


verdadeira")

O bloco pode ser formado por uma única linha, ou também por múltiplas
linhas, e termina quando você volta ao nível de recuo anterior:

condição = Verdadeiro

se condição == Verdadeiro:

print("A condição") print("era


verdadeira")

print("Fora do if")

Em combinação com if você pode ter um bloco else , que será executado se o teste de
condição de if resultar em False :

42
Machine Translated by Google

condição = Verdadeiro

se condição == Verdadeiro:

print("A condição") print("era


verdadeira")
outro:

print("A condição") print("era


falsa")

E você pode ter links diferentes se verificar com elif , isso é executado se
a verificação anterior foi False :

condição = Verdadeiro

nome = "Rogério"

se condição == Verdadeiro:

print("A condição") print("era


Verdadeiro") elif name ==
"Roger":
print("Olá Roger") senão:

print("A condição") print("era


falsa")

O segundo bloco neste caso é executado se a condição for Falsa ,ea


o valor da variável de nome é "Roger".

Em uma instrução if você pode ter apenas uma verificação if e else , mas
várias séries de verificações elif :

43
Machine Translated by Google

condição = Verdadeiro

nome = "Rogério"

se condição == Verdadeiro:

print("A condição")
print("era Verdadeiro")
elif name == "Roger":
print("Olá Roger") nome elif
== "Syd": print("Olá Syd")
nome elif == "Flavio":

print("Olá Flávio")
outro:
print("A condição")
print("era falsa")

if e else também podem ser usados em formato inline, o que nos permite retornar um
valor ou outro com base em uma condição.

Exemplo:

uma = 2
resultado = 2 se a == 0 senão 3
imprimir (resultado) # 3

16. Listas
As listas são uma estrutura de dados essencial do Python.

O permite agrupar vários valores e referenciá-los todos com um


nome comum.

Por exemplo:

cachorros = ["Roger", "Syd"]

Uma lista pode conter valores de diferentes tipos:

44
Machine Translated by Google

itens = ["Roger", 1, "Syd", Verdadeiro]

Você pode verificar se um item está contido em uma lista com o operador in :

print("Roger" nos itens) # True

Uma lista também pode ser definida como vazia:

itens = []

Você pode referenciar os itens em uma lista pelo seu índice, começando do zero:

itens[0] # "Roger"
itens[1] # 1
itens[3] # Verdadeiro

Usando a mesma notação você pode alterar o valor armazenado em um índice específico:

itens[0] = "Rogério"

Você também pode usar o método index() :

[Link]("Roger") # 0
[Link]("Syd") # 2

Assim como acontece com strings, usar um índice negativo iniciará a pesquisa a partir do final:

itens[-1] # Verdadeiro

Você também pode extrair parte de uma lista usando fatias:

itens[0:2] # ["Roger", 1] itens[2:]


# ["Syd", Verdadeiro]

45
Machine Translated by Google

Obtenha o número de itens contidos em uma lista usando a função global len() , a mesma
que usamos para obter o comprimento de uma string:

len(itens) #4

Você pode adicionar itens à lista usando um método list append() :

[Link]("Teste")

ou o método extend():

[Link](["Teste"])

Você também pode usar o operador += :

itens += ["Teste"]

# itens é ['Roger', 1, 'Syd', True, 'Test']

Dica: com extend() ou += não esqueça dos colchetes. Não faça items += "Test" ou

[Link]("Test") ou Python adicionará 4 caracteres individuais à lista, resultando

em ['Roger', 1, 'Syd', True, 'T', ' Husa']

Remova um item usando o método remove() :

[Link]("Teste")

Você pode adicionar vários elementos usando

itens += ["Teste1", "Test2"]

#ou

[Link](["Teste1", "Teste2"])

46
Machine Translated by Google

Eles anexam o item ao final da lista.

Para adicionar um item no meio de uma lista, em um índice específico, use o método
insert() :

[Link](1, "Test") # adiciona "Test" no índice 1

Para adicionar vários itens em um índice específico, você precisa usar fatias:

itens[1:1] = ["Teste1", "Teste2"]

Classifique uma lista usando o método sort() :

[Link]()

Dica: sort() só funcionará se a lista contiver valores que possam ser comparados.
Strings e números inteiros, por exemplo, não podem ser comparados, e você receberá
um erro como TypeError: '<' not support between instances of 'int' e 'str' se tentar.

Os métodos sort() ordenam primeiro as letras maiúsculas e depois as minúsculas.


Para corrigir isso, use:

[Link](key=[Link])

em vez de.

A classificação modifica o conteúdo original da lista. Para evitar isso, você pode copiar o
conteúdo da lista usando

itenscópia = itens[:]

ou use a função global sorted() :

imprimir(classificado(itens, chave=[Link]))

47
Machine Translated by Google

isso retornará uma nova lista, ordenada, em vez de modificar a lista original.

17. Tuplas
Tuplas são outra estrutura de dados fundamental do Python.

Eles permitem criar grupos imutáveis de objetos. Isso significa que uma vez criada uma tupla, ela

não poderá ser modificada. Você não pode adicionar ou remover itens.

Eles são criados de forma semelhante às listas, mas usando parênteses em vez de colchetes:

nomes = ("Roger", "Syd")

Uma tupla é ordenada, como uma lista, para que você possa obter seus valores referenciando um
valor de índice:

nomes[0] # "Roger"
nomes[1] # "Syd"

Você também pode usar o método index() :

[Link]("Roger") # 0
[Link]("Syd") # 2

Assim como acontece com strings e listas, usar um índice negativo iniciará a pesquisa a partir do
final:

nomes[-1] # Verdadeiro

Você pode contar os itens em uma tupla com a função len() :

len(nomes) # 2

48
Machine Translated by Google

Você pode verificar se um item está contido em uma tupla com o operador in :

print("Roger" em nomes) # True

Você também pode extrair uma parte de uma tupla usando fatias:

nomes[0:2] # ('Roger', 'Syd') nomes[1:]


# ('Syd',)

Obtenha o número de itens em uma tupla usando a função global len() , a mesma que usamos

para obter o comprimento de uma string:

len(nomes) #2

Você pode criar uma versão ordenada de uma tupla usando a função global sorted() :

ordenado (nomes)

Você pode criar uma nova tupla a partir de tuplas existentes usando o operador + :

newTuple = nomes + ("Vanille", "Tina")

18. Dicionários
Os dicionários são uma estrutura de dados Python muito importante.

Enquanto as listas permitem criar coleções de valores, os dicionários permitem criar coleções

de pares chave/valor.

Aqui está um exemplo de dicionário com um par chave/valor:

cachorro = { 'nome': 'Roger' }

49
Machine Translated by Google

A chave pode ser qualquer valor imutável, como uma string, um número ou uma tupla.
O valor pode ser o que você quiser.

Um dicionário pode conter vários pares chave/valor:

cachorro = { 'nome': 'Roger', 'idade': 8 }

Você pode acessar valores-chave individuais usando esta notação:

cachorro['nome'] #
'Roger' cachorro['idade'] # 8

Usando a mesma notação você pode alterar o valor armazenado em um índice específico:

cachorro['nome'] = 'Syd'

E outra maneira é usar o método get() , que tem a opção de adicionar um


valor padrão:

[Link]('nome') # 'Roger'
[Link]('teste', 'default') # 'default'

O método pop() recupera o valor de uma chave e, posteriormente, exclui o item do


dicionário:

[Link]('nome') # 'Roger'

O método popitem() recupera e remove o último par chave/valor inserido no dicionário:

[Link]()

Você pode verificar se uma chave está contida em um dicionário com o operador in :

50
Machine Translated by Google

'nome' em cachorro # Verdadeiro

Obtenha uma lista com as chaves de um dicionário usando o método keys() , passando seu
resultado para o construtor list() :

list([Link]()) # ['nome', 'idade']

Obtenha os valores usando o métodovalues() e as tuplas de pares chave/valor usando o

método items() :

imprimir(lista([Link]()))
# ['Roger', 8]

print(list([Link]())) #
[('nome', 'Roger'), ('idade', 8)]

Obtenha o comprimento de um dicionário usando a função global len() , a mesma que usamos

para obter o comprimento de uma string ou dos itens de uma lista:

len(cachorro) #2

Você pode adicionar um novo par chave/valor ao dicionário desta forma:

cachorro['comida favorita'] = 'Carne'

Você pode remover um par chave/valor de um dicionário usando a instrução del :

del dog['comida favorita']

Para copiar um dicionário, use o método copy():

cãoCópia = cão.cópia()

51
Machine Translated by Google

19. Conjuntos

Conjuntos são outra estrutura de dados importante do Python.

Podemos dizer que funcionam como tuplas, mas não são ordenadas e são mutáveis. Ou

podemos dizer que funcionam como dicionários, mas não possuem chaves.

Eles também possuem uma versão imutável, chamada frozenset .

Você pode criar um conjunto usando esta sintaxe:

nomes = {"Roger", "Syd"}

Os conjuntos funcionam bem quando você pensa neles como conjuntos matemáticos.

Você pode cruzar dois conjuntos:

set1 = {"Roger", "Syd"} set2


= {"Roger"}

intersecção = set1 & set2 #{'Roger'}

Você pode criar uma união de dois conjuntos:

set1 = {"Roger", "Syd"} set2


= {"Luna"}

união = conjunto1 | conjunto2


#{'Syd', 'Luna', 'Roger'}

Você pode obter a diferença entre dois conjuntos:

set1 = {"Roger", "Syd"} set2


= {"Roger"}

diferença = set1 - set2 #{'Syd'}

52
Machine Translated by Google

Você pode verificar se um conjunto é um superconjunto de outro (e, claro, se um conjunto é um

subconjunto de outro)

set1 = {"Roger", "Syd"} set2 =


{"Roger"}

isSuperset = set1 > set2 # Verdadeiro

Você pode contar os itens de um conjunto com a função global len() :

nomes = {"Roger", "Syd"}


len(nomes) # 2

Você pode obter uma lista dos itens de um conjunto passando o conjunto para list()
construtor:

nomes = {"Roger", "Syd"}


lista(nomes) #['Syd', 'Roger']

Você pode verificar se um item está contido em um conjunto com o operador in :

print("Roger" em nomes) # True

20. Funções

Uma função nos permite criar um conjunto de instruções que podemos executar quando necessário.

As funções são essenciais em Python e em muitas outras linguagens de programação para criar

programas significativos, porque nos permitem decompor um programa em partes gerenciáveis,

promovem a legibilidade e a reutilização de código.

Aqui está um exemplo de função chamada hello que imprime "Hello!":

def olá():
imprimir('Olá!')

53
Machine Translated by Google

Esta é a definição da função. Existe um nome ( hello ) e um corpo, o conjunto de


instruções, que é a parte que segue os dois pontos e está recuada um nível à direita.

Para executar esta função, devemos chamá-la. Esta é a sintaxe para chamar a função:

olá()

Podemos executar esta função uma ou várias vezes.

O nome da função, olá, para que , é muito importante. Deve ser descritivo,
qualquer pessoa que a chame possa imaginar o que a função faz.

Uma função pode aceitar um ou mais parâmetros:

def olá(nome):
print('Olá ' + nome + '!')

Neste caso chamamos a função passando o argumento

olá('Roger')

Chamamos de parâmetros os valores aceitos pela função dentro da definição


da função e de argumentos os valores que passamos para a função quando a
chamamos. É comum ficar confuso sobre essa distinção.

Um argumento pode ter um valor padrão que será aplicado se o argumento não for
especificado:

def olá(nome='meu amigo'): print('Olá


' + nome + '!')

olá()
#Olá, meu amigo!

Veja como podemos aceitar vários parâmetros:

54
Machine Translated by Google

def olá(nome, idade):


' '
print('Olá ' + nome + ', você é + str(idade) + anos!')

Neste caso chamamos a função passando um conjunto de argumentos:

olá('Roger', 8)

Os parâmetros são passados por referência. Todos os tipos em Python são objetos,
mas alguns deles são imutáveis, incluindo inteiros, booleanos, flutuantes, strings e
tuplas. Isso significa que se você passá-los como parâmetros e modificar seu valor
dentro da função, o novo valor não será refletido fora da função.
função:

mudança def (valor): valor


=2

val = 1
alterar (valor)

imprimir(valor) #1

Se você passar um objeto que não é imutável e alterar uma de suas propriedades, a
alteração será refletida externamente.

Uma função pode retornar um valor usando a instrução return . Por exemplo, neste
caso, retornamos o nome do parâmetro name:

def olá(nome): print('Olá

' retorna nome + nome + '!')

Quando a função atende à instrução return , a função termina.

Podemos omitir o valor:

55
Machine Translated by Google

def olá(nome): print('Olá

' return + nome + '!')

Podemos ter a instrução return dentro de uma condicional, que é uma forma
comum de encerrar uma função se uma condição inicial não for atendida:

def olá(nome):
se não for nome:
retornar
print('Olá' + nome + '!')

Se chamarmos a função passando um valor avaliado como string , como um vazio


False , a função será encerrada antes de chegar à instrução print() .

Você pode retornar vários valores usando valores separados por vírgula:

def olá(nome):
print('Olá ' return + nome + '!')
nome, 'Roger', 8

Neste caso, chamando hello('Syd') o valor de retorno (nota: não o que está impresso na tela, mas o

valor de retorno) é uma tupla contendo esses 3 valores: ('Syd',

'Rogério', 8) :

def olá(nome):
print('Olá ' return + nome + '!')
nome, 'Roger', 8

print(olá('Syd')) #('Syd', 'Roger', 8)

21. Objetos
Tudo em Python é um objeto.

56
Machine Translated by Google

Mesmo valores de tipos primitivos básicos (inteiro, string, float..) são objetos. Listas
são objetos, tuplas, dicionários, tudo.

Os objetos possuem atributos e métodos que podem ser acessados usando a sintaxe
de ponto.

Por exemplo, tente definir uma nova variável do tipo int :

idade = 8

age agora tem acesso às propriedades e métodos definidos para todos os objetos
int .

Isto inclui, por exemplo, o acesso à parte real e imaginária desse número:

imprimir([Link]) # 8
imprimir([Link]) # 0

imprimir(idade.bit_length()) #4

# o método bit_length() retorna o número de bits necessários # para


representar este número em notação binária

Uma variável que contém um valor de lista tem acesso a um conjunto diferente de métodos:

itens = [1, 2]
[Link](3)
[Link]()

Os métodos dependem do tipo de valor.

A função global id() fornecida pelo Python permite inspecionar a localização na memória
de um objeto específico.

id(idade) #140170065725376

O valor da sua memória vai mudar, estou mostrando apenas como exemplo

57
Machine Translated by Google

Se você atribuir um valor diferente à variável, seu endereço mudará, pois o conteúdo da
variável foi substituído por outro valor armazenado em outro local da memória:

idade = 8

imprimir(id(idade)) # 140535918671808

idade = 9

imprimir(id(idade)) # 140535918671840

Mas se você modificar o objeto usando seus métodos, o endereço permanecerá o mesmo:

itens = [1, 2]

imprimir(id(itens)) # 140093713593920

[Link](3)

imprimir(itens) # [1, 2, 3]
imprimir(id(itens)) # 140093713593920

O endereço só muda se você reatribuir uma variável a outro valor.

Alguns objetos são mutáveis, outros são imutáveis. Isso depende do próprio objeto. Se
o objeto fornecer métodos para alterar seu conteúdo, ele será mutável.
Caso contrário, é imutável. A maioria dos tipos definidos pelo Python são imutáveis.
Por exemplo, um int é imutável. Não existem métodos para alterar seu valor. Se você
incrementar o valor usando

idade =
8 idade = idade + 1

#ou

idade += 1

58
Machine Translated by Google

e você verifica com id(age) você descobrirá que age aponta para um local de memória
diferente. O valor original não sofreu mutação, mudamos para outro valor.

22. Laços
Loops são uma parte essencial da programação.

Em Python temos 2 tipos de loops: loops while e loops for.

22.1. enquanto loop


while loops são definidos usando a palavra-chave while e repetem seus
bloquear até que a condição seja avaliada como False :

condição = Verdadeiro
enquanto condição == Verdadeiro:

print("A condição é verdadeira")

Este é um loop infinito. Nunca acaba.

Vamos interromper o loop logo após a primeira iteração:

condição = Verdadeiro
enquanto condição == Verdadeiro:

print("A condição é verdadeira") condição =


Falso

print("Após o loop")

Neste caso, a primeira iteração é executada, à medida que o teste de condição é avaliado para
Verdadeiro , e na segunda iteração o teste de condição é avaliado como False , então

o controle vai para a próxima instrução, após o loop.

É comum ter um contador para interromper a iteração após alguns ciclos:

59
Machine Translated by Google

contagem = 0
enquanto contagem < 10:

print("A condição é verdadeira")


contar = contar + 1

print("Após o loop")

22.2. para loop


Usando loops for , podemos dizer ao Python para executar um bloco por um número pré-
determinado de vezes, antecipadamente e sem a necessidade de uma variável separada
e condicional para verificar seu valor.

Por exemplo, podemos iterar os itens de uma lista:

itens = [1, 2, 3, 4] para item


em itens:

imprimir (item)

Ou você pode iterar um número específico de vezes usando a função range() :

para item no intervalo (04):


print(item)

range(4) cria uma sequência que começa em 0 e contém 4 itens: [0, 1,

2, 3] .

Para obter o índice, você deve agrupar a sequência na função enumerate() :

itens = [1, 2, 3, 4] para índice,


item em enumerar(itens): imprimir(índice, item)

22.3. Quebre e continue

60
Machine Translated by Google

Os loops while e for podem ser interrompidos dentro do bloco, usando duas palavras-
chave especiais: break e continue .

continue interrompe a iteração atual e diz ao Python para executar a próxima


um.

break interrompe o loop completamente e continua com a próxima instrução após o


final do loop.

O primeiro exemplo aqui imprime 1, 3, 4 . O segundo exemplo imprime 1 :

itens = [1, 2, 3, 4] para item


em itens:
se item == 2:
continuar

imprimir (item)

itens = [1, 2, 3, 4] para item


em itens:
se item == 2:
quebrar

imprimir (item)

23. Aulas
Além de usar os tipos fornecidos pelo Python, podemos declarar nossas próprias classes
e, a partir das classes, podemos instanciar objetos.

Um objeto é uma instância de uma classe. Uma classe é o tipo de um objeto.

Defina uma classe desta forma:

class <class_name>: #
minha turma

Por exemplo, vamos definir uma classe Dog

61
Machine Translated by Google

classe
Cachorro: # a classe Cachorro

Uma classe pode definir métodos:

class
Cachorro: # a
classe Cachorro
def latido(self): print('WOF!')

self como o argumento do método aponta para o objeto atual


instância e deve ser especificado ao definir um método.

Criamos uma instância de uma classe, um objeto, usando esta sintaxe:

Roger = Cachorro()

Agora roger é um novo objeto do tipo Dog.

Se você correr

imprimir(tipo(roger))

Você receberá <class '__main__.Dog'>

Um tipo especial de método, __init__() é chamado de construtor, e podemos usá-lo para


inicializar uma ou mais propriedades quando criamos um novo objeto daquela classe:

class
Cachorro: # a
classe Cachorro def __init__(self, nome, idade):
[Link] = nome
[Link] = idade

def casca(self):
print('WOF!')

62
Machine Translated by Google

Nós o usamos desta forma:

roger = Cachorro('Roger', 8)
print([Link]) # 'Roger'
print([Link]) # 8

[Link]() # 'WOF!'

Uma característica importante das classes é a herança.

Podemos criar uma classe Animal com um método walk() :

classe Animal:
def andar(auto):
imprimir('Caminhando..')

e a classe Dog pode herdar de Animal:

class Cachorro(Animal):
def latido(self):
print('WOF!')

Agora, a criação de um novo objeto da classe Dog terá o método walk() herdado de Animal :

roger =
Cachorro() [Link]() #
'Caminhando..' [Link]() # 'WOF!'

24. Módulos
Todo arquivo Python é um módulo.

Você pode importar um módulo de outros arquivos, e essa é a base de qualquer programa

de complexidade moderada, pois promove uma organização e código sensatos


reuso.

63
Machine Translated by Google

No programa Python típico, um arquivo atua como ponto de entrada. Os outros arquivos são

módulos e expõem funções que podemos chamar de outros arquivos.

O arquivo [Link] contém este código:

def casca():

print('WOF!')

Podemos importar esta função de outro arquivo usando import do, podemos , e uma vez que nós

referenciar a função usando a notação de ponto [Link]() :

importar cachorro

latido de cachorro()

Ou podemos usar a sintaxe from .. import e chamar a função diretamente:

da casca de importação de cachorro

latido()

A primeira estratégia nos permite carregar tudo o que está definido em um arquivo.

A segunda estratégia nos permite escolher as coisas que precisamos.

Esses módulos são específicos do seu programa e a importação depende da localização do

arquivo no sistema de arquivos.

Suponha que você coloque [Link] em uma subpasta lib .

Nessa pasta, você precisa criar um arquivo vazio chamado __init__.py . Isso informa ao Python

que a pasta contém módulos.

Agora você pode escolher, você pode importar dog da lib :

da lib importar cachorro

latido de cachorro()

64
Machine Translated by Google

ou você pode fazer referência à função específica do módulo dog importando de


[Link] :

de [Link] importar casca

latido()

25. A Biblioteca Padrão Python


Python expõe muitas funcionalidades integradas por meio de sua biblioteca padrão.

A biblioteca padrão é uma enorme coleção de todos os tipos de utilitários, desde utilitários
matemáticos até depuração e criação de interfaces gráficas de usuário.

Você pode encontrar a lista completa de módulos de biblioteca padrão aqui: https://
[Link]/3/library/[Link]

Alguns dos módulos importantes são:

matemática para utilitários matemáticos

re para expressões regulares


json para trabalhar com
JSON datetime para trabalhar com datas

sqlite3 para usar SQLite

os para utilitários de sistema


operacional aleatórios para estatísticas de
geração de números aleatórios para utilitários de estatísticas

solicitações para executar solicitações de rede


HTTP http para criar servidores

HTTP urllib para gerenciar URLs

Vamos apresentar como usar um módulo da biblioteca padrão. Você já sabe como utilizar
os módulos que você cria, importando de outros arquivos da pasta do programa.

Bem, é o mesmo com os módulos fornecidos pela biblioteca padrão:

65
Machine Translated by Google

importar matemática

matemá[Link](4) #2.0

ou

da importação matemática sqrt

quadrado(4) #2.0

Em breve exploraremos os módulos mais importantes individualmente para entender o que podemos
fazer com eles.

26. O guia de estilo PEP8 Python


Ao escrever código, você deve seguir as convenções da linguagem de programação usada.

Se você aprender as convenções corretas de nomenclatura e formatação desde o início, será mais

fácil ler o código escrito por outras pessoas, e as pessoas acharão seu código mais fácil de ler.

Python define suas convenções no guia de estilo PEP8. PEP significa Python Enhancement Proposals

e é o lugar onde acontecem todas as melhorias e discussões da linguagem Python. Existem muitas

propostas de PEP, todas disponíveis em [Link]

O PEP8 é um dos primeiros e também um dos mais importantes. Ele define a formatação e também

algumas regras sobre como escrever Python de forma "pythônica"

caminho.

Você pode ler o conteúdo completo aqui: [Link] mas aqui está

um rápido resumo dos pontos importantes com os quais você pode começar:

Recuar usando espaços, não tabulações

66
Machine Translated by Google

Recuar usando 4 espaços.

Arquivos Python são codificados em UTF-8

Use no máximo 80 colunas para seu código Escreva


cada instrução em sua própria linha

Funções, nomes de variáveis e nomes de arquivos estão em letras minúsculas, com

sublinhados entre as palavras (snake_case)

Os nomes das classes são maiúsculos, palavras separadas também são escritas com letras

maiúsculas (CamelCase)

Os nomes dos pacotes estão em letras minúsculas e não possuem sublinhados entre as
palavras

Variáveis que não devem mudar (constantes) são escritas em letras maiúsculas

Os nomes das variáveis devem ser significativos

Adicione comentários úteis, mas evite comentários óbvios

Adicione espaços ao redor dos operadores

Não use espaços em branco desnecessários


Adicione uma linha em branco antes de uma função

Adicione uma linha em branco entre métodos em uma classe

Dentro de funções/métodos, linhas em branco podem ser usadas para separar blocos de

código relacionados para ajudar na legibilidade

27. Depuração
A depuração é uma das melhores habilidades que você pode aprender, pois o ajudará em muitas
situações difíceis.

Cada linguagem tem seu depurador. Python possui biblioteca , disponível através do

padrão pdb .

Você depura adicionando um ponto de interrupção ao seu código:

ponto de interrupção()

Você pode adicionar mais pontos de interrupção, se necessário.

67
Machine Translated by Google

Quando o interpretador Python atinge um ponto de interrupção em seu código, ele irá parar

e informará qual será a próxima instrução que será executada.

Então você pode fazer algumas coisas.

Você pode digitar o nome de qualquer variável para inspecionar seu valor.

Você pode pressionar n para passar para a próxima linha na função atual. Se o código chama

funções, o depurador não entra nelas e as considera "caixas pretas".

Você pode pressionar s para passar para a próxima linha na função atual. Se a próxima linha

for uma função, o depurador entra nela e você pode executar uma instrução dessa função
por vez.

Você pode pressionar c para continuar a execução do programa normalmente, sem a

necessidade de fazê-lo passo a passo.

Você pode pressionar q para interromper a execução do programa.

A depuração é útil para avaliar o resultado de uma instrução e é especialmente bom saber

como usá-la quando você tem iterações ou algoritmos complexos que deseja corrigir.

28. Escopo das variáveis


Quando você declara uma variável, ela fica visível em partes do seu programa, dependendo

de onde você a declara.

Se você declará-la fora de qualquer função, a variável ficará visível para qualquer código

executado após a declaração, incluindo funções:

68
Machine Translated by Google

idade = 8

teste de definição ():

imprimir(idade)

imprimir(idade) # 8
teste() # 8

Chamamos isso de variável global.

Se você definir uma variável dentro de uma função, essa variável será uma variável
local e só será visível dentro dessa função. Fora da função, não é acessível:

def teste():
idade = 8
print(idade)

teste() # 8

imprimir(idade)
# NameError: o nome 'idade' não está definido

29. Aceite argumentos da linha de


comando

Python oferece várias maneiras de lidar com argumentos passados quando invocamos
o programa na linha de comando.

Até agora você executou programas a partir de um REPL ou usando

python <nome do arquivo>.py

Você pode passar argumentos e opções adicionais ao fazer isso, assim:

69
Machine Translated by Google

python <nome do arquivo>.py


<argumento1> python <nome do arquivo>.py <argumento1> <argumento2>

Uma maneira básica de lidar com esses argumentos é usar o módulo sys da biblioteca
padrão.

Você pode obter os argumentos passados na lista [Link] :

importar sys
imprimir(len([Link]))
imprimir([Link])

A lista [Link] contém como primeiro item o nome do arquivo que foi executado,
por exemplo ['[Link]'] .

Esta é uma maneira simples, mas você tem que trabalhar muito. Você precisa validar
os argumentos, certificar-se de que seu tipo está correto, você precisa imprimir um
feedback para o usuário se ele não estiver usando o programa corretamente.

Python fornece outro pacote na biblioteca padrão para ajudá-lo:


argparse .

Primeiro você importa argparse e chama [Link]() , passando a


descrição do seu programa:

importar argparse

parser =
[Link]( description='Este programa imprime o nome dos meus cachorros'
)

Em seguida, você adiciona argumentos que deseja aceitar. Por exemplo neste programa aceitamos

a opção -c para passar uma cor, como esta: python [Link]


-c vermelho

70
Machine Translated by Google

importar argparse

parser =
[Link]( description='Este programa imprime um valor HEX colorido'
)

parser.add_argument('-c', '--color', metavar='color', require=True, help='a cor a ser


pesquisada')

args =parser.parse_args()

imprimir([Link]) # 'vermelho'

Se o argumento não for especificado, o programa gera um erro:

ÿ python python [Link]


uso: [Link] [-h] -c color
[Link]: erro: os seguintes argumentos são obrigatórios: -c

Você pode definir uma opção para ter um conjunto específico de valores, usando options :

parser.add_argument('-c', '--color', metavar='color', require=True,


escolhas={'red','yellow'}, help='a cor a ser pesquisada')

ÿ python python [Link] -c blue uso:


[Link] [-h] -c color [Link]:
erro: argumento -c/--color: escolha inválida: 'azul' (escolha entre 'amarelo',
'vermelho ')

Existem mais opções, mas essas são as básicas.

E existem pacotes comunitários que também oferecem essa funcionalidade, como Click e

Kit de ferramentas de prompt do Python.

30. Funções Lambda

71
Machine Translated by Google

Funções lambda (também chamadas de funções anônimas) são funções minúsculas


que não têm nome e possuem apenas uma expressão como corpo.

Em Python eles são definidos usando a palavra-chave lambda :

lambda <argumentos> : <expressão>

O corpo deve ser uma expressão única. Expressão, não uma declaração.

Essa diferença é importante. Uma expressão retorna um valor, uma instrução não.

O exemplo mais simples de função lambda é uma função que duplica o valor de um
número:

número lambda : número * 2

As funções Lambda podem aceitar mais argumentos:

lambda a, b: a * b

As funções Lambda não podem ser invocadas diretamente, mas você pode atribuí-las a
variáveis:

multiplicar = lambda a, b: a * b

imprimir(multiplicar(2, 2)) # 4

A utilidade das funções lambda surge quando combinada com outras funcionalidades
do Python, por exemplo, em combinação com map() filter() e ,
reduzir() .

31. Recursão

72
Machine Translated by Google

Uma função em Python pode chamar a si mesma. Isso é o que é recursão. E pode ser
muito útil em muitos cenários.

A maneira comum de explicar a recursão é usando o cálculo fatorial.

O fatorial de um número é o número n multiplicado por n-1 , multiplicado por ... e assim
n-2 sucessivamente, até chegar ao número 1 :

3! = 3 * 2 * 1 = 6
4! = 4*3*2*1 = 24
5! = 5*4*3*2*1 = 120

Usando recursão podemos escrever uma função que calcula o fatorial de qualquer
número:

def fatorial (n):


se n == 1: retorne 1
retornar n * fatorial (n-1)

imprimir(fatorial(3)) # 6
imprimir(fatorial(4)) # 24
imprimir(fatorial(5)) # 120

Se dentro da função factorial() você chamar factorial(n) em vez de , você causará uma
fatorial (n-1) recursão infinita. Por padrão, o Python interromperá as recursões
em 1.000 chamadas e, quando esse limite for atingido, você receberá um erro
RecursionError .

A recursão é útil em muitos lugares e nos ajuda a simplificar nosso código quando
não há outra maneira ideal de fazer isso, por isso é bom conhecer essa técnica.

32. Funções aninhadas


Funções em Python podem ser aninhadas dentro de outras funções.

Uma função definida dentro de uma função é visível apenas dentro dessa função.

73
Machine Translated by Google

Isso é útil para criar utilitários que são úteis para uma função, mas não são úteis fora dela.

Você pode perguntar: por que eu deveria estar “escondendo” essa função, se ela não faz mal?

Primeiro, porque é sempre melhor ocultar a funcionalidade local de uma função e não útil em outro
lugar.

Além disso, porque podemos fazer uso de encerramentos (mais sobre isso mais tarde).

Aqui está um exemplo:

def falar(frase): def


dizer(palavra):
imprimir(palavra)

palavras = [Link](' ') para palavra


em palavras:

diga palavra)

talk('Vou comprar o leite')

Se você quiser acessar uma variável definida na função externa a partir da função interna, primeiro

você precisa declará-la como nonlocal :

contagem de definição ():

contagem = 0

incremento def ():


contagem não local
contar = contar + 1

imprimir (contar)

incremento()

contar()

Isto é útil especialmente com encerramentos, como veremos mais tarde.

33. Fechamentos

74
Machine Translated by Google

Se você retornar uma função aninhada de uma função, essa função aninhada terá acesso às

variáveis definidas nessa função, mesmo que essa função não esteja mais ativa.

Aqui está um exemplo simples de contador.

contador de definição ():


contagem = 0

incremento def ():


contagem não local
contar = contar + 1
contagem de retorno

incremento de retorno

incremento = contador()

imprimir(incremento()) # 1
imprimir(incremento()) # 2
imprimir(incremento()) # 3

Retornamos a função interna increment() , e ela ainda tem acesso ao estado da variável count mesmo

que a função counter() tenha terminado.

34. Decoradores
Decoradores são uma forma de mudar, aprimorar ou alterar de alguma forma a forma como uma função
funciona.

Os decoradores são definidos com o símbolo @ seguido do nome do decorador, logo antes da

definição da função.

Exemplo:

@logtime
def olá():

print('olá!')

75
Machine Translated by Google

Esta função hello tem o decorador logtime atribuído.

Sempre que chamamos hello() , o decorador será chamado.

Um decorador é uma função que recebe uma função como parâmetro, envolve a função
em uma função interna que executa o trabalho que deve ser feito e retorna essa função
interna. Em outras palavras:

def logtime(func): def


wrapper(): # faça
algo antes de val = func() # faça
algo depois de

retornar val

invólucro de devolução

35. Documentos
A documentação é extremamente importante, não apenas para comunicar a outras
pessoas qual é o objetivo de uma função/classe/método/módulo, mas também para você mesmo.

Quando você voltar ao seu código daqui a 6 ou 12 meses, talvez não se lembre de todo
o conhecimento que tem em mente, e ler seu código e entender o que ele deve fazer
será muito mais difícil.

Os comentários são uma maneira de fazer isso:

# isto é um comentário

num = 1 #este é outro comentário

Outra maneira é usar docstrings.

A utilidade dos docstrings é que eles seguem convenções e, como tal, podem ser
processados automaticamente.

É assim que você define uma docstring para uma função:

76
Machine Translated by Google

incremento de definição (n):


"""Incrementar um número"""
retornar n + 1

É assim que você define uma docstring para uma classe e um método:

class Dog:
"""Uma classe representando um cachorro"""
def __init__(self, name, age): """Inicializar
um novo cachorro""" [Link] = name

[Link] = idade

def late(self):
"""Deixe o cachorro latir"""
print('WOF!')

Documente um módulo colocando uma docstring no topo do arquivo, por exemplo,


supondo que seja [Link] :

"""Módulo para cães

Este módulo faz... bla bla bla e fornece as seguintes classes:

- Cachorro

...
"""

class Dog:
"""Uma classe representando um cachorro"""
def __init__(self, name, age): """Inicializar
um novo cachorro""" [Link] = name

[Link] = idade

def late(self):
"""Deixe o cachorro latir"""
print('WOF!')

Docstrings podem abranger várias linhas:

77
Machine Translated by Google

incremento de definição (n):


"""Incremento
um número
"""

retornar n + 1

Python irá processá-los e você pode usar a função global help() para obter a
documentação de uma classe/método/função/módulo.

Por exemplo, chamar help(increment) lhe dará isto:

Ajuda sobre incremento de função no módulo


__main__:

incremento(n)
Incremento
um número

Existem muitos padrões diferentes para formatar documentos, e você pode optar
por aderir ao seu favorito.

Gosto do padrão do Google: [Link]


[Link]#38-comments-and-docstrings

Standard permite ter ferramentas para extrair docstrings e gerar automaticamente


documentação para o seu código.

36. Introspecção
Funções, variáveis e objetos podem ser analisados por meio da introspecção.

Primeiro, usando a função global help() podemos obter a documentação, se fornecida


na forma de docstrings.

Então, você pode usar print() para obter informações sobre uma função:

78
Machine Translated by Google

incremento de definição (n):


retornar n + 1

imprimir (incrementar)

# <incremento de função em 0x7f420e2973a0>

ou um objeto:

class Cachorro():
def latido(self):

print('WOF!')

Roger = Cachorro()

imprimir (Roger)

# <__main__.Objeto Dog em 0x7f42099d3340>

A função type() nos dá o tipo de um objeto:

print(tipo(incremento)) # <class
'função'>

print(type(roger)) # <class
'__main__.Dog'>

print(tipo(1)) # <class
'int'>

print(type('teste')) # <class
'str'>

A função global dir() nos permite descobrir todos os métodos e atributos de um


objeto:

79
Machine Translated by Google

imprimir(dir(roger))

# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', # '__eq__', '__format__',


'__ge__', '__getattribute__', '__gt__', # '__hash__', '__init__ ', '__init_subclass__',
'__le__', '__lt__', # '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', #
'__repr__', '__setattr__', '__sizeof__', '__str__ ', # '__subclasshook__', '__weakref__',
'latido']

A função global id() nos mostra a localização na memória de qualquer objeto:

imprimir(id(roger)) # 140227518093024 imprimir(id(1))


# 140227521172384

Pode ser útil verificar se duas variáveis apontam para o mesmo objeto.

O módulo inspecionar biblioteca padrão nos fornece mais ferramentas para obter
informaçõesobjetos,
aqui: e você pode verificar isto fora

[Link]

37. Anotações
Python é digitado dinamicamente. Não precisamos especificar o tipo de uma variável ou
parâmetro de função, ou um valor de retorno de função.

As anotações nos permitem (opcionalmente) fazer isso.

Esta é uma função sem anotações:

incremento de definição (n):


retornar n + 1

Esta é a mesma função com anotações:

def incremento (n: int) -> int:


retornar n + 1

80
Machine Translated by Google

Você também pode anotar variáveis:

contagem: int = 0

Python irá ignorar essas anotações. Uma ferramenta separada chamada mypy pode ser
executado de forma independente ou integrado por IDE como VS Code ou PyCharm para
verificar automaticamente erros de tipo estaticamente, enquanto você está codificando, e
isso o ajudará a detectar erros de incompatibilidade de tipo antes mesmo de executar o código.

Uma grande ajuda especialmente quando seu software fica grande e você precisa refatorar
seu código.

38. Exceções
É importante ter uma maneira de lidar com erros.

Python nos dá tratamento de exceções.

Se você agrupar linhas de código em um bloco try ::

tente:
# algumas linhas de código

Se ocorrer um erro, o Python irá alertá-lo e você poderá determinar que tipo de erro ocorreu
usando blocos except :

tente:
# algumas linhas de código

exceto <ERROR1>: #
manipulador <ERROR1>

exceto <ERROR2>: #
manipulador <ERROR2>

Para capturar todas as exceções você pode usar exceto sem nenhum tipo de erro:

81
Machine Translated by Google

tente:
# algumas linhas de código

exceto <ERROR1>: #
manipulador <ERROR1>

exceto:
# captura todas as outras exceções

O bloco else é executado se nenhuma exceção for encontrada:

tente:
# algumas linhas de código

exceto <ERROR1>: #
manipulador <ERROR1>

exceto <ERROR2>: #
manipulador <ERROR2>
outro:

# nenhuma exceção foi levantada, o código foi executado com sucesso

Um bloco finalmente permite realizar alguma operação em qualquer caso, independentemente de


ocorreu um erro ou não

tente:
# algumas linhas de código

exceto <ERROR1>: #
manipulador <ERROR1>

exceto <ERROR2>: #
manipulador <ERROR2>
outro:

# nenhuma exceção foi levantada, o código finalmente foi executado com sucesso:
# faça algo
em qualquer caso

O erro específico que ocorrerá depende da operação que você está executando.

Por exemplo, se você estiver lendo um arquivo, poderá obter um EOFError . Se

você dividir um número por zero, obterá ZeroDivisionError . Se você tiver um

problema de conversão de tipo, poderá receber um TypeError .

Experimente este código:

82
Machine Translated by Google

resultado = 2/0
imprimir (resultado )

O programa terminará com um erro

Traceback (última chamada mais recente):

Arquivo "[Link]", linha 1, em <module> resultado


= 2/0
ZeroDivisionError: divisão por zero

e as linhas de código após o erro não serão executadas.

Adicionar essa operação em um bloco try: nos permite recuperar normalmente e seguir
em frente com o programa:

tente : resultado = 2/0


exceto ZeroDivisionError: print('Não
é possível dividir por zero!') finalmente:
resultado
=1

imprimir (resultado) # 1

Você também pode gerar exceções em seu próprio código, usando a instrução raise :

raise Exception(' Ocorreu um erro!')

Isso gera uma exceção geral e você pode interceptá-la usando:

tente:
raise Exception(' Ocorreu um erro!') exceto Exceção
como erro: print(error)

Você também pode definir sua própria classe de exceção, estendendo-se de Exception:

83
Machine Translated by Google

classe DogNotFoundException(Exceção):
passar

pass aqui significa "nada" e devemos usá-lo quando definimos uma classe sem métodos, ou

uma função sem código também.

tente: aumentar DogNotFoundException()


exceto DogNotFoundException:
print('Cão não encontrado!')

39. A declaração com


A instrução with é muito útil para simplificar o trabalho com tratamento de exceções.

Por exemplo, ao trabalhar com arquivos, cada vez que abrimos um arquivo, devemos
lembrar de fechá-lo.

com torna esse processo transparente.

Em vez de escrever:

nome do arquivo = '/Users/flavio/[Link]'

tente: arquivo = open(nome do arquivo,


'r') content = [Link]()
print(content)
finalmente:
[Link]()

Você pode escrever:

84
Machine Translated by Google

nome do arquivo = '/Users/flavio/[Link]'

com open(filename, 'r') como arquivo:


content = [Link]()
print(content)

Em outras palavras, temos tratamento de exceção implícito integrado, já que close()


será chamado automaticamente para nós.

with não é útil apenas para trabalhar com arquivos. O exemplo acima serve apenas para apresentar

seus recursos.

40. Instalando pacotes de


terceiros usando pip
A biblioteca padrão do Python contém um grande número de utilitários que simplificam
nossas necessidades de desenvolvimento em Python, mas nada pode satisfazer tudo.

É por isso que indivíduos e empresas criam pacotes e os disponibilizam como software
de código aberto para toda a comunidade.

Esses módulos são todos coletados em um único lugar, o Python Package Index
disponível em [Link] e eles podem ser instalados em seu sistema usando pip .

Existem mais de 270.000 pacotes disponíveis gratuitamente, no momento em que este


artigo foi escrito.

Você já deve ter o pip instalado se seguiu o Python


instruções de instalação.

Instale qualquer pacote usando o comando pip install :

pip instalar <pacote>

ou, se tiver problemas, você também pode executá-lo através de python -m :

85
Machine Translated by Google

python -m pip install <pacote>

Por exemplo, você pode instalar as solicitações pacote, uma biblioteca HTTP popular:

solicitações de instalação pip

e quando você fizer isso, ele estará disponível para todos os seus scripts Python, porque
os pacotes são instalados globalmente.

A localização exata depende do seu sistema operacional.

No macOS, executando Python / 3,9, o localização é


Library/Frameworks/[Link]/Versions/3.9/lib/python3.9/site-
pacotes .

Atualize um pacote para sua versão mais recente usando:

pip install –U <pacote>

Instale uma versão específica de um pacote usando:

pip install <pacote>==<versão>

Desinstale um pacote usando:

pip desinstalar <pacote>

Mostrar detalhes de um pacote instalado, incluindo versão, site de documentação


e informações do autor usando:

pip show <pacote>

41. Liste compreensões

86
Machine Translated by Google

A compreensão de listas é uma forma de criar listas de uma forma muito concisa.

Suponha que você tenha uma lista:

números = [1, 2, 3, 4, 5]

Você pode criar uma nova lista usando uma compreensão de lista, composta pelo

elementos da lista de números , potência 2:

numbers_power_2 = [n**2 para n em números] # [1, 4, 9, 16,


25]

As compreensões de lista são uma sintaxe que às vezes é preferida aos loops, pois é mais legível

quando a operação pode ser escrita em uma única linha:

numbers_power_2 = [] para n
em números:

números_power_2.append(n**2)

e sobre map() :

números_poder_2 = lista(mapa(lambda n: n**2, números))

42. Polimorfismo
O polimorfismo generaliza uma funcionalidade para que possa funcionar em diferentes tipos.

É um conceito importante na programação orientada a objetos.

Podemos definir o mesmo método em classes diferentes:

87
Machine Translated by Google

class
Cachorro:
def eat(): print('Comendo comida de cachorro')

classe Gato:
def eat():
print('Comendo comida de gato')

Então podemos gerar objetos e chamar o método eat() independentemente da


classe à qual o objeto pertence, e obteremos resultados diferentes:

animal1 = Cachorro()
animal2 = Gato()

[Link]()
[Link]()

Construímos uma interface generalizada e agora não precisamos saber se um


animal é um Gato ou um Cachorro.

43. Sobrecarga do Operador


A sobrecarga de operadores é uma técnica avançada que podemos usar para
tornar as classes comparáveis e fazê-las funcionar com operadores Python.

Vamos fazer uma aula Cachorro:

class
Cachorro: # a classe
Cachorro def __init__(self, nome, idade):
[Link] = nome
[Link] = idade

Vamos criar 2 objetos Dog:

88
Machine Translated by Google

roger = Cachorro('Roger',
8) syd = Cachorro('Syd', 7)

Podemos usar a sobrecarga de operadores para adicionar uma maneira de comparar esses
2 objetos, com base na propriedade age :

class
Cachorro: # a
classe Cachorro def __init__(self, nome, idade):
[Link] = nome
[Link] = idade
def __gt__(self, other):
retorne Verdadeiro se [Link] > [Link] else False

Agora, se você tentar executar print(roger > syd) você obterá o resultado True .

Da mesma forma que definimos __gt__() (que significa maior que), podemos definir os
seguintes métodos:

__eq__() para verificar a igualdade


__lt__() para verificar se um objeto deve ser considerado inferior a outro com o
operador < __le__() para
menor ou igual ( <= ) __ge__() para
maior ou igual ( >= ) __ne__() para
diferente ( != )

Então você tem métodos para interoperar com operações aritméticas:

__add__() responde ao operador + __sub__()


responde ao operador – __mul__() responde
ao operador * __truediv__() responde ao
operador / __floordiv__() responde ao operador //
__mod__() responde ao operador % __pow__ ()
responde ao operador ** __rshift__() responde
ao operador >> __lshift__() responde ao
operador <<

89
Machine Translated by Google

__and__() responde ao operador & __or__()


responde ao | operador __xor__() responde
ao operador ^

Existem mais alguns métodos para trabalhar com outros operadores, mas você entendeu.

44. Ambientes Virtuais


É comum ter vários aplicativos Python em execução no seu sistema.

Quando os aplicativos exigem o mesmo módulo, em algum momento você chegará a


uma situação complicada em que um aplicativo precisa de uma versão de um módulo e
outro aplicativo de uma versão diferente do mesmo módulo.

Para resolver isso, você usa ambientes virtuais.

Usaremos venv . Outras ferramentas funcionam de forma semelhante, como pipenv .

Crie um ambiente virtual usando

python -m [Link]

na pasta onde deseja iniciar o projeto ou onde já possui um projeto existente.

Então corra

fonte .venv/bin/activate

Use source .venv/bin/[Link] na casca do peixe

A execução do programa ativará o ambiente virtual Python.


Dependendo da sua configuração, você também poderá ver a alteração do prompt do
terminal.

O meu mudou de

90
Machine Translated by Google

ÿ pasta

para

(.venv) ÿ pasta

Agora, a execução do pip usará este ambiente virtual em vez do ambiente global.

91
Machine Translated by Google

Conclusão

Muito obrigado por ler este livro.

Para mais informações, acesse [Link].

Envie qualquer feedback, errata ou opinião para flavio@[Link]

92

Você também pode gostar