Usa este decorador:
export_params_decorator.py
import functools
import inspect
import yaml
import sys
def print_params_as_yaml(key_arg, file_obj=sys.stdout):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
# Obtener la firma de la función
sig = inspect.signature(func)
# Vincular los argumentos a la firma de la función
bound_arguments = sig.bind(*args, **kwargs)
# Convertir los argumentos vinculados a un diccionario
params = dict(bound_arguments.arguments)
# Extraer el valor del key_arg
if key_arg not in params:
raise ValueError(f"The key argument '{key_arg}' is not provided in the function call.")
key_value = params.pop(key_arg)
# Añadir el nombre de la función a los parámetros
params['func'] = func.__name__
yaml_dict = {key_value: params}
# Convertir el diccionario de parámetros a formato YAML
params_yaml = yaml.dump(yaml_dict, default_flow_style=False)
# Imprimir o escribir los parámetros en formato YAML
file_obj.write(params_yaml)
file_obj.write('\n\n')
# Ejecutar la función
return func(*args, **kwargs)
return wrapper
return decoratorkey_arg es el parámetro de función a usar
Ejemplo de uso:
export_params_example.py
# Ejemplo de uso:
@print_params_as_yaml(key_arg='a')
def example_function(a, b, c=3, d=4):
return b + c + d
# Probar el decorador
example_function("foo", 2, d=5)
# Imprime
# foo:
# b: 2
# d: 5
# func: example_function
Echa un vistazo a artículos similares por categoría:
Python
Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow