-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkwargs.py
More file actions
123 lines (76 loc) · 2.93 KB
/
Copy pathkwargs.py
File metadata and controls
123 lines (76 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""
**kwargs
Poderíamos chamar este parâmetro de **xis, mas por convenção chamamos de **kwargs
Este é só mais um parâmetro, mas diferente do *args que coloca os valores extras
em uma tupla, o **kwargs exige que utilizemos parâmetros nomeados, e transforma esses
parâmetros extras em um dicionário.
# Exemplo
def cores_favoritas(**kwargs):
for pessoa, cor in kwargs.items():
print(f'A cor favorita de {pessoa.title()} é {cor}')
cores_favoritas(marcos='verde', julia='amarelo', fernanda='azul', vanessa='branco')
# OBS: Os parâmetros *args e **kwargs não são obrigatórios.
cores_favoritas()
cores_favoritas(geek='navy')
# Exemplo mais complexo
def cumprimento_especial(**kwargs):
if 'geek' in kwargs and kwargs['geek'] == 'Python':
return 'Você recebeu um cumprimento Pythônico Geek!'
elif 'geek' in kwargs:
return f"{kwargs['geek']} Geek!"
return 'Não tenho certeza quem você é ...'
print(cumprimento_especial())
print(cumprimento_especial(geek='Python'))
print(cumprimento_especial(geek='Oi'))
print(cumprimento_especial(geek='especial'))
# Nas nossas funções, podemos ter (NESTA ORDEM):
- Parâmetros obrigatórios;
- *args;
- Parâmetros detault (não obrigatórios);
- **kwargs
def minha_funcao(idade, nome, *args, solteiro=False, **kwargs):
print(f'{nome} tem {idade} anos')
print(args)
if solteiro:
print('Solteiro')
else:
print('Casado')
print(kwargs)
minha_funcao(8, 'Julia')
minha_funcao(18, 'Felicity', 4, 5, 3, solteiro=True)
minha_funcao(34, 'Felipe', eu='Não', voce='Vai')
minha_funcao(19, 'Carla', 9, 4, 3, java=False, python=True)
# Entenda por quê é importante manter a ordem dos parâmetros na declaração
# Função com a ordem correta de parâmetros
#def mostra_info(a, b, *args, instrutor='Geek', **kwargs):
# return [a, b, args, instrutor, kwargs]
# Função com a ordem incorreta de parâmetros
def mostra_info(a, b, instrutor='Geek', *args, **kwargs):
return [a, b, args, instrutor, kwargs]
a = 1
b = 2
args = (3,)
instrutor = 'Geek'
kwargs = {'sobrenome': 'University', 'cargo': 'Instrutor'}
print(mostra_info(1, 2, 3, sobrenome='University', cargo='Instrutor'))
# Desempacotar com **kwargs
def mostra_nomes(**kwargs):
return f"{kwargs['nome']} {kwargs['sobrenome']}"
nomes = {'nome': 'Felicity', 'sobrenome': 'Jones'}
print(mostra_nomes(**nomes))
"""
def soma_multiplos_numeros(a, b, c, **kwargs):
print(a + b + c)
lista = [1, 2, 3]
tupla = (1, 2, 3)
conjunto = {1, 2, 3}
soma_multiplos_numeros(*lista)
soma_multiplos_numeros(*tupla)
soma_multiplos_numeros(*conjunto)
dicionario = dict(a=1, b=2, c=3)
soma_multiplos_numeros(**dicionario)
# OBS! Os nomes da chave em um dicionário devem ser os mesmos dos parâmetros da função
# dicionario = dict(d=1, e=2, f=3) # TypeError
# soma_multiplos_numeros(**dicionario)
dicionario = dict(a=1, b=2, c=3, nome='Geek')
soma_multiplos_numeros(**dicionario, lang='Python')