UEM/PPG/PGD
CURSO DE ESPECIALIZAÇÃO À DISTÂNCIA EM FORENSE DIGITAL

Fundamentos

Progamação em Python

print('Hello')

import locale
import pandas as pd
from decimal import Decimal

def to_decimal(value_to_convert):
    locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

    cleaned_str = ''.join(c for c in value_to_convert if c.isdigit() or c in {',', '.'})
    cleaned_str = cleaned_str.replace('.', '')
    cleaned_str = cleaned_str.replace(',', '.')
    
    parsed_decimal = Decimal(cleaned_str)
    return parsed_decimal

df = pd.read_csv('data/payments.csv')
df['value_decimal'] = df.apply(lambda x: to_decimal(x['value']), axis=1)
  • Mestre em Ciências da Computação (UEM)
  • Bacharel em Informática (UEM)
  • Data Engineering Senior at CashU
  • Diretor de projetos de Dados na Mentorstec
  • 13 anos na área de sistemas/software
  • 6 anos na área de dados
  • Professor na Graduação e Pós na Unicesumar
  • Palestrante no Pentaho Day 2019, After Data, cerveja com Dados, NPD UEM, Serpro e UNESPAR.
  • Entusiasta cultural de Ciências de Dados, Engenharia de Dados, Arquitetura de software, boas práticas e Ágil

Henrique Vignando

  • Conte sua experiência mais impactante com programação.

Vocês

{Referências}

# ........
  • Teremos 6 aulas
  • As aulas acontecem normalmente as terças-feiras as 19:00 (Brasilia)
  • As aulas podem ser síncronas (ao vivo) ou assíncronas (gravadas)
  • Todas as aulas serão gravadas, mesmo que síncronas
  • Avaliação será a lista de exercicios aplicado em cada aula, eviado para o email: henrique.vignando@gmail.com
  • A nota mínima para aprovação é 7,0
  • Moodle será usado para compartilhar qualquer tipo de material de apoio as aulas, inclusive as aulas gravadas
  • O Meet permite no máximo 1 hora de gravação, a cada 1 hora faremos um break de 5-15 min.

Apresentação

  • Conhecendo as ferramentas de estudo
  • Trabalho e ensino remoto em Computação

O Ensino à Distância

  • Orientações básicas para aprender na modalidade a distância
  • Planejamento e comprometimento na aprendizagem a distância
  • Técnicas de leitura e estudos

Especificidades

  • Especificidades do EaD em face aos objetivos do curso
  • Recursos pedagógicos do Curso d e Especialização em Sistemas Web e Mobile
  • Estrutura do curso
# Programa

1. Introdução

  • História
  • Principais características
  • Evolução da linguagem
  • Funcionamento da linguagem
  • PEP
  • Jupyter Notebook

2. Variáveis, expressões e instruções

  • Tipos numéricos
  • Operadores aritméticos
  • Tipo texto
  • Operadores com string
  • Trabalhando com datas

3. Mais tipos de dados

  • Listas
  • Tuplas
  • Dicionário
  • Conjunto
  • Booleanos
  • nulo, objeto None

4. Estruturas de controle e funções

  • Chamada de função
  • Funções matemáticas
  • Declaração de funções
  • Passagem de parâmetros e argumentos
  • Escopo de variáveis
# Programa

5. Condicionais e recursividade

  • Operadores lógicos
  • Condicionais encadeadas e aninhadas
  • Recursividade

6. Iteração, laços de repetição

  • Instrução while
  • Instrução for
  • Função range
  • List Comprehensions

7. Orientação a objetos

  • Classes e Objetos
  • Métodos
  • Herança
  • Atributos de classe
  • Métodos estáticos
  • Métodos privados

8. Arquivos

  • Persistência
  • Leitura e escrita

9. Extra

  • Banco de dados
  • Numpy
  • Pandas
# Programa
# 1 - Introdução

1. Introdução

  • História
  • Principais características
  • Evolução da linguagem
  • Funcionamento da linguagem
  • PEP
  • Jupyter Notebook
# 1 - Introdução

