¡Que sea holivar! Usar args / kwargs o no usar, ¿es esto un indicador de profesionalismo o conocimientos básicos, sin los cuales debería avergonzarse? A menudo, al hojear el github de varios proyectos, se encuentra con la presencia de estos argumentos en funciones simplemente porque. Y este artículo me impulsó a hablar sobre este tema. En general, trato de no usar la argumentación incontrolada en la práctica, pero ¿qué tan común es este método de programación? Comparte en los comentarios. Y disfruta tu lectura.
, *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
*args
**kwargs
. , ?
, , , .
, . - Python
- ?
: , . , , . , , , , , ..
, *args
/ **kwargs
, , , .
, . , , .
, Python , , , .
En el siguiente ejemplo, creamos
uno que genera el nombre de la función que se está ejecutando como una verificación de estado. El decorador se aplica a la función usando @trace
además de la función como se muestra a continuación. Ya que queremos aplicar este decorador a cualquier función con cualquier número de argumentos, necesitamos usar *args
y **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
conclusiones
Evítelos si es posible.
Tenga en cuenta que args
y kwargs
se llaman así simplemente por acuerdo. Puedes llamarlos como quieras. Son las estrellas las *
que **
dan a las funciones ese poder.