Pare de usar * args e ** kwargs em Python

Foto de Matthew Henry no Unsplash
Foto de Matthew Henry no Unsplash

Que haja holivar! Usar args / kwargs ou não usar, é um indicador de profissionalismo ou conhecimento básico, sem o qual você deveria se envergonhar? Freqüentemente, folheando o github de vários projetos, você se depara com a presença desses argumentos nas funções simplesmente porque. E este artigo me levou a falar sobre esse assunto. Em geral, tento não usar argumentação descontrolada na prática, mas quão comum é esse método de programação? Compartilhe nos comentários. E boa leitura.






, *args



**kwargs



Python. , , . , .





!





. , , , .





?






Python :





  • , .





  • , .





def foo(start, end):
    print(start, end)
      
      



, foo ('Hi', end = 'Bye!')



"Hi"



"Bye!"



, end



foo



. ; , , . .





*args



. *



- . .





def foo(*args):
    print(type(args))
    for arg in args:
        print(arg)
        
foo(1, 2, 'end')

# <class 'tuple'>
# 1
# 2
# end
      
      



, **kwargs



. , .





def foo2(**kwargs):
    print(type(kwargs))
    for keyword, value in kwargs.items():
        print(f'{keyword}={value}')
        
foo2(a=1, b=2, z='end')

# <class 'dict'>
# a=1
# b=2
# z=end
      
      



Foto de Susan Holt Simpson no Unsplash
Photo by Susan Holt Simpson on Unsplash

*args



**kwargs



. , ?





, , , .





, . - Python






- ?

: , . , , . , , , , , ..





, *args



/ **kwargs



, , , .





, . , , .





, Python , , , .





Foto de Alexander Schimmeck no Unsplash
Photo by Alexander Schimmeck on Unsplash

No exemplo a seguir, criamos



um que produz o nome da função que está sendo executada como uma verificação de saúde. O decorador é aplicado à função usando @trace



na parte superior da função, conforme mostrado abaixo. Como queremos aplicar este decorador a qualquer função com qualquer número de argumentos, precisamos usar *args



e **kwargs



.





def trace(func):
    def print_in(*args, **kwargs):
        print('Executing function', func.__name__)
        return func(*args, **kwargs)
    return print_in
  
@trace
def calc(a,b):
    print(f'a+b is {a+b}, a-b is {a-b}.')  

calc(1,2)
# Executing function calc
# a+b is 3, a-b is -1.

@trace
def add_all(*args):
    print(reduce(lambda a,b:a+b, args))

a = add_all(1,2,3,4,5)
# Executing function add_all
# 15
      
      




conclusões

Evite-os se possível.





Observe que args



e kwargs



são assim chamados simplesmente por acordo. Você pode chamá-los do que quiser. São as estrelas *



que **



conferem às funções esse mesmo poder.








All Articles