Python: Funções, Módulos e a Biblioteca Padrão9 Parâmetros com valores padrões • Cada...

Preview:

Citation preview

1

Python: Funções, Módulos e a Biblioteca Padrão

Prof. Dr. Dilermando Piva Jr.Python Aula 04

2

Comando print

Python Aula 04

Forma antiga:

3

Comando print

Python Aula 04

Forma mais atual:

4

Funções

...Seu programa tendo cara de programa!

Python Aula 04

5

Definindo FunçõesDefinição da função inicia com “def” Nome da função Argumentos

Identação

“return” indica o retorno da função

Python Aula 04

6

Definindo FunçõesDefinição da função inicia com “def” Nome da função Argumentos

Identação

“return” indica o retorno da função

Sem header fileSem declaração do tipo de retorno da função ou do tipo dos argumentos

Python Aula 04

7

Chamando uma função

>>> def myfun(x, y):

return x * y

>>> myfun(3, 4)

12

• Sintaxe básica para chamar uma função:

Python Aula 04

8

Passagem de parâmetros

• Várias métricas podem ser usadas na passagem dos parâmetrosde uma função:

>>> def myfun(x, y):

return x * y

>>> myfun(3, 4)

12

>>> myfun(y=3, x=4)

12

>>> myfun(3, y=4)

12

Python Aula 04

9

Parâmetros com valores padrões

• Cada parâmetro pode ter um valor padrão.

• Utilizado quando um parâmetro é omitido na chamada da função

def myfun(x, y = 0.3, prompt = True):

res = x * y

if prompt:

print “Resposta é %f”, res

return res

Python Aula 04

10

Parâmetros com valores padrões

def myfun(x, y = 4, prompt = True):

res = x * y

if prompt:

print “Resposta é %i”, res

return res

• Esta função pode ser invocada de várias formas:

>>> myfun(3)

Resposta é 12

12

>>> myfun(x=3, prompt = False)

12

>>> myfun(5, 2, False)

10

Python Aula 04

11

Parâmetros com valores padrões

• Valores default são avaliados apenas uma vez

• Objetos mutáveis (listas, dicionários) armazenam chamadasanteriores

Python Aula 04

12

Parâmetros…

Python Aula 04

13

Múltiplos argumentos (args)

• Pode receber um número arbitrário de parâmetros

• *args (( entra uma tupla para dentro da função ))

Python Aula 04

14

Múltiplos argumentos (args) • Pode receber um número arbitrário de parâmetros

• *args (( entra uma tupla para dentro da função ))

• Pode ocorrer também o desempacotamento automático…passando como parâmetro o *….

Python Aula 04

15

Múltiplos argumentos (kwargs) • Podem receber um número arbitrário de ‘keywords’

• **kwargs

Python Aula 04

Melhorando...

16

Múltiplos argumentos (kwargs) • Podem receber um número arbitrário de ‘keywords’

• **kwargs

Python Aula 04

Um exemplo mais complexo....

17

Múltiplos argumentos

• Podem receber inclusive listas e dicionários.

Python Aula 04

Outro exemplo...

Atenção:

Erro!

18

Valor de retorno• Toda função em Python retorna alguma valor;

• Mesmo funções que não possuem a cláusula return.

• Funções que não possuem return retornam None.

• None é uma constante especial definida na linguagem;

• Similar a NULL, void, ou nil em outras linaguagens;

• É lógicamente equivalente à False;

• O interpretador não imprime None.

Python Aula 04

19

Valor de retorno• Uma função pode retornar mais de um valor

>>> def teste():

x = 1

y = 2

z = 3

return x, y, z

>>> x, y, z = teste()

>>> ret = teste()

>>> ret

(1, 2, 3)

Python Aula 04

20

Observações 1/2

• Funções podem ser utilizadas da mesma maneira queoutro tipo de dado em Python

• Elas podem ser:

- Argumentos para outras funções;

- Valores de retorno de outras funções;

- Atribuídas para outras variáveis;

- Partes de tuplas, listas, etc;

Python Aula 04

21