1.1 História

  • Python foi criado por Guido van Rossum e lançado pela primeira vez em 20 de fevereiro de 1991 no Centro de Matemática Stichting (CWI) na Holanda como uma sucessora da linguagem ABC.
  • O nome da linguagem de programação Python vem de uma antiga série de esquetes cômicos da BBC chamada Monty Python’s Flying Circus.
  • Em 1995, Guido continuou seu trabalho em Python na Corporation for National Research Initiatives em Reston, Virginia onde ele lançou outras versões da linguagem.
  • Em maio de 2000, Guido e o time principal de Python se mudaram para a BeOpen.com para formar o time BeOpen PythonLabs. Em outubro do mesmo ano, o time da PythonLabs se moveu para a Digital Creations.
  • Em 2001, a Python Software Foundation, uma organização sem fins lucrativos, foi formada especialmente para manter a linguagem e hoje possui sua propriedade intelectual.
# 1 - Introdução

1.2 Principais características

Python é uma linguagem de programação amplamente utilizada, interpretada*, que contempla os tres principais paradgmas de programação, imperativa, orientada a objetos e funcional. Ela é de alto nível com semântica dinâmica, usada para programação de uso geral.

# 1 - Introdução
  • Em certo sentido, também é verdade que Python é tanto uma linguagem interpretada quanto uma linguagem compilada.
  • Um compilador traduz linguagem Python em linguagem de máquina - código Python é traduzido em um código intermediário que deve ser executado por uma máquina virtual conhecida como PVM (Python Virtual Machine).
  • O interpretador faz esta 'tradução' em tempo real para código de máquina, ou seja, em tempo de execução. Já o compilador traduz o programa inteiro em código de máquina de uma só vez e então o executa, criando um arquivo que pode ser rodado (executável).
  • O compilador gera um relatório de erros (casos eles existam) e o interpretador interrompe a tradução quando encontra um primeiro erro.

1.2 Principais características

O interpretador

# 1 - Introdução
  • Em geral, o tempo de execução de um código compilado é menor que um interpretado já que o compilado é inteiramente traduzido antes de sua execução. Enquanto o interpretado é traduzido instrução por instrução.
  • Python é uma linguagem interpretada mas, assim como Java, passa por um processo de compilação. Um código fonte Java é primeiramente compilado para um bytecode e depois interpretado por uma máquina virtual.
  • Mas devemos compilar script Python?  Não precisamos fazer nada porque o Python está fazendo isso para nós automaticamente.
  • Na verdade, é o interpretador Pyhton, o CPython.
  • CPython é uma implementação da linguagem Python. Para facilitar o entendimento, imagine que é um pacote que vem com um compilador e um interpretador Python

1.2 Principais características

O interpretador

# 1 - Introdução

1.2 Principais características

O interpretador

# 1 - Introdução

1.2 Principais características

# 1 - Introdução

1.4 Evolução da linguagem

  • 30 anos desde versão 1 
  • Python 3.0 foi lançado em dezembro de 2008.
  • Com vários novos recursos e melhorias, remoção de recursos obsoletos.
  • Os recursos obsoletos e a incompatibilidade com versões anteriores tornam a versão 3 do Python completamente diferente das versões anteriores. 
# 1 - Introdução

1.5 PEP

  • Python Enhancement Proposal.
  • Um PEP é um documento de design que fornece informações à comunidade Python ou descreve um novo recurso para Python ou seus processos e ambiente.
  • O PEP-8 é um guia de estilos de código Python que é amplamente empregado e existem diversas ferramentas para checá-lo automaticamente.
  • O The Zen of Python é um pequeno texto que fala muito sobre o estilo de programação em Python.
# 1 - Introdução

1.6 Jupyter Notebook

  • Jupyter Notebook é usado para criar documentos de notebook interativos que podem conter código ativo, equações, visualizações, mídia e outras saídas computacionais.
  • O Jupyter Notebook é frequentemente usado por programadores, cientistas de dados e estudantes para documentar e demonstrar fluxos de trabalho de codificação ou simplesmente fazer experiências com código.
# 1 - Introdução

1.6 Jupyter Notebook

  • Let's coding
# 1 - Introdução

Lista Exercício Aula 01

  1. Quem foi o inventor do Python e como ela é mantida até os dias atuais?
  2. Qual a diferença de uma linguagem interpretade de uma linguagem compilada?
  3. Python é uma linguagem compilada ou interpretada? Explique porque.
  4. Descreva quais as vantagens e desvantagens das linguagens interpretadas.
  5. Descreva as principais caracteristicas e utilidades da linguagem Python.
  6. Quais as principais diferenças da versão 2 para versão 3?
  7. Qual foi a principal motivação para uma mudança tão significativa?
  8. Descreva a motivação para criação do PEP.
  9. Para você, qual deficição mais importante do PEP-8
  10. Porque aplicar as tecnicas do The Zen of Python
