15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

yield i

def my_func(*args):

print(args)

it = my_generator()

my_func(*it)

>>>

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Funções que aceitam *args são mais bem empregadas em situações nas quais

conhecemos a quantidade de itens na lista de argumentos, e esta é razoavelmente

pequena. É ideal para uma função que aceita muitos literais ou nomes de

variável ao mesmo tempo. Esse arranjo existe unicamente para a conveniência

do programador e para melhorar a legibilidade do código.

O segundo problema com *args é que não será possível adicionar novos

argumentos posicionais (ou seja, de posição fixa) à função sem que todos os

chamadores tenham de ser modificados também. Caso um novo argumento

posicional seja inserido na frente da lista de argumentos de posição variável, os

códigos chamadores dessa função poderão deixar de funcionar se não forem

também atualizados.

def log(sequence, message, *values):

if not values:

print('%s: %s' % (sequence, message))

else:

values_str = ', '.join(str(x) for x in values)

print('%s: %s: %s' % (sequence, message, values_str))

log(1, 'Favorites', 7, 33) # Nova sintaxe de chamada funciona

log('Favorite numbers', 7, 33) # A sintaxe antiga deixa de funcionar

# corretamente

>>>

1: Favorites: 7, 33

Favorite numbers: 7: 33

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!