Resumo : neste tutorial, você aprenderá sobre os *args
parâmetros do Python e como usá-los para definir funções variadas.
Descompactação de tupla
O seguinte descompacta uma tupla em duas variáveis :
x, y = 10, 20
Python atribui 10 a x e 20 a y. É semelhante a passar dois argumentos para uma função:
def add(x, y):
return x + y
add(10, 20)
Linguagem de código: JavaScript ( javascript )
Neste exemplo, Python passou 10
para x
e 20
para y
.
Da mesma forma, o seguinte atribui 10
a x
, 20
a y
e a lista [30, 40]
a z
:
x, y, *z = 10, 20, 30, 40
print(x)
print(y)
print(z)
Linguagem de código: PHP ( php )
Python usa o mesmo conceito para os argumentos da função. Por exemplo:
def add(x, y, *args):
total = x + y
for arg in args:
total += arg
return total
result = add(10, 20, 30, 40)
print(result)
Linguagem de código: PHP ( php )
A add
função aceita três parâmetros x
,, y
e *args
. O *args
é um argumento especial precedido por um asterisco ( *
).
Ao passar os argumentos posicionais 10
, 20
, 30
e 40
para a função, o Python atribui 10
a x
, 20
a y
e uma tupla (30, 40)
a args
.
É como descompactar uma tupla, exceto que args
é uma tupla, não uma lista.
Introdução ao parâmetro *args do Python
Quando uma função possui um parâmetro precedido por um asterisco ( *
), ela pode aceitar um número variável de argumentos. E você pode passar zero, um ou mais argumentos para o *args
parâmetro.
Em Python, os parâmetros como *args
são chamados de parâmetros variáveis. Funções que possuem parâmetros variáveis são chamadas de funções variáveis.
Observe que você não precisa nomear args
um parâmetro variado. Por exemplo, você pode usar qualquer nome significativo como *numbers
,,, etc.*strings
*lists
No entanto, por convenção, Python usa the *args
como um parâmetro variado.
Vejamos o seguinte exemplo:
def add(*args):
print(args)
add()
Linguagem de código: Python ( python )
Saída:
()
Linguagem de código: Python ( python )
A add
função mostra uma tupla vazia .
O seguinte mostra o tipo do args
argumento e seu conteúdo:
def add(*args):
print(type(args))
print(args)
add()
Linguagem de código: Python ( python )
Saída
<class 'tuple'>
()
Linguagem de código: Python ( python )
Como não passamos nenhum argumento para a add()
função, a saída mostra uma tupla vazia.
O seguinte passa três argumentos para a add()
função:
def add(*args):
print(args)
add(1,2,3)
Linguagem de código: Python ( python )
Saída:
(1, 2, 3)
Linguagem de código: Python ( python )
Agora, args
tem três números 1, 2 e 3. Para acessar cada elemento do args
argumento, você usa a notação de colchetes []
com um índice:
def add(*args):
print(args[0])
print(args[1])
print(args[2])
add(1, 2, 3)
Linguagem de código: Python ( python )
Além disso, você pode usar um for
loop para iterar sobre os elementos da tupla.
O seguinte mostra como adicionar todos os números da args
tupla na add()
função:
def add(*args):
total = 0
for arg in args:
total += arg
return total
total = add(1, 2, 3)
print(total)
Linguagem de código: Python ( python )
Saída:
6
Linguagem de código: Python ( python )
O argumento Python *args esgota os argumentos posicionais
Se você usar o *args
argumento, não poderá adicionar mais argumentos posicionais. No entanto, você pode usar argumentos de palavras-chave .
O exemplo a seguir resulta em erro porque usa um argumento posicional após o *arg
argumento:
def add(x, y, *args, z):
return x + y + sum(args) + z
add(10, 20, 30, 40, 50)
Linguagem de código: JavaScript ( javascript )
Erro:
TypeError: add() missing 1 required keyword-only argument: 'z'
Linguagem de código: JavaScript ( javascript )
Para corrigir isso, você precisa usar um argumento de palavra-chave após o *args
argumento da seguinte maneira:
def add(x, y, *args, z):
return x + y + sum(args) + z
add(10, 20, 30, 40, z=50)
Linguagem de código: JavaScript ( javascript )
Neste exemplo, Python atribui 10
a x
, 20
a y
, (30,40)
a args
e 50
a z
.
Descompactando argumentos
A point
função a seguir aceita dois argumentos e retorna uma representação em string de um ponto com coordenadas x e coordenadas y:
def point(x, y):
return f'({x},{y})'
Linguagem de código: JavaScript ( javascript )
Se você passar uma tupla para a point
função, receberá um erro:
a = (0, 0)
origin = point(a)
Erro:
TypeError: point() missing 1 required positional argument: 'y'
Linguagem de código: JavaScript ( javascript )
Para corrigir isso, você precisa prefixar a tupla a
com o operador *
assim:
def point(x, y):
return f'({x},{y})'
a = (0, 0)
origin = point(*a)
print(origin)
Linguagem de código: PHP ( php )
Saída:
(0,0)
Quando você precede o argumento a
com o operador *
, o Python descompacta a tupla e atribui seus elementos x
e y
parâmetros.
Resumo
- Use argumentos Python
*arg
para uma função que aceita um número variável de argumentos. - O
*args
argumento esgota os argumentos posicionais, portanto você só pode usar argumentos de palavras-chave depois dele.