# 1 - Introdução

Solução da lista de excecício.

# 2. Variáveis, expressões e instruções

2. Variáveis, expressões e instruções

  • Tipos numéricos
  • Operadores aritméticos
  • Tipo texto
  • Operadores com string
  • Trabalhando com datas

2.1 Tipos numéricos

  • Python 3 possui três tipos de números embutidos: int, float e complex.
  • Inteiros são virtualmente ilimitados e podem crescer até o limite da memória.
  • Outro tipo muito conhecido de números é o ponto flutuante, chamado de float. No interpretador padrão CPython, os floats são implementados usando o tipo double do C
  • Os números complexos também estão embutidos na linguagem, mas sua aplicação não é tão comum no dia a dia
int(1.0)
int('9')
float(1)
float('9.2')
float('-inf')
float('+inf')
float('nan')
complex(1, 2)

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.2 Operadores aritméticos

  • O conjunto base de operadores aritméticos com números em Python é:
    • x + y (adição)
    • x - y (subtração)
    • x / y (divisão em ponto flutuante)
    • x // y (divisão descartando parte fracionária)
    • x * y, (multiplicação)
    • x % y (resto)
    • -x (negação)
    • x ** y (potência).

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.2 Operadores aritméticos

  • Existe uma política de coerção de números que define qual o tipo resultante de uma operação que mistura tipos diferentes de números.
  • Se operarmos um int e um float, vamos ter como resultado um float.
  • Se operarmos um int ou float com um complex, vamos ter como resultado um complex.
  • A função type(obj), com apenas um parâmetro, retorna o tipo (ou classe) de um objeto.

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.3 Tipo texto

  • Python possui muitas conveniências na manipulação de strings que vamos entender melhor daqui para a frente.
  • Existem apenas strings, mesmo que contenham apenas um caractere ou seja vazias.
  • Podemos interpretar que elas são sequências de caracteres de tamanho 0 até o máximo suportado.
  • Python tem formas muito convenientes de declarar strings e de formatá-las.
    • Os formatos principais são com ‘ e ", sendo que ao usar um, o outro
      pode ser usado internamente como nos dois últimos exemplos.
    • Outra opção são as multiline strings, com três aspas simples ou três aspas duplas. 

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.3 Tipo texto

  • Ao ler código Python, certamente você ainda encontrará muitas strings com o prefixo u, por exemplo u"minha string"
    • Na versão 2 para dizer que uma string está escrita em unicode.
    • Já na versão 3.3, a sintaxe u"minha string" passou novamente a ser aceita, para facilitar a portabilidade de programas escritos na versão 2, nos quais os literais unicode devem ter obrigatoriamente o prefixo, como em u’string’.
    • Anteriormente, nas versões 3.0 até 3.2, as strings com prefixo u eram um erro de sintaxe.

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.3 Tipo texto

  • String é uma sequência de caracteres
  • Podemos acessar os elementos code points usando um índice.
  • O índice varia de 0 até o tamanho da string menos 1. Se ele for negativo, a contagem é na ordem inversa.

Let's coding <...>

# 2. Variáveis, expressões e instruções

2.4 Operadores com String

  • Para saber o tamanho, usamos len(string).
  • Para acesso por índice, utilizamos variavel[indice], ou para acesso de trechos, a slice notation, como em minha_str[1:2]

Let's coding <...>

# 2. Variáveis, expressões e instruções
  • Por ser uma sequência, além do acesso por índices e slices, podemos executar outras operações como:
    • x in y, se x está em y;
    • x not in y, se x não está em y;
    • x + t, concatenação de x com y;
    • x * y, y repetições de x.
  • As strings são sequências imutáveis de code points. Isso significa que elas têm seu valor definido na criação e que as novas sempre são criadas a partir das operações com elas.
  • Se tentarmos mudar o valor de uma posição ou pedaço de uma string, vamos receber um erro

Let's coding <...>

2.4 Operadores com String

# 2. Variáveis, expressões e instruções
  • Os métodos mais comuns são:
    • capitalize,
    • count,
    • endswith,
    • join,
    • split,
    • startswith
    • replace.

Let's coding <...>

2.4 Operadores com String

  • Podemos interpolar strings usando % ou a função .format()
  • Python também implementa o formato printf de impressão
  • A partir da versão 3 podemos usar o Formatted String Literals
    • permitem incluir o valor das expressões dentro de uma string prefixando a string com f ou F e escrevendo expressões como {expressão}.

Let's coding <...>

2.4 Operadores com String

# 2. Variáveis, expressões e instruções
  • A manipulação de datas faz uma separação simples de início: trabalhar com datas e hora, trabalhar somente com data, ou trabalhar somente com hora (ou horário).
  • Em cada caso, uma classe específica deve ser importada, que pode ser: date, datetime ou time, todas do pacote datetime.

Let's coding <...>

2.5 Trabalhando com datas

# 2. Variáveis, expressões e instruções
  • O objeto date é o mais simples de todos e conta apenas com três atributos: ano, mês e dia.
  • Os objetos datetime também podem ser criados de uma forma semelhante ao objeto date, porem é mais completo e tem mais funcionalidades, além de poder ser usado mesmo que as informações de hora não sejam especificadas

Let's coding <...>

2.5 Trabalhando com datas

# 2. Variáveis, expressões e instruções
  • Quando queremos converter datas, a partir de texto, em objetos do tipo date ou datetime, usamos o método strptime() do objeto datetime.
  • A operação inversa pode ser feita com o método strftime()

Let's coding <...>

2.5 Trabalhando com datas

# 2. Variáveis, expressões e instruções
  • Outra operação comum é a aritmética com datas. Muitas vezes, queremos somar dias, ou meses, ou qualquer outra unidade compatível a uma data.
  • Em outras situações, queremos saber a diferença em dias ou meses, ou até mesmo horas entre duas datas ou dois horários.
  • Todas essas operações podem ser realizadas com os operadores aritméticos, porém com o detalhe de que elas retornem ou usem objetos do tipo timedelta.
  • O objeto timedelta representa uma diferença entre duas datas, ou data/hora.
  • Por ultimo temos as funções de obter a data/hora e a data atual, sendo, respectivamente, o método now() da classe datetime, e o método today() da classe date

Let's coding <...>

2.5 Trabalhando com datas

# 2. Variáveis, expressões e instruções
# 3. Mais tipos de dados

3. Mais tipos de dados

  • Listas
  • Tuplas
  • Dicionário
  • Booleanos
  • nulo, objeto None
# 3. Mais tipos de dados
  • Como uma string, uma lista é uma sequência de valores.
  • Em uma string, os valores são caracteres; em uma lista, eles podem ser de qualquer tipo. Os valores em uma lista são chamados de elementos, ou, algumas vezes, de itens.
  • Há várias formas para criar uma lista; a mais simples é colocar os elementos entre colchetes
    • ([ e ])
    • [10, 20, 30, 40]
    • ['crunchy frog', 'ram bladder', 'lark vomit']

3.1 Listas

# 3. Mais tipos de dados
  • Os elementos de uma lista não precisam ser do mesmo tipo.
  • A lista seguinte contém uma string, um número de ponto flutuante, um número inteiro e (olhe só!) outra lista:
    • ['spam', 2.0, 5, [10, 20]]
  • Uma lista dentro de outra lista é uma lista aninhada.
  • Uma lista que não contém elementos é chamada de lista vazia; que pode ser criarda comcolchetes vazios [].

3.1 Listas

# 3. Mais tipos de dados
  • Listas são mutáveis
  • Índices de listas funcionam da mesma forma que os índices de strings
  • Qualquer expressão de números inteiros pode ser usada como índice.
  • Se tentar ler ou escrever um elemento que não existe, você recebe um IndexError.
  • Se um índice tiver um valor negativo, ele conta de trás para a frente, a partir do final da lista
  • Percorrendo uma lista... A forma mais comum de percorrer os elementos em uma lista é com um loop for

3.1 Listas

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Operações com listas
    • O operador + concatena listas
    • O operador * repete a lista um dado número de vezes
  • Fatias de listas (slices)
  • Métodos de listas
    • append adiciona um novo elemento ao fim de uma lista
    • extend toma uma lista como argumento e adiciona todos os elementos
    • sort classifica os elementos da lista em ordem ascendente
    • etc...

3.1 Listas

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Listas e strings
    • Para converter uma string em uma lista de caracteres, usamos o método list
    • quebrar uma string em palavras, você pode usar o método split(<delimiter>)

3.1 Listas

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Tuplas armazenam registros: cada item na tupla contém os dados de um campo e a posição do item dá seu direção.
  • as Tuplas são
    • Ordenada: as tuplas fazem parte dos tipos de dados de sequência, o que significa que mantêm a ordem de inserção dos dados. Ele mantém o valor do índice para cada item.
    • Inalterável: as tuplas são imutáveis, o que significa que não podemos adicionar ou excluir itens da tupla após a criação.
    • Heterogêneas: Tuplas são uma sequência de dados de diferentes tipos de dados (como inteiro, flutuante, lista, string, etc;) e podem ser acessadas por meio de indexação e fatiamento.
    • Contém duplicatas: as tuplas podem conter duplicatas, o que significa que podem ter itens com o mesmo valor

3.2 Tuplas

# 3. Mais tipos de dados

3.2 Tuplas

# 3. Mais tipos de dados
  • Uma composição de Lista pode ser construida a partir do produto cartesiano de dois ou mais listas.
  • Os itens que compõem o produto cartesiano são tuplas feitas de itens de cada entrada da lista.
  • A lista resultante tem um comprimento igual ao comprimento das listas de entrada multiplicados.

3.2 Tuplas

# 3. Mais tipos de dados

3.2 Tuplas

Let's coding <...>

Let's coding <...>

Let's coding <...>

colors = ['black', 'white']
sizes = ['S', 'M', 'L']

tshirts = [(color, size) for size in sizes for color in colors]
# 3. Mais tipos de dados
  • O interpretador Python e a biblioteca padrão fazem uso extensivo de tuplas como listas imutáveis, e você também deveria fazer o mesmo. Isso traz dois benefícios principais:

    • 1. Clareza: quando você vê uma tupla no código, sabe que seu comprimento nunca mudará.

    • 2. Desempenho: uma tupla usa menos memória do que uma lista do mesmo comprimento e permite que o Python faça algumas otimizações.

  • A imutabilidade de uma tupla só se aplica às referências nela contidas. As referências em uma tupla não podem ser excluídas ou substituídas. Mas se uma dessas referências apontar para um objeto mutável, e esse objeto for alterado, então o valor da tupla muda

3.2 Tuplas

# 3. Mais tipos de dados
  • Desde o Python 2.7, a sintaxe de listcomps e genexps foi adaptada para ditar compreensões (e definir compreensões também, que visitaremos em breve).
  • Um dictcomp constrói uma instância de dict pegando pares key:value de qualquer
    iterável

3.3 Dicionários

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Merging Mappings com |
    • Python 3.9 suporta o uso | e |= para mesclar mapeamentos. Isto faz sentido, uma vez que estes também são os operadores de união
  • Dict views
    • Os métodos de instância dict .keys(), .values() e .items() retornam
      instâncias de classes chamadas dict_keys, dict_values e dict_items,
      respectivamente.
    • Essas visualizações de dicionário são projeções somente leitura das estruturas de dados internas usadas na implementação do dict.
    • Eles evitam a sobrecarga de memória.

3.3 Dicionários

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Assim como em outras linguagens, as operações booleanas podem ser usadas nas expressões avaliadas em um if ou até mesmo em atribuições.
  • Elas são: and, or e not. Ou seja, são os operadores lógicos e, ou e negação, respectivamente
  • Ambos and e or são operadores com curto circuito.
  • No caso do and, a segunda expressão só é avaliada caso a primeira seja True e, no caso do or, a segunda só é avaliada caso a primeira seja False.

3.4 Boleans

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 3. Mais tipos de dados
  • Em outras linguagens de programação, como C ou Java usam null para representar um ponteiro que não aponta para nada, para indicar quando uma variável está vazia ou para marcar parâmetros padrão que você ainda não forneceu.
  • null geralmente é definido como 0 nessas linguagens, mas null em Python é diferente.
  • Python usa a palavra-chave None para definir objetos e variáveis nulas.
  • Embora None sirva alguns dos mesmos propósitos que null em outras linguagens. None não é definido como 0 ou qualquer outro valor.
  • Em Python, None é um objeto!

