O capítulo descreve funções em Python, incluindo como definir funções, usar parâmetros e valores de retorno, escopo local e global de variáveis, e tratamento de exceções. Funções agrupam códigos reutilizáveis e ajudam a tornar programas mais organizados e fáceis de corrigir.
1. AL SWEIGART. Automatize Tarefas Maçantes com Python: Programação Prática para
Verdadeiros iniciantes. 2015. Novatec.
Capítulo III
FUNÇÕES
Uma Função é como um miniprograma dentro de um programa.
Entendendo melhor o funcionamento da função:
def hello():
print('Howdy!')
print('Howdy!!!')
print('Helo there.')
hello()
hello()
hello()
1- def =definir Função;
2- É o corpo da Função;
3- São chamadas à função.
Resultado: 3x, devido a Função fazer essa chamada.
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
Um dos principais propósitos das funções consiste em agrupar códigos que são
executados diversas vezes. Removendo os processos de deduplicantion, fazendo com que
seus programas sejam mais compactos, e ajudando, por exemplo, o ato de correção de
bug na execução de um programa defeituoso.
2. INSTRUÇÃO DEF COM PARAMETROS.
def hello(name):
print('Hello' + name)
hello(' Dolly')
hello(' Angela')
hello (' Dercideo')
1- Parâmetro é uma variável em que um argumento é armazenado quando uma
função é chamada.
2- Argumento está contido na função.
3- O valor armazenado em um parâmetro é esquecido quando uma função retorna.
VALORES DE RETORNO E INSTRUÇÕES RETURN.
1- Em geral, o valor com o qual uma chamada função é avaliada é
chamado de valor de retorno da função:
len ('hot dog')
7
2- Quando uma função é usada com uma instrução return, o valor de
retorno é aquele com o qual essa expressão é avaliada.
3. import random
def getAnswer(answerNumber):
if answerNumber ==1:
return 'é certo'
elif answerNumber ==2:
return 'é decidido'
elif answerNumber ==3:
return 'sim'
elif answerNumber ==4:
return 'responder novamente'
elif answerNumber ==5:
return 'pergunte novamente mais tarde'
elif answerNumber ==6:
return 'concentre-se e pergunte novamente'
elif answerNumber ==7:
return 'minha repetição é não'
elif answerNumber ==8:
return'perpectiva não tão boa'
elif answerNumber ==9:
return 'muito duvidoso'
r = random.randint(1,9)
fortune =getAnswer(r)
print(fortune)
Obs: Expressões são compostas de valores e operadores.
VALOR NONE (AUSÊNCIA DE VALOR).
Valor chamado None que representa ausência de valor. Assim como os valores booleanos,
deve ser digitado com letra a primeira Letra Maiúscula.
None = Valor sem Valor ( None é usado como um valor de retorno de print ( ).
>>> spam = print('hello')
hello
>>> None==spam
True
(Semelhante ao loop ou for)
ARGUMENTOS NOMEADOS E PRINT ( )
A maioria dos argumentos é identificada pela suposição na chamada à função.
4. Ex: random.randint (1,10) Ok
random.randint (10,1) Not Ok.
Entretanto argumentos nomeados (keyword arguments) São identificados pela palavra-
chave inserida antes da função.
print('hello')
print('world')
Argumento end altera o valor para uma string diferente. (Quebra de linha)
print('hello', end='')
print('world')
O Argumento sep substitui a string default de separação.
print('cats', 'dogs', 'mice')
cats dogs mice
print('cats', 'dogs', 'mice', sep=',')
cats,dogs,mice
Escopo Local e Global:
Escopo Local: Existem no escopo local da função
Escopo Global: Recebem valor fora de todas as funções.
(A variável deve ser de um escopo ou de outro).
#Analogia pelo Contêiner, ao qual quando o Contêiner é destruído as variáveis do escopo
são esquecidas.
Importância:
O código no Escopo global não pode usar nenhuma variável local;
No entanto, um escopo local pode acessar variáveis globais.
O código no escopo local de uma função não pode usar variáveis de nenhum outro
escopo.
Podemos usar o mesmo nome para diferentes variáveis se elas estiverem em
nomes em escopos distintos. Isso quer dizer que pode haver uma variável local
chamada spam e uma variável global de mesmo nome.
Porque usar variáveis locais e globais. Facilita no ato de correção de um bug.
5. Variáveis locais não podem ser usadas no escopo global.
def spam():
eggs=313337
spam( )
print(eggs)
File "C:/Users/derci/AppData/Local/Programs/Python/Python36-32/AAA.py",
line 4, in <module>
print(eggs)
NameError: name 'eggs' is not defined
Escopo local é destruído e não há mais uma variável eggs.
Escopo locais não podem usar variáveis de outros escopos locais.
def spam():
eggs =99
bacon()
print(eggs)
def bacon():
ham=101
eggs =0
spam()
= RESTART: C:/Users/derci/AppData/Local/Programs/Python/Python36-32/aaaa.py =
99
>>>
Variáveis Globais podem ser lidas a partir de um escopo Local
def spam():
print(eggs)
eggs=42
spam()
print(eggs)
Como não há nenhum parâmetro chamados eggs nem qualquer código que atribua um
valor a eggs na função spam, o python considera como um valor global.
6. Variáveis Locais com o mesmo Nome.
É possível de ser feito, porém não é recomendado.
def spam():
eggs ="smap local"
print (eggs) # exibe "smap local
def bacon():
eggs="bancon local"
print (eggs) #exibe "bacon local"
spam()
print(eggs) # exibe "bacon local"
eggs="global"
bacon()
print(eggs) # exibe "global"
bacon local
spam local
bacon local
global
Três variáveis
Uma chamada eggs existente em um escopo local quando spam( ) é chamada.
Uma variável chamada eggs existente em um escopo local quando bancon ( ) é chamada.
Uma variável chamada eggs existe no escopo global
INSTRUÇÃO GLOBAL
Utilizar a instrução global.
def spam( ):
global eggs
eggs = “spam”
eggs = “global”
spam ( )
print(eggs)
>>>
Spam
7. Há quarto regras para dizer se uma variável está em um escopo local ou global:
Se uma variável estiver sendo usada no escopo global (fora de
todas as funções).
Se houver uma instrução global para essa variável em uma função,
ele será uma variável global.
Caso contrário, se a variável for usada em uma instrução de
atribuição na função ela será uma variável local.
Porém, se a variável não for usada em uma instrução de atribuição,
ela será uma variável global.
TRATAMENTO DE EXCEÇÕES:
Para que um programa não falhe como um todo é necessário utilizar uma exceção
com as instruções (de cláusula try e de cláusula except), portanto quando um código é
colocado em cláusula try e provoca um erro, a execução é transferida para a cláusula
except. Após esse código a execução continuará normalmente.
def spam(etBy):
return 42/etBy
try:
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
except ZeroDivisionError:
print ('ERROR: ARGUMENTO INVALIDO')