una propias procedimientos por pasar parametros parametro omision metodos lista funciones como comando python function arguments optional-arguments

propias - ¿Cómo creo una función de Python con argumentos opcionales?



pasar una lista como parametro en python (2)

Tengo una función de Python que toma varios argumentos. Algunos de estos argumentos podrían omitirse en algunos escenarios.

def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None): #code

Los argumentos d hasta h son cadenas que tienen diferentes significados. Es importante que pueda elegir qué parámetros opcionales pasar en cualquier combinación. Por ejemplo, (a, b, C, d, e) , o (a, b, C, g, h) , o (a, b, C, d, e, f , o todos ellos (estos son mis elecciones).

Sería genial si pudiera sobrecargar la función, pero leí que Python no admite sobrecarga. Intenté insertar algunos de los argumentos int requeridos en la lista, y obtuve un error de desajuste de argumento.

En este momento estoy enviando cadenas vacías en lugar de los primeros argumentos que faltan como marcadores de posición. Me gustaría poder llamar a una función simplemente usando valores reales.

¿Hay alguna manera de hacer esto? ¿Podría pasar una lista en lugar de la lista de argumentos?

En este momento, el prototipo que usa ctypes se parece a algo como:

_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]


Intente llamarlo como: obj.some_function( ''1'', 2, ''3'', g="foo", h="bar" ) . Después de los argumentos posicionales requeridos, puede especificar argumentos opcionales específicos por nombre.


Simplemente use el parámetro * args, que le permite pasar tantos argumentos como desee después de su a,b,c . Tendría que agregar algo de lógica para mapear args-> c, d, e, f pero es una "forma" de sobrecarga.

def myfunc(a,b, *args, **kwargs): for ar in args: print ar myfunc(a,b,c,d,e,f)

E imprimirá c,d,e,f

De forma similar, podría usar el argumento kwargs y luego podría nombrar sus parámetros.

def myfunc(a,b, *args, **kwargs): c = kwargs.get(''c'', None) d = kwargs.get(''d'', None) #etc myfunc(a,b, c=''nick'', d=''dog'', ...)

Y luego los kwargs tendrían un diccionario de todos los parámetros que son clave valorados después de a,b