3.6 Nulo, objeto None

# 3. Mais tipos de dados
  • Entendendo o None
    • retorno padrão, falta de passagem de parametro
    • está na biblioteca padrão
  • Usando o None
    • aplicando no match e usando como retorno (is ou not is None)
    • declarar variaveis nulas
    • como paramentro default 
    • como um valor nulo

3.6 Nulo, objeto None

Let's coding <...>

Let's coding <...>

Let's coding <...>

# 4. Estruturas de controle e funções

4. Estruturas de controle e funções

  • Chamada de função
  • Declaração de funções
  • Passagem de parâmetros e argumentos
  • Escopo de variáveis
  • Em Python, funções são objetos de primeira classe (first class objects)
  • Podemos passadar como parâmetros a variáveis, retornar outras funções e, até mesmo, terem atributos próprios.

4.1 Chamada de função

# 4. Estruturas de controle e funções
  • Normalmente chamamos funções por meio da importação de módulos.
  • A PEP-8 tem recomendações sobre como estruturar o código de importação, como usar ordem alfabética, por exemplo.
  • O comando import pode importar módulos ou objetos (classes e fun-
    ções) para o escopo de execução do código que o executa.
  • Quando fazemos isso, incluímos o nome usado na importação na lista de nomes disponíveis.
  • Um outro caso de uso é importar apenas um objeto específico de um módulo.
  • Nesse caso, utilizamos o comando from/import, sinalizando no from o módulo, e depois do import, informamos que objeto queremos importar

4.1 Chamada de função

# 4. Estruturas de controle e funções

Let's coding <...>

4.2 Declaração de funções

# 4. Estruturas de controle e funções

Let's coding <...>

  • Declarações de função são feitas usando o comando def
  • Funções em Python podem ter valores padrão para seus argumentos
    • O valor padrão do argumento é avaliado na hora da avaliação da declaração da função, e não na hora da chamada.
  • Em Python podemos passar os parâmetros nomeados
def sum(a, b):
	return a + b

c = sum(1, 3)

def salario_descontado_imposto(salario, imposto=27.):
	return salario - (salario * imposto * 0.01)
  
  
salario_descontado_imposto(5000, imposto=0.10)

4.3 Passagem de parâmetros e argumentos

# 4. Estruturas de controle e funções

Let's coding <...>

  • Uma característica muito interessante em Python é que podemos ter funções que recebem números arbitrários de argumentos, posicionais ou nomeados.
  • Essa característica influencia tanto na chamada da função quanto no recebimento dos parâmetros
  • O packing, conseguimos tornar esse caso menos verboso e mais elegante.
    • A lógica é que se temos uma lista ou tupla com os valores que estão na mesma ordem dos parâmetros que a função recebe, podemos usar o packing com *<tuple> ou **<dict>.
  • O unpacking é o processo que é executado dentro da função, e não na chamada.
    • Podemos usar a sintaxe *args ou **kwargs como argumentos para o unpacking dos parâmetros posicionais ou nomeados.

4.4 Escopo de variáveis

# 4. Estruturas de controle e funções

Let's coding <...>

  • Em Python como na maioria das lingagens temos praticamento dois escopos de váriaveis para nos preocuparmos: 
    • 1. Um escopo global de módulo, feito de nomes atribuídos a valores fora de qualquer classe ou bloco funcional.
    • 2. Escopos locais de função, compostos por nomes atribuídos a valores como parâmetros, ou diretamente no corpo da função.
  • Existe um outro escopo de onde podem vir as variáveis, que chamamos de não-local e é fundamental para o closure

4.4 Escopo de variáveis

# 4. Estruturas de controle e funções

Let's coding <...>

  • Em Python, temos escopo léxico e funções de primeira classe.
  • Com esses elementos, podemos usar uma técnica chamada de closure.
  • A técnica consiste em retornar uma função que use internamente variáveis (ou nomes) da função que a define.
5. Condicionais e recursividade

5. Iteração, laços de repetição e Recursividade

  • Instrução while
  • Instrução for
  • Função range
  • List Comprehensions
  • Recursividade
  • O comando while em Python também avalia uma expressão e executa um bloco até que esta seja avaliada como falsa, tenha uma chamada break ou levante uma exceção sem tratamento.
  • No exemplo a seguir vamos permitir que nosso programa calcule para um mesmo salário diversos valores com imposto descontado, utilizando o comando while.

5.1 Instrução while

5. Condicionais e recursividade
salario = int(input('Salario? '))
imposto = 27.

while imposto > 0.:
  imposto = input('Imposto ou (s) para sair: ')

  if not imposto:
  	imposto = 27.
  elif imposto == 's':
  	break
  else:
  	imposto = float(imposto)
  
  print("Valor real: {0}".format(salario - (salario *  (imposto * 0.01))))
  • Percorrer elementos de uma coleção é algo que toda programação em algum monento precisa ser utilizado.
  • Na programação imperativa com Python, o comando for é capaz de tornar essa tarefa trivial. Dado o nome de uma variável e uma lista.
  • O for faz, para cada elemento da lista, uma atribuição do elemento corrente à variável definida no comando, e executa o bloco de código associado a essa variável disponível.
  • Assim como o while, ele também pode ser parado por um break ou por uma exceção não tratada.
  • Um outro recurso que também é compatível com o while é a palavra reservada continue. Esse comando faz com que a execução do bloco vá direto para a próxima iteração.

5.2 Instrução for

5. Condicionais e recursividade
impostos = ['MEI', 'Simples']

for imposto in impostos:
	if imposto.startswith("S"):
		continue
	print(imposto)
  • Em Python 3, um objeto retornado por range() é compatível com o for, porém não é uma lista.
  • Esse objeto do tipo range é um que chamamos de iterável, definido pela PEP-234. Ou seja, conseguimos dele um iterador que a cada chamada retorna um valor diferente, até que uma exceção StopIteration seja levantada e o for terminado. 

 

 

  • No Python 2, a função range() retorna uma lista, o que também é muito intuitivo, mas implica em uma lista de tamanho N ser construída para ser retornada. Se o valor N for muito grande (por exemplo,1.000.000), podem ser ocupados, aproximadamente, 31.074 MB de memória.

5.3 Função Range()

5. Condicionais e recursividade
for i in range(5):
	print(i)
  • Um dos recursos mais distintivos do Python é a list comprehension, que você pode usar para criar funcionalidades poderosas em uma única linha de código.
  • No entanto, muitos desenvolvedores lutam para aproveitar totalmente os recursos mais avançados de compreensão de lista em Python.
  • Alguns programadores até os usam demais, o que pode levar a um código menos eficiente e mais difícil de ler.

5.4 List comprehension

5. Condicionais e recursividade
squares = []
for number in range(10):
    squares.append(number * number)

squares
squares = [number * number for number in range(10)]
squares
  • Então em vez de criar uma lista vazia e adicionar cada elemento ao final, basta definir a lista e seu conteúdo ao mesmo tempo seguindo este formato

 

 

 

  • Toda list comprehension em Python inclui três elementos:
    • expressão é o próprio membro, uma chamada a um método ou qualquer outra expressão válida que retorne um valor
    • membro é o objeto ou valor na lista ou iterável. No exemplo acima, o valor do membro é número. iterável é uma lista, conjunto, sequência
    • gerador ou qualquer outro objeto que possa retornar seus elementos um de cada vez.

5.4 List comprehension

5. Condicionais e recursividade
new_list = [expression for member in iterable]

new_list = [expression for member in iterable if conditional]
  • A recursão nada mais é do que uma função que cham a si mesma.
  • E a parte mais importante dela é saber identificar o caso base, pois ele é o ponto de parada, que garante que a função não execute infinitamente.

5.5 Recursividade

5. Condicionais e recursividade
def fatorial(numero):
    resultado = 1

    for i in range(1, 6):
        resultado = resultado * i

    return resultado
def fatorial(numero):
    if numero == 1:
        return 1
    
    return numero * fatorial(numero - 1)
# 4. Estruturas de controle e funções

6. Orientação a objetos

  • Classes e Objetos
  • Métodos
  • Herança
  • Atributos de classe
  • Métodos estáticos
  • Métodos privados
# 4. Estruturas de controle e funções

7. Arquivos

  • Persistência
  • Leitura e escrita
# 4. Estruturas de controle e funções

8. Extra

  • Banco de dados
  • Numpy
  • Pandas
Made with Slides.com