Folha de dicas da linguagem Python
Python é uma linguagem de programação de computador multiplataforma. É uma linguagem de tipagem dinâmica orientada a objetos, originalmente projetada para escrever scripts automatizados (shell). Com a atualização contínua das versões e a adição de novos recursos da linguagem, ela é cada vez mais usada para o desenvolvimento de projetos independentes de larga escala.
Geral
- Python diferencia maiúsculas de minúsculas
- A indexação em Python começa em 0
- Python usa espaços em branco (tabulações ou espaços) para recuar o código em vez de usar chaves.
Ajuda
| Página inicial de ajuda | help() |
| Ajuda da função | help(str.replace) |
| Ajuda do módulo | help(re) |
Módulos (Bibliotecas)
| Listar conteúdo do módulo | dir(module1) |
| Carregar módulo | import module1 * |
| Chamar função do módulo | module1.func1() |
A instrução import cria um novo namespace e executa todas as instruções no arquivo .py associado a esse namespace. Se você deseja carregar o conteúdo do módulo no namespace atual, use “from module1 import *”
Tipos Escalares
Verificar tipo de dado: type(variable)
Inteiros
int/long - Inteiros grandes são convertidos automaticamente em inteiros longos
Pontos flutuantes
float - 64 bits, não há tipo “double”
Booleanos
bool - Verdadeiro (True) ou Falso (False)
Strings
str - Python 2.x padrão: ASCII; Python 3: Unicode
- Strings podem ser aspas simples/aspas duplas/aspas triplas
- Uma string é uma sequência de caracteres, portanto, pode ser tratada como qualquer outra sequência
- Caracteres especiais podem ser completados iniciando com \ ou r
str1 = r'this\f?ff' - A formatação de strings pode ser alcançada de várias maneiras
template = '%.2f %s haha $%d' str1 = template % (4.88, 'hola', 2)
str(), bool(), int() e float() também são funções de conversão de tipo explícitas
Valor Nulo
NoneType(None) - Valor ’null’ do Python (apenas uma instância do objeto None existe)
- None não é uma palavra-chave reservada, mas a única instância de “NoneType”
- None é um valor padrão comum para parâmetros de função opcionais:
def func1(a, b, c = None) - Uso comum de None:
if variable is None :
Data e Hora (Datetime)
datetime - Módulo “datetime” embutido do Python, que fornece os tipos “datetime”, “date”, “time”, etc.
- “datetime” combina as informações armazenadas em “date” e “time”
Criar datetime a partir de string dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’) Obter objeto “date” dt1.date() Obter objeto “time” dt1.time() Formatar datetime para string dt1.strftime(’%m/%d/%Y %H:%M’) Modificar valores de campo dt2 = dt1.replace(minute = 0, second=30) Obter diferença diff = dt1 - dt2 # diff é um objeto ‘datetime.timedelta’
Estruturas de Dados
Tuplas
Uma tupla é uma sequência de comprimento fixo e imutável.
| Criar tupla | tup1=4,5,6 ou tup1 = (6,7,8) |
| Criar tupla aninhada | tup1 = (4,5,6), (7,8) |
| Converter sequência ou iterador para tupla | tuple([1, 0, 2]) |
| Concatenar tuplas | tup1 + tup2 |
| Descompactar tupla | a, b, c = tup1 |
| Trocar variáveis | b, a = a, b |
Listas
Uma lista é uma sequência de elementos de comprimento variável e mutável.
| Criar lista | list1 = [1, ‘a’, 3] ou list1 = list(tup1) |
| Concatenar listas | list1 + list2 ou list1.extend(list2) |
| Adicionar à lista | list1.append(‘b’) |
| Inserir na posição especificada | list1.insert(posIdx, ‘b’) ** |
| Remover elemento por índice | valueAtIdx = list1.pop(posIdx) |
| Remover a primeira ocorrência de um valor | list1.remove(‘a’) |
| Verificar se o valor existe na lista | 3 in list1 => True *** |
| Ordenar lista | list1.sort() |
| Ordenar usando função fornecida pelo usuário | list1.sort(key = len) # Ordenar por comprimento |
Nota:
- O índice de “início” é incluído, mas o índice de “parada” não.
- início/parada podem ser omitidos, por padrão no início/fim.
Slicing (Fatiamento)
Os tipos de sequência incluem ‘str’, ‘array’, ’tuple’, ’list’, etc.
list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]Dicionários (Hashes)
| Criar dicionário | dict1 ={‘key1’ :‘value1’, 2 :[3, 2]} |
| Construir dicionário pela função de mapeamento | dict(zip(keyList, valueList)) |
| Obter elemento | dict1[‘key1’] |
| Alterar/Adicionar elemento | dict1[‘key1’] = ’newValue’ |
| Obter valor, retornar padrão se não existir | dict1.get(‘key1’, defaultValue) |
| Verificar se a chave existe | ‘key1’ in dict1 |
| Excluir elemento | del dict1[‘key1’] |
| Obter lista de Chaves | dict1.keys() |
| Obter lista de Valores | dict1.values() |
| Atualizar valores | dict1.update(dict2) # valores de dict1 substituídos por dict2 |
Conjuntos (Sets)
Um conjunto é uma coleção não ordenada de elementos únicos.
| Criar conjunto | set([3, 6, 3]) ou {3, 6, 3} |
| Verificar se set1 é um subconjunto de set2 | set1.issubset(set2) |
| Verificar se set2 é um subconjunto de set1 | set1.issuperset(set2) |
| Verificar se os conjuntos são idênticos | set1 == set2 |
| União (ou) | set1 |
| Interseção (e) | set1 & set2 |
| Diferença | set1 - set2 |
| Diferença simétrica (xor) | set1 ^ set2 |
Funções
-
Forma básica
def func1(posArg1, keywordArg1 = 1, ..): -
Uso comum de “Funções são objetos”:
def func1(ops = [str.strip, user_define_func, ..], ..): for function in ops: value = function(value) -
Valores de retorno
- Se não houver instrução return ao final de uma função, ela não retorna valor.
- Retornar múltiplos valores através de um objeto tupla
return (value1, value2) value1, value2 = func1(..) -
Funções anônimas (Lambda)
lambda x : x * 2 # def func1(x) : return x * 2
Funções comumente usadas
-
Enumerate retorna uma tupla de sequência (chave, valor), onde chave é o índice do elemento atual.
for key, val in enumerate(collection): -
Sorted ordena todos os objetos iteráveis.
sorted([2, 1, 3]) => [1, 2, 3] -
Zip empacota os elementos correspondentes dos objetos em tuplas e retorna uma lista dessas tuplas.
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed retorna um iterador invertido.
list(reversed(range(10)))
Controle e Fluxo
-
Operadores para condições “if else”:
Verificar se duas variáveis são o mesmo objeto var1 is var2 Verificar se duas variáveis são objetos diferentes var1 is not var2 Verificar se duas variáveis têm o mesmo valor var1 == var2 -
Uso comum do operador for:
for element in iterator : -
‘pass’ - Não faz nada, geralmente usado como instrução de espaço reservado.
-
Expressão ternária
value = true-expr if condition else false-expr -
Não há instrução switch/case, use if/elif em vez disso.
Orientação a Objetos
-
‘object’ é a base para todos os tipos Python
-
Tudo (números, strings, funções, classes, módulos, etc.) é um objeto, e cada objeto tem um ’type’. Variáveis de objeto são ponteiros para sua localização na memória.
-
Forma básica de um objeto
class MyObject(object): # 'self' é equivalente a 'this' em Java/C++ def __init__(self, name): self.name = name def memberFunc1(self, arg1): .. @staticmethod def classFunc2(arg1): .. obj1 = MyObject('name1') obj1.memberFunc1('a') MyObject.classFunc2('b') -
Ferramenta interativa:
dir(variable1) # Lista todos os métodos disponíveis no objeto
Operações com Strings
Juntar listas/tuplas usando um delimitador
', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'Formatar string
string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')Dividir string
sep = '-'
stringList1 = string1.split(sep)Obter substring
start = 1
string1[start:8]Preencher string com zeros
month = '5'
month.zfill(2) => '05'
month = '12'
month.zfill(2) => '12'Tratamento de Exceções
- Forma básica
try:
..
except ValueError as e:
print e
except (TypeError, AnotherError):
..
except:
..
finally:
..- Lançar exceções manualmente
raise AssertionError # Falha na asserção
raise SystemExit # Solicitar saída do programa
raise RuntimeError('Mensagem de erro: ..')Compreensões de Lista, Conjunto e Dicionário
Açúcar sintático para tornar o código mais fácil de ler e escrever.
-
Compreensão de lista
Forma concisa de uma nova lista filtrando elementos de uma coleção e transformando os elementos que passam no filtro em uma única expressão.
Forma básica
[expr for val in collection if condition]Atalho:
result = [] for val in collection: if condition: result.append(expr)A condição de filtro pode ser omitida, deixando apenas a expressão.
-
Compreensão de dicionário
{key-expr : value-expr for value in collection if condition} -
Compreensão de conjunto
Forma básica: Idêntico à compreensão de lista, apenas usando {} em vez de []
-
Compreensão de lista aninhada
Forma básica:
[expr for val in collection for innerVal in val if condition]