Observações 2/2• A execução da função cria uma nova tabela de símbolos,

específica para a função.

• Variáveis declaradas dentro da função são unicamentelocais!

• São destruídas após a execução de toda a função.

• Funções tem acesso à variáveis com escopo global.

• Utilizando a cláusula global você pode acessar/modificarvariáveis globais.

Python Aula 04

22

Algumas funções especiais

... e Python também tem seu momento funcional!

Python Aula 04

23

Notação lambda• Funções podem ser definidas sem precisar de rótulos!

• Isto é muito útil quando você quer passar uma pequena função comoargumento para outra função

• Apenas funções simples (única expressão) podem ser definidas nessanotação.

• Notação lambda tem um histórico rico em linguagens de programaçãodesde I.A. passando por LISP, haskell...

Python Aula 04

24

Notação lambda

Python Aula 04

25

Notação lambda

Python Aula 04

26

Notação lambda

Python Aula 04

27

Funções map, reduce e filter

• Função map(func, seq)

Python Aula 04

28

Funções map, reduce e filter

• Função map(func, seq)

• Função interna que aplica uma função func a cada item de um objetosequência (seq) e retorna uma lista com os resultados da chamada da

função.

Python Aula 04

29

Funções map, reduce e filter• Função map(func, seq)

Python Aula 04

30

Funções map, reduce e filter• Função map(func, seq)

Python Aula 04

Observação: após utilizar o objeto MAP, o resultado é zerado.

31

Funções map, reduce e filter

• Função filter(func, seq)

Python Aula 04

32

Funções map, reduce e filter

• Função filter(func, seq)

Python Aula 04

33

Funções map, reduce e filter• Função filter(func, seq)

• Função interna que aplica uma função filtro func a cada item de umobjeto sequência (seq) e retorna uma lista com os resultados quesatisfazem os critérios da função de teste seq.

Python Aula 04

34

Funções map, reduce e filter• Função filter(func, seq)

• Exemplo de utilização→ remoção de dados faltantes

Python Aula 04

35

Funções map, reduce e filter• Função filter(func, seq)

• Outro exemplo mais complexo….

Python Aula 04

36

Funções map, reduce e filter

• Combinando MAP com FILTER

Python Aula 04

37

Funções map, reduce e filter

•Função reduce(func, seq)

•Função que aplica a função sobre o valor corrente retornado pela função(func) junto com o próximo item da lista. Import de functools

Python Aula 04

38

Funções map, reduce e filter•Função reduce(func, seq)

Python Aula 04

39

Funções map, reduce e filter•Função reduce(func, seq)

Python Aula 04

40

Funções map, reduce e filter•Função reduce(func, seq)

Python Aula 04

41

Funções Any e All

Python Aula 04

all()

any()

42

Função sorted()

Python Aula 04

Trabalha igual ao sort() para listas...Entretanto, atua sobre qualque iterável... Inclusive listas.Não altera a original. Cria uma nova!

43

Função zip

Python Aula 04

44

Funções geradoras e iteradores

• Função enumerate

- Função que gera uma tupla (índice, item da tupla) que ajuda na manipulação desequências e dicionários.

• Função yield value

- Função interna poderosa para gerar valores a medida que for chamada.

• Função iter(sequencia/dicionario)

- Função para produzir objetos iteradores em resposta à função interna iter.

Python Aula 04

45

List Comprehension

Python Aula 04

46

List Comprehension

Python Aula 04

47

List Comprehension

Python Aula 04

48

Generators

Python Aula 04

49

Generators

Python Aula 04

50

Generators

Python Aula 04

51

Generators

Python Aula 04

52

Módulos

... Módulos: o que é, como criar e como utilizar.

Python Aula 04

53

Introdução 1/2

• Quando você encerra o interpretador, todas as definições devariáveis e funções são perdidas;

• Solução é gerar um script e roda-lo.

• Mas e se você desejar utilizar um determinada função do scriptem outro programa?

Solução são os módulos!

Python Aula 04

54

Introdução 2/2• Um módulo é um arquivo .py contendo definições e comandos

Python:

- Funções

