Aula 18

Python online

Python Tutorial

Standard library

1 Exception

try:
   ----
   ---- AAA
   ----
except:
   ----
   ----

Um erro/exception em AAA interrompe o bloco e executa o except

1.1 exceptions

  • NameError nome nao definido, variavel sem valor
  • TypeError
  • KeyError chave não existe no dicionario
  • IndexError index numa lista
  • MemoryError nao consegue alocar memoria

lista de exceptions predefinidas

user defined exceptions

1.2 outras versoes de try/except

Diferentes tratamentos para diferentes exceptions

try:
  ---
except TypeError:
  ---   
except (KeyError,IndexError):
  ---
except:
  ---
try:
   ----
except:
   ----
else:
   ---  so executa se nao houve exception
try:
   ----
except A:
   ----
finally:
   ---  sempre executa mesmo que tenha exceptions que nao foram pegas

1.3 outros

Como levantar uma exception raise

Como definir sua propria exception

https://docs.python.org/3/tutorial/errors.html

Commando pass

try:
    ----
    ----
except:
    pass

Dicionarios

try:
   dic[x]+=1
except:
   dic[x]=1

em vez de

if x in dic: 
   dic[x]+=1
else:
   dic[x]=1

2 Funcoes

def func(a,b,linha):
    ''' descricao 
       descricao'''
    ----
    ----
    ----
    return c

2.1 return

  • return expressao
  • return a,b - tupla
  • return None permite que a funçao seja chamada como procedimento/comando
def f(x):
    ----
    return None

f(4)

2.2 default arguments

def askok(prompt, retries=4, reminder='Please try again!'):
  ----

prompt é obrigatorio

  • askok('Do you really want to quit?')
  • askok('Do you really want to quit?',2)
  • askok('Do you really want to quit?',2,'Sim ou nao')

Cuidado: o default so é avaliado uma vez

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(10))
print(f(30))

2.3 Chamando a funcao

  • askok('Do you really want to quit?',2,'Sim ou nao')

ou chamada por nome

  • askok('Do you really want to quit?',remainder = 'Sim ou nao')
  • askok('Do you really want to quit?',retries = 2)
  • askok(retries = 2,prompt = 'Do you really want to quit?')

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

2.4 numero qq de argumentos

def somatoria(*lista):
    soma=0.0
    for x in lista:
       soma+=x
    return soma

3 Variaveis locais e globais

Não ha declaracao de variaveis entao vc nao sabe so vendo se uma variavel é local ou global

Uma variavel é em principio local se a função atribui um valor a ela

x=0
y=10

def f():
  x=100
  print(x+1)
  print(y+1)

f()
print(x)

x é local na funçao, y é global

Onde a variavel é atribuida não é importante

x=0
y=10

def f():
  print(x+1)
  print(y+1)
  if False: 
     x=100 % nunca é executado!

f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
UnboundLocalError: local variable 'x' referenced before assignment

ATENCAO: Modificar uma variavel mutavel nao é atribuir um valor a ela

l={'a':1,'b':2,'c':3}
def ff():
  l['x']=44  # l é global
  

ff()
print(l)

3.1 global

a declaraçao global indica que a variavel sera global

x=0
def f():
  global x
  x=100
  print(x+1)
  print(y+1)


f()
x

4 Funcoes internas a outras funcoes

def fora(x):
   ---- 
   def dentro(y):
      ---
      z = x+y
      return z
   ---

x é local a fora mas é "global" para dentro O mais correto é dizer que x é não local para dentro

4.1 nonlocal

def fora(x):
   z=10
   def dentro(y):
      z = x+y

z é local a dentro

def fora(x):
   z=10
   def dentro(y):
      nonlocal z
      z = x+y

z é o z de fora (mas z não é global).

z=100
def fora(x):
   z=10
   def dentro(y):
      global z
      z = x+y

5 funcoes que retornam funcoes

def gg():

    def aux(l):
      l.reverse()
      return l

    return aux

potencialmente inutil mas sera a base dos decorators

5.1 closures

def gera():
   x=0

   def aux():
     nonlocal x
     x +=1
     print(x)

   return aux

a = gera()

a()
a()
x

x é uma variavel local de gera e nao local de aux mas que se mantem viva por todo o programa

  • escopo é a regiao do programa que pode acessar uma variavel pelo seu nome
  • extensão é o duraçao temporal de uma variavel
  • para variaveis locais a estensao é a duracao do escopo, a não ser que a variavel seja um clousure.