Funções: Com Retorno:
Exemplo:
def fibonacci(n):
a, b, f = 0, 1, ''
while b < n:
a, b, f = b, a+b, f+str(b)+' '
return f
print(fibonacci(20)) # 1 1 2 3 5 8 13
--------------------------------------------------------------------
Funções: Argumento com Valor Padrão:
Podemos definir valores default para argumentos de entrada.
Não utilize como valor default, listas, dicionários ou outros elementos mutáveis, podemos ter diferença nos resultados.
Exemplos:
def aplicar_multa(valor, taxa=0.15):
return valor*(1. + taxa)
print ('Valor a pagar: %5.2f' % aplicar_multa(100))
print ('Valor a pagar: %5.2f' % aplicar_multa(100, .25))
# Valor a pagar: 115.00
# Valor a pagar: 125.00
from math import sqrt
def eq2grau(a, b = .0, c = .0): # o ponto informa parâmetro float
#print(type(a),type(b),type(c))
delta = b**2 - 4*a*c
if delta > 0:
r1 = (-b + sqrt(delta))/(2*a)
r2 = (-b - sqrt(delta))/(2*a)
else:
r1 = complex(-b/(2*a), sqrt(-delta)/(2*a))
r2 = complex(-b/(2*a), -sqrt(-delta)/(2*a))
return ( r1, r2 )
print(eq2grau(2)) # ((-0-0j), (-0+0j))
print(eq2grau(2,4)) # (0.0, -2.0)
print(eq2grau(2,5,3)) # (-1.0, -1.5)
print(eq2grau(2,c=2)) # ((-0+1j), (-0-1j))
print(eq2grau(a=2)) # ((-0-0j), (-0+0j))
print(eq2grau(b=4,a=2)) # (0.0, -2.0)
print(eq2grau(c=3,a=2,b=5)) # (-1.0, -1.5)
print(eq2grau(c=2,a=2)) # ((-0+1j), (-0-1j))
As variáveis b e c possuem valor padrão (opcionais).
Já a variável a é obrigatória e deve ser informada na chamada. Veja:
print(eq2grau(b=2, c=4))
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
print(eq2grau(b=2, c=4))
TypeError: eq2grau() missing 1 required positional argument: 'a'
--------------------------------------------------------------------
Funções: Conjunto de Argumentos:
Um conjunto de argumentos opcionais podem ser passados com o auxílio do curinga “*”.
Exemplo:
def media(*valores):
soma = 0.
for n in valores:
soma += n
return soma/len(valores)
print(media(1,2,3,4,5,6))
Podemos passar 2 conjuntos de argumentos opcionais, utilize '**'.
Este 2º conjunto deve ter a seguinte estrutura:
var_0='valor_0', var_1='valor_1', etc.
Se for usar '*' e '**', use sempre o '*' antes do '**'.
Exemplo:
def fnc2arg(nome, **numeros):
print (nome + ':')
for i in numeros.keys():
print ('%10s : %d' % (i, numeros[i]))
def fnc3arg(nome, *strings, **numeros):
print (nome + ':')
for i in strings:
print ('> ', i)
keys = numeros.keys()
for i in keys:
print ('%10s : %d' % (i, numeros[i]))
print(fnc2arg('Numeros', um=1, dois=2, tres=3, quatro=4, cinco=5))
print(fnc3arg('Numeros', 'Os números são ordenados', 'pelos seus nomes', um=1, dois=2, tres=3, quatro=4, cinco=5))
print(fnc3arg('Numeros', um=1, dois=2, tres=3, quatro=4, cinco=5))
# Numeros:
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
# Numeros:
# > Os números são ordenados
# > pelos seus nomes
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
# Numeros:
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
--------------------------------------------------------------------
Escopo da Variável:
Se uma variável é definida no bloco principal do programa, ela estará disponível no escopo de todas as funções definidas adiante
Exemplo:
a = 5
b = 8
def soma(x,y):
print ('a =',a, 'b =', b)
return x+y
print(soma(2, 7))
# a = 5 b = 8
# 9
Os valores de a e b são exibidos, mesmo elas não tendo sido passadas para a função soma().
Assim, estas variáveis fazem parte do escopo da função soma().
Ao atribuirmos valores para a e b dentro da função produto(), os valores iniciais de a e b não são alterados, por causa do seu escopo original.
Exemplo:
a = 5
b = 8
def produto(x,y):
a, b = x, y
print ('produto: a =',a, 'b =', b)
return a * b
print(produto(2, 7))
# produto: a = 2 b = 7
# 14
print ('a =',a, 'b =', b)
# a = 5 b = 8
--------------------------------------------------------------------
Globals() e Locals():
A função globals() retorna um dicionário com todo o escopo global e os seus valores.
A função locals() retorna um dicionário semelhante ao da função glocals(), mas para escopo local.
Exemplo:
a = 5
b = 8
def produto(x,y):
print(locals())
a, b = x, y
print ('produto: a =',a, 'b =', b)
return a * b
print(produto(2, 7))
print('a =',a, 'b =', b)
print(globals())
# {'y': 7, 'x': 2}
# produto: a = 2 b = 7
# 14
# a = 5 b = 8
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\M\\Desktop\\teste.py', 'a': 5, 'b': 8, 'produto': <function produto at 0x031D1B70>}
--------------------------------------------------------------------
Podemos definir valores default para argumentos de entrada.
Não utilize como valor default, listas, dicionários ou outros elementos mutáveis, podemos ter diferença nos resultados.
Exemplos:
def aplicar_multa(valor, taxa=0.15):
return valor*(1. + taxa)
print ('Valor a pagar: %5.2f' % aplicar_multa(100))
print ('Valor a pagar: %5.2f' % aplicar_multa(100, .25))
# Valor a pagar: 115.00
# Valor a pagar: 125.00
from math import sqrt
def eq2grau(a, b = .0, c = .0): # o ponto informa parâmetro float
#print(type(a),type(b),type(c))
delta = b**2 - 4*a*c
if delta > 0:
r1 = (-b + sqrt(delta))/(2*a)
r2 = (-b - sqrt(delta))/(2*a)
else:
r1 = complex(-b/(2*a), sqrt(-delta)/(2*a))
r2 = complex(-b/(2*a), -sqrt(-delta)/(2*a))
return ( r1, r2 )
print(eq2grau(2)) # ((-0-0j), (-0+0j))
print(eq2grau(2,4)) # (0.0, -2.0)
print(eq2grau(2,5,3)) # (-1.0, -1.5)
print(eq2grau(2,c=2)) # ((-0+1j), (-0-1j))
print(eq2grau(a=2)) # ((-0-0j), (-0+0j))
print(eq2grau(b=4,a=2)) # (0.0, -2.0)
print(eq2grau(c=3,a=2,b=5)) # (-1.0, -1.5)
print(eq2grau(c=2,a=2)) # ((-0+1j), (-0-1j))
As variáveis b e c possuem valor padrão (opcionais).
Já a variável a é obrigatória e deve ser informada na chamada. Veja:
print(eq2grau(b=2, c=4))
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
print(eq2grau(b=2, c=4))
TypeError: eq2grau() missing 1 required positional argument: 'a'
--------------------------------------------------------------------
Funções: Conjunto de Argumentos:
Um conjunto de argumentos opcionais podem ser passados com o auxílio do curinga “*”.
Exemplo:
def media(*valores):
soma = 0.
for n in valores:
soma += n
return soma/len(valores)
print(media(1,2,3,4,5,6))
--------------------------------------------------------------------
Funções: 2 Conjuntos de Argumentos:Podemos passar 2 conjuntos de argumentos opcionais, utilize '**'.
Este 2º conjunto deve ter a seguinte estrutura:
var_0='valor_0', var_1='valor_1', etc.
Se for usar '*' e '**', use sempre o '*' antes do '**'.
Exemplo:
def fnc2arg(nome, **numeros):
print (nome + ':')
for i in numeros.keys():
print ('%10s : %d' % (i, numeros[i]))
def fnc3arg(nome, *strings, **numeros):
print (nome + ':')
for i in strings:
print ('> ', i)
keys = numeros.keys()
for i in keys:
print ('%10s : %d' % (i, numeros[i]))
print(fnc2arg('Numeros', um=1, dois=2, tres=3, quatro=4, cinco=5))
print(fnc3arg('Numeros', 'Os números são ordenados', 'pelos seus nomes', um=1, dois=2, tres=3, quatro=4, cinco=5))
print(fnc3arg('Numeros', um=1, dois=2, tres=3, quatro=4, cinco=5))
# Numeros:
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
# Numeros:
# > Os números são ordenados
# > pelos seus nomes
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
# Numeros:
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# None
--------------------------------------------------------------------
Escopo da Variável:
Se uma variável é definida no bloco principal do programa, ela estará disponível no escopo de todas as funções definidas adiante
Exemplo:
a = 5
b = 8
def soma(x,y):
print ('a =',a, 'b =', b)
return x+y
print(soma(2, 7))
# a = 5 b = 8
# 9
Os valores de a e b são exibidos, mesmo elas não tendo sido passadas para a função soma().
Assim, estas variáveis fazem parte do escopo da função soma().
Ao atribuirmos valores para a e b dentro da função produto(), os valores iniciais de a e b não são alterados, por causa do seu escopo original.
Exemplo:
a = 5
b = 8
def produto(x,y):
a, b = x, y
print ('produto: a =',a, 'b =', b)
return a * b
print(produto(2, 7))
# produto: a = 2 b = 7
# 14
print ('a =',a, 'b =', b)
# a = 5 b = 8
--------------------------------------------------------------------
Globals() e Locals():
A função globals() retorna um dicionário com todo o escopo global e os seus valores.
A função locals() retorna um dicionário semelhante ao da função glocals(), mas para escopo local.
Exemplo:
a = 5
b = 8
def produto(x,y):
print(locals())
a, b = x, y
print ('produto: a =',a, 'b =', b)
return a * b
print(produto(2, 7))
print('a =',a, 'b =', b)
print(globals())
# {'y': 7, 'x': 2}
# produto: a = 2 b = 7
# 14
# a = 5 b = 8
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\M\\Desktop\\teste.py', 'a': 5, 'b': 8, 'produto': <function produto at 0x031D1B70>}
--------------------------------------------------------------------
Função Global():
Permite definir uma variável de escopo global de dentro da função.
Exemplo:
def potencia(x,n):
def potencia(x,n):
global p
p = n
return x**p, locals()
print(potencia(3,3)) # (27, {'n': 3, 'x': 3})
print (p) # 3
print (n) #ERRO
#Traceback (most recent call last):
#File "<stdin>", line 8, in <module>
#NameError: name 'n' is not defined
Executando a função locals() para observar os argumentos passados:
Executando a função locals() para observar os argumentos passados:
**numeros é passado como um dicionário e *strings como uma tupla.
Veja a impressão na tela.
Exemplo:
Veja a impressão na tela.
Exemplo:
def fnc3arg(nome, *strings, **numeros):
print (nome + ":")
for i in strings:
print ('> ', i)
keys = numeros.keys()
for i in keys:
print ('%10s : %d' % (i, numeros[i]))
return locals()
print(fnc3arg('Numeros', 'Os números são ordenados', 'pelos seus nomes', um=1, dois=2, tres=3, quatro=4, cinco=5))
# Numeros:
# Numeros:
# > Os números são ordenados
# > pelos seus nomes
# um : 1
# dois : 2
# tres : 3
# quatro : 4
# cinco : 5
# {'keys': dict_keys(['um', 'dois', 'tres', 'quatro', 'cinco']), 'i': 'cinco', 'numeros': {'um': 1, 'dois': 2, 'tres': 3, 'quatro': 4, 'cinco': 5}, 'strings': ('Os números são ordenados', 'pelos seus nomes'), 'nome': 'Numeros'}
--------------------------------------------------------------------
Nenhum comentário:
Postar um comentário