- Variáveis e constantes

- Classes

- ...

• Vantagem é a possibilidade de adicionar todas estas definiçõesem outros arquivos ou módulos.

• Isto é feito utilizando a cláusula import

Python Aula 04

55

Executando módulos como scripts

• Rodar um módulo Python é similar a importar as definições domódulo para o interpretador.

• Se você fizer python meuModulo.py irá carregar as definições e destruir logo

em seguida!

• Para executar algum determinado código de maneira similar àum script você deve testar a cláusula __name__ :

if __name__ == “__main__”:

print “Execute algum código”

Python Aula 04

56

Pacotes• Pacotes são coleções de módulos Python.

• Qualquer diretório do sistema operacional que contém um arquivo__init__.py dentro é considerado um pacote.

• Pacotes organizam módulos e permitem que programadores importemmódulos da seguinte maneira:

• import meuPacote.meuSubPacote.meuModulo

# meuPacote/

# __init__.py -- vazio

# meuSubPacote/

# __init__.py -- vazio

# meuModulo.py -- modulo importado

Python Aula 04

57

Pacotes (2)• Python dá suporte à hierarquia de pacotes onde

podemos ter uma árvore de pacotes separadaspor pastas

• O arquivo __init__.py é quem caracteriza umpacote

Python Aula 04

58

Pacotes (3)• O comando from <modulo> import * não funciona por default

• Deve-se adicionar o atributo __all__ dentro do arquivo __init__.py dopacote

Python Aula 04

59

Caminho de busca dos módulos• Quando você executa import meuModulo o interpretador

procura pelo arquivo meuModulo.py seguindo umadeterminada regra.

- Primeiramente ele procura pelo arquivo no diretório corrente (onde o interpretadorfoi executado).

- Caso ele não encontre o arquivo no diretório corrente, a busca prossegue em umalista de diretórios que é especificada na variável sys.path

• Você pode atribuir novos diretórios de busca na variávelsys.path (ela é uma lista dentro do módulo sys da bibliotecapadrão)

Python Aula 04

60

Compilando um módulo Python

... Compilando??? Como assim??? Python não é interpretado???

Python Aula 04

?

61

Compilando um módulo Python

• Sim, Python é e continua sendo interpretada!

- Python utiliza o conceito de byte-code (muito conhecido em Java).

• O que acontece quando você importa um módulo:

1) - Interpretador busca pelo arquivo .py correspondente;

2) - Arquivo .py é “compilado” para o byte-code reconhecido pelo interpretador;

3) - Byte-Code é incorporado a tabela de símbolos correntes do interpretador.

Python Aula 04

62

Compilando um módulo Python

• Compilação para byte-code pode ser um gargalo dedesempenho quando você carregar um programa!

- Especialmente se você utiliza muitos módulos em seu programa.

• Solução é pré-compilar os módulos antes de rodar seuprograma!

Python Aula 04

63

Como compilar

• Nas novas versões da linguagem a pré-compilagem é realizadaautomaticamente.

- Interpretador também controla as modificações nos módulos e reproduz as mesmasno byte-code.

• Algumas dicas de otimização:

- Invoque o interpretador com a opção -O. Isto gera código mais otimizado;

- Otimizações realizadas pela pré-compilagem e pelo -O influenciam somente avelocidade em que os módulos são carregados e não executados;

- Você pode rodar só a versão ótimizada de seu módulo (.pyc) sem a necessidade dedo arquivo .py original.

Python Aula 04

64

Como compilar

Python Aula 04

65

Módulos da biblioteca padrão

... O poder de python agora!

Python Aula 04

66

Módulo math• Disponibiliza uma série de funções e constantes matemáticas

que auxiliam na criação de aplicações científicas.

math.sqrt(numero): Retorna a raiz quadrada do número;

math.cos(numero): Retorna o cosseno do número em radiano;

maht.sin(numero): Retorna o seno do número em radiano;

math.tan(numero): Retorna a tangente do número em radiano;

math.radians(numero): Converte o angulo ‘numero’ de graus para radiano;

