Python Handbook
Python Handbook
Í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
Aproveitar!
2
Machine Translated by Google
O manual do Python
1. Introdução ao Python 2.
Instalando o Python 3.
Python 2 vs Python 3 5.
5.1. Variável
Comentário 5.4.
Recuo
6. Tipos de
dados 7. Operadores
em 8. O Operador
Booleanos
11. Números
Função integrada
12. Constantes
13. Enums
14. Entrada do
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
36. Introspecção
37. Anotações 38.
Exceções 39. A
1. Introdução ao Python
4
Machine Translated by Google
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.
Graças a esta posição única, o Python provavelmente crescerá ainda mais no futuro.
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.
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.
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
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.
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.
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
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.
Se você abrir seu terminal e digitar python , verá uma tela como esta:
8
Machine Translated by Google
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.
nome = "Flávio"
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
Qualquer linha de Python que você escrever aqui será executada imediatamente.
Você pode acessar o mesmo prompt interativo usando o aplicativo IDLE instalado
Isso pode ser mais conveniente para você porque com o mouse você pode mover e copiar/
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
10
Machine Translated by Google
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.
12
Machine Translated by Google
./[Link]
Isto é especialmente útil quando você escreve scripts que interagem com o terminal.
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:
14
Machine Translated by Google
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
17
Machine Translated by Google
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
hospedar programas de
longa duração você pode instalar pacotes ele fornece um banco de dados de valores-chave para aplica
Python, enquanto o Python 2 continuou sendo mantido com correções de bugs e patches de
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.
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"
idade = 8
O nome de uma variável pode ser composto por caracteres, números, sublinhado. _
21
Machine Translated by Google
nome1
IDADE
idade
a11111
o meu nome
_nome
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.
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)
22
Machine Translated by Google
5.3. Comente
Em um programa Python, tudo depois de uma hash é ignorado e considerado um
comentário:
5.4. Recuo
O recuo em Python é significativo.
nome = "Flávio"
imprimir(nome)
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
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.
idade =
1 tipo(idade) == int #True
fração = 0,1
nome = "Flávio"
idade = 20
24
Machine Translated by Google
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:
e mais!
25
Machine Translated by Google
7. Operadores
Operadores Python são símbolos que usamos para executar operações sobre valores e
variáveis.
operador de atribuição
operadores aritméticos
operadores de comparação
Operadores lógicos
operadores bit a bit
idade = 8
idade = 8
outraVariável = idade
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.
imprimir(-4) #-4
+=
-=
*=
/=
%=
Exemplo:
idade =
8 idade +=
1 # idade agora é 9
27
Machine Translated by Google
==
!=
>
<
>=
<=
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
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
28
Machine Translated by Google
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
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 .
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
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
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:
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'
nome = "Rogério"
nome = "Rogério"
nome += "é um bom cachorro"
Você pode converter um número em uma string usando o construtor da classe str :
str(8) #"8"
"
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 """)
imprimir('''
Rogério é
anos ''')
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.
nome = "Roger"
print(len(nome)) #5
nome = "Roger"
print("ger" no nome) #True
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"
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'
nome = "Roger"
nome[-1] #"r"
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
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:
quando listas vazias, tuplas, conjuntos e dicionários são falsas apenas quando vazias
feito = Verdadeiro
feito = Verdadeiro
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
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
11. Números
Os números em Python podem ser de 3 tipos: int , flutuante e complexo .
idade = 8
idade = int(8)
Para verificar se uma variável é do tipo int , você pode usar a função global type() :
fração = 0,1
36
Machine Translated by Google
Para verificar se uma variável é do tipo float , você pode usar a função global type() :
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() :
37
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
+=
-=
*=
/=
%=
idade =
8 idade += 1
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
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
12. Constantes
Python não tem como forçar uma variável a ser uma constante.
Caso contrário, se você quiser confiar nas convenções de nomenclatura, você pode aderir a esta:
LARGURA = 1024
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.
imprimir([Link])
len(Estado) # 2
40
Machine Translated by Google
nome = "Roger"
print(nome)
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
particular, é que podemos tomar decisões e seguir caminhos diferentes dependendo de seu
41
Machine Translated by Google
condição = Verdadeiro
se condição == Verdadeiro:
Quando o teste de condição é resolvido como True , como no caso acima, seu bloco
é executado.
condição = Verdadeiro
se condição == Verdadeiro:
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("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:
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:
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.
Por exemplo:
44
Machine Translated by Google
Você pode verificar se um item está contido em uma lista com o operador in :
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"
[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
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
[Link]("Teste")
ou o método extend():
[Link](["Teste"])
itens += ["Teste"]
Dica: com extend() ou += não esqueça dos colchetes. Não faça items += "Test" ou
[Link]("Teste")
#ou
[Link](["Teste1", "Teste2"])
46
Machine Translated by Google
Para adicionar um item no meio de uma lista, em um índice específico, use o método
insert() :
Para adicionar vários itens em um índice específico, você precisa usar fatias:
[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.
[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[:]
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:
Uma tupla é ordenada, como uma lista, para que você possa obter seus valores referenciando um
valor de índice:
nomes[0] # "Roger"
nomes[1] # "Syd"
[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
len(nomes) # 2
48
Machine Translated by Google
Você pode verificar se um item está contido em uma tupla com o operador in :
Você também pode extrair uma parte de uma tupla usando fatias:
Obtenha o número de itens em uma tupla usando a função global len() , a mesma que usamos
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 + :
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.
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.
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'
[Link]('nome') # 'Roger'
[Link]('teste', 'default') # 'default'
[Link]('nome') # 'Roger'
[Link]()
Você pode verificar se uma chave está contida em um dicionário com o operador in :
50
Machine Translated by Google
Obtenha uma lista com as chaves de um dicionário usando o método keys() , passando seu
resultado para o construtor list() :
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
len(cachorro) #2
cãoCópia = cão.cópia()
51
Machine Translated by Google
19. Conjuntos
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.
Os conjuntos funcionam bem quando você pensa neles como conjuntos matemáticos.
52
Machine Translated by Google
subconjunto de outro)
Você pode obter uma lista dos itens de um conjunto passando o conjunto para list()
construtor:
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
def olá():
imprimir('Olá!')
53
Machine Translated by Google
Para executar esta função, devemos chamá-la. Esta é a sintaxe para chamar a função:
olá()
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.
def olá(nome):
print('Olá ' + nome + '!')
olá('Roger')
Um argumento pode ter um valor padrão que será aplicado se o argumento não for
especificado:
olá()
#Olá, meu amigo!
54
Machine Translated by Google
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:
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:
55
Machine Translated by Google
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 + '!')
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
'Rogério', 8) :
def olá(nome):
print('Olá ' return + nome + '!')
nome, '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.
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
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]()
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
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.
condição = Verdadeiro
enquanto condição == Verdadeiro:
condição = Verdadeiro
enquanto condição == Verdadeiro:
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
59
Machine Translated by Google
contagem = 0
enquanto contagem < 10:
print("Após o loop")
imprimir (item)
2, 3] .
60
Machine Translated by Google
Os loops while e for podem ser interrompidos dentro do bloco, usando duas palavras-
chave especiais: break e continue .
imprimir (item)
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.
class <class_name>: #
minha turma
61
Machine Translated by Google
classe
Cachorro: # a classe Cachorro
class
Cachorro: # a
classe Cachorro
def latido(self): print('WOF!')
Roger = Cachorro()
Se você correr
imprimir(tipo(roger))
class
Cachorro: # a
classe Cachorro def __init__(self, nome, idade):
[Link] = nome
[Link] = idade
def casca(self):
print('WOF!')
62
Machine Translated by Google
roger = Cachorro('Roger', 8)
print([Link]) # 'Roger'
print([Link]) # 8
[Link]() # 'WOF!'
classe Animal:
def andar(auto):
imprimir('Caminhando..')
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
63
Machine Translated by Google
No programa Python típico, um arquivo atua como ponto de entrada. Os outros arquivos são
def casca():
print('WOF!')
Podemos importar esta função de outro arquivo usando import do, podemos , e uma vez que nós
importar cachorro
latido de cachorro()
latido()
A primeira estratégia nos permite carregar tudo o que está definido em um arquivo.
Nessa pasta, você precisa criar um arquivo vazio chamado __init__.py . Isso informa ao Python
latido de cachorro()
64
Machine Translated by Google
latido()
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]
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.
65
Machine Translated by Google
importar matemática
matemá[Link](4) #2.0
ou
quadrado(4) #2.0
Em breve exploraremos os módulos mais importantes individualmente para entender o que podemos
fazer com eles.
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
O PEP8 é um dos primeiros e também um dos mais importantes. Ele define a formatação e também
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:
66
Machine Translated by Google
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
Dentro de funções/métodos, linhas em branco podem ser usadas para separar blocos de
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 .
ponto de interrupção()
67
Machine Translated by Google
Quando o interpretador Python atinge um ponto de interrupção em seu código, ele irá parar
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
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.
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.
Se você declará-la fora de qualquer função, a variável ficará visível para qualquer código
68
Machine Translated by Google
idade = 8
imprimir(idade)
imprimir(idade) # 8
teste() # 8
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
Python oferece várias maneiras de lidar com argumentos passados quando invocamos
o programa na linha de comando.
69
Machine Translated by Google
Uma maneira básica de lidar com esses argumentos é usar o módulo sys da biblioteca
padrão.
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.
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
70
Machine Translated by Google
importar argparse
parser =
[Link]( description='Este programa imprime um valor HEX colorido'
)
args =parser.parse_args()
imprimir([Link]) # 'vermelho'
Você pode definir uma opção para ter um conjunto específico de valores, usando options :
E existem pacotes comunitários que também oferecem essa funcionalidade, como Click e
71
Machine Translated by Google
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:
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.
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:
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.
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).
diga palavra)
Se você quiser acessar uma variável definida na função externa a partir da função interna, primeiro
contagem = 0
imprimir (contar)
incremento()
contar()
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.
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
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
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:
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.
# isto é um comentário
A utilidade dos docstrings é que eles seguem convenções e, como tal, podem ser
processados automaticamente.
76
Machine Translated by Google
É 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!')
- 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!')
77
Machine Translated by Google
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.
incremento(n)
Incremento
um número
Existem muitos padrões diferentes para formatar documentos, e você pode optar
por aderir ao seu favorito.
36. Introspecção
Funções, variáveis e objetos podem ser analisados por meio da introspecção.
Então, você pode usar print() para obter informações sobre uma função:
78
Machine Translated by Google
imprimir (incrementar)
ou um objeto:
class Cachorro():
def latido(self):
print('WOF!')
Roger = Cachorro()
imprimir (Roger)
print(tipo(incremento)) # <class
'função'>
print(type(roger)) # <class
'__main__.Dog'>
print(tipo(1)) # <class
'int'>
print(type('teste')) # <class
'str'>
79
Machine Translated by Google
imprimir(dir(roger))
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.
80
Machine Translated by Google
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.
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
tente:
# algumas linhas de código
exceto <ERROR1>: #
manipulador <ERROR1>
exceto <ERROR2>: #
manipulador <ERROR2>
outro:
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.
82
Machine Translated by Google
resultado = 2/0
imprimir (resultado )
Adicionar essa operação em um bloco try: nos permite recuperar normalmente e seguir
em frente com o programa:
imprimir (resultado) # 1
Você também pode gerar exceções em seu próprio código, usando a instrução raise :
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
Por exemplo, ao trabalhar com arquivos, cada vez que abrimos um arquivo, devemos
lembrar de fechá-lo.
Em vez de escrever:
84
Machine Translated by Google
with não é útil apenas para trabalhar com arquivos. O exemplo acima serve apenas para apresentar
seus recursos.
É 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 .
85
Machine Translated by Google
Por exemplo, você pode instalar as solicitações pacote, uma biblioteca HTTP popular:
e quando você fizer isso, ele estará disponível para todos os seus scripts Python, porque
os pacotes são instalados globalmente.
86
Machine Translated by Google
A compreensão de listas é uma forma de criar listas de uma forma muito concisa.
números = [1, 2, 3, 4, 5]
Você pode criar uma nova lista usando uma compreensão de lista, composta pelo
As compreensões de lista são uma sintaxe que às vezes é preferida aos loops, pois é mais legível
numbers_power_2 = [] para n
em números:
números_power_2.append(n**2)
e sobre map() :
42. Polimorfismo
O polimorfismo generaliza uma funcionalidade para que possa funcionar em diferentes tipos.
87
Machine Translated by Google
class
Cachorro:
def eat(): print('Comendo comida de cachorro')
classe Gato:
def eat():
print('Comendo comida de gato')
animal1 = Cachorro()
animal2 = Gato()
[Link]()
[Link]()
class
Cachorro: # a classe
Cachorro def __init__(self, nome, idade):
[Link] = nome
[Link] = idade
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:
89
Machine Translated by Google
Existem mais alguns métodos para trabalhar com outros operadores, mas você entendeu.
python -m [Link]
Então corra
fonte .venv/bin/activate
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
92