Python *argumentos

Resumo : neste tutorial, você aprenderá sobre os *argsparâ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 10para xe 20para y.

Da mesma forma, o seguinte atribui 10a x, 20a ye 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 addfunção aceita três parâmetros x,, ye *args. O *argsé um argumento especial precedido por um asterisco ( *).

Ao passar os argumentos posicionais 10, 20, 30e 40para a função, o Python atribui 10a x, 20a ye 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 *argsparâmetro.

Em Python, os parâmetros como *argssã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 argsum parâmetro variado. Por exemplo, você pode usar qualquer nome significativo como *numbers,,, etc.*strings*lists

No entanto, por convenção, Python usa the *argscomo 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 addfunção mostra uma tupla vazia .

O seguinte mostra o tipo do argsargumento 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, argstem três números 1, 2 e 3. Para acessar cada elemento do argsargumento, 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 forloop para iterar sobre os elementos da tupla.

O seguinte mostra como adicionar todos os números da argstupla 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:

6Linguagem de código:  Python  ( python )

O argumento Python *args esgota os argumentos posicionais

Se você usar o *argsargumento, 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 *argargumento:

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 *argsargumento 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 10a x, 20a y, (30,40)a argse 50a z.

Descompactando argumentos

A pointfunçã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 pointfunçã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 acom 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 acom o operador *, o Python descompacta a tupla e atribui seus elementos xe yparâmetros.

Resumo

  • Use argumentos Python *argpara uma função que aceita um número variável de argumentos.
  • O *argsargumento esgota os argumentos posicionais, portanto você só pode usar argumentos de palavras-chave depois dele.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *