una - paso de parametros python
¿Se puede pasar un número variable de argumentos a una función? (5)
Añadiendo a desenvolver la publicación:
También puedes enviar múltiples argumentos clave-valor.
def myfunc(**kwargs):
# kwargs is a dictionary.
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
Y puedes mezclar los dos:
def myfunc2(*args, **kwargs):
for a in args:
print a
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
Deben ser declarados y llamados en ese orden, es decir, la firma de la función debe ser * args, ** kwargs, y debe llamarse en ese orden.
De manera similar al uso de varargs en C o C ++:
fn(a, b)
fn(a, b, c, d, ...)
Añadiendo a los otros excelentes posts.
A veces no desea especificar el número de argumentos y desea usar claves para ellos (el compilador se quejará si no se utiliza un argumento pasado en un diccionario en el método).
def manyArgs1(args):
print args.a, args.b #note args.c is not used here
def manyArgs2(args):
print args.c #note args.b and .c are not used here
class Args: pass
args = Args()
args.a = 1
args.b = 2
args.c = 3
manyArgs1(args) #outputs 1 2
manyArgs2(args) #outputs 3
Entonces puedes hacer cosas como
myfuns = [manyArgs1, manyArgs2]
for fun in myfuns:
fun(args)
Sí.
Esto es simple y funciona si no tiene en cuenta los argumentos de palabras clave:
def manyArgs(*arg):
print "I was called with", len(arg), "arguments:", arg
>>> manyArgs(1)
I was called with 1 arguments: (1,)
>>> manyArgs(1, 2,3)
I was called with 3 arguments: (1, 2, 3)
Como puedes ver, Python te dará una sola tupla con todos los argumentos.
Para los argumentos de palabras clave, debe aceptarlos como un argumento real separado, como se muestra en la respuesta de Skurmedel .
Si puedo, el código de Skurmedel es para python 2; para adaptarlo a python 3, cambie iteritems
a items
y agregue paréntesis para print
. Eso podría impedir que los principiantes como yo tropezaran con: AttributeError: ''dict'' object has no attribute ''iteritems''
y busca en otra parte (por ejemplo , el objeto '''' dict ''de error no tiene ningún atributo'' iteritems '''' cuando se intenta usar el write_shp () de NetworkX ) por qué esto está ocurriendo.
def myfunc(**kwargs):
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
y:
def myfunc2(*args, **kwargs):
for a in args:
print(a)
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
def f(dic):
if ''a'' in dic:
print dic[''a''],
pass
else: print ''None'',
if ''b'' in dic:
print dic[''b''],
pass
else: print ''None'',
if ''c'' in dic:
print dic[''c''],
pass
else: print ''None'',
print
pass
f({})
f({''a'':20,
''c'':30})
f({''a'':20,
''c'':30,
''b'':''red''})
____________
el código de arriba dará salida
None None None
20 None 30
20 red 30
Esto es tan bueno como pasar argumentos variables por medio de un diccionario