math.hypot(x, y): Retorna a hipotenusa dos números (catetos) fornecidos;

math.pi: Constante que represente o número pi (3.141592...).

Python Aula 04

The Python Standard Python Library - math

http://docs.python.org/library/math.html

67

Outros módulos numéricos e matemáticos

numbers: manipulação de dados numéricos

http://docs.python.org/library/numbers.html

cmath - Funções matemáticas para números complexos

http://docs.python.org/library/cmath.html

random - Geração de números randomicos

http://docs.python.org/library/random.html

Python Aula 04

68

Módulo sys• Funções/constantes que acessam e manipulam o interpretador.

sys.argv: Lista que contém os argumento passados por parâmetro em um script;

sys.path: Lista com os diretórios de busca do interpretador;

sys.platform: Retorna a plataforma em que o interpretador está rodando;

sys.stdin: Manipulação do stream de entrada;

sys.stdout: Manipulação do stream de saída;

sys.stderr: Manipulação do stream de erro;

Python Aula 04

The Python Standard Python Library - sys

http://docs.python.org/library/sys.html

69

Módulo sys

Python Aula 04

70

Módulo os• Interface para operações com o sistema operacional

os.open(filename, mode): Abre um arquivo do sistema de arquivos;

os.read(file, buffersize): Lê uma determinada fração de um arquivo aberto;

os.write(file, string): Escreve uma determinada string em um arquivo aberto;

os.chmod(file, mode): Altera as permissões de um arquivo;

os.chdir(path): Altera o diretório de trabalho corrente;

os.getenv(key): Retorna uma determinada variável de ambiente do SO;

os.getlogin(): Retorna o login do usuário que está rodando o interpretador;

os.kill(pid): Mata um determinado processo do SO.

Python Aula 04

The Python Standard Python Library - os

http://docs.python.org/library/os.html

71

Módulo re• Módulo responsável pela criação e manipulação de expressões

regulares

• Expressões Regulares é uma forma avançada de mexer comstrings

• Permite que você crie condições para que um trecho sejaencontrado, substituído ou tratado de alguma forma

Python Aula 04

72

Módulo re• Usa-se raw string (string cruas) r “”

• Podemos definir repetição, ocorrência

• Há duas formas de usar:

• Definindo um objeto expressão regular, compilando uma stringde definição

• Usando um comando re passando como argumento uma stringdefinindo uma regexp

Python Aula 04

73

Módulo re• Define-se uma expressão regular e a compila usando o

comando compile

• Pode-se usar expressões comentadas para auxiliar oentendimento do funcionamento da regexp

Python Aula 04

74

Outros MódulosData Compression - zlib, gzip, bz2, zipfile, tarfile

http://docs.python.org/library/archiving.html

Criptografia - hashlib, hmac, mds, sha

http://docs.python.org/library/crypto.html

Linguagens de marcação - sgmlib, htmllib, xml

http://docs.python.org/library/markup.html

Internet - webbrowser, cgi, httplib, ftplib, poplib, smtplib, SocketServer

http://docs.python.org/library/internet.html

Python Aula 04

75

Outros MódulosMultimedia- audioop, imageop, wave

http://docs.python.org/library/mm.html

Internacionalização - gettext, locale

http://docs.python.org/library/i18n.html

Interface Gráfica - Tkinter (TCL/TK)

http://docs.python.org/library/tk.html

Desenvolvimento - pydoc, doctest, unittest

http://docs.python.org/library/development.html

Debug - bdb, pdb

http://docs.python.org/library/debug.html

Python Aula 04

76

Outros MódulosDate e Horário- date, time, datetime, timedelta, tzinfo, timezone

http://docs.python.org/library/datetime.html

Tempo – time.asctime([t]), time.clock(), time.localtime([secs])

http://docs.python.org/library/time.html

Calendário- calendar.iterweekdays(), …

http://docs.python.org/library/calendar.html

Python Aula 04

77

Adicional

Python Aula 04

78

Tratamento de Erros…

Python Aula 04

try:...

except:...

79

Tratamento de Erros…

Python Aula 04

try:...

except:...

Else:...Finally:...