Я хочу, чтобы моя функция возвращала несколько словарей на основе вызывающих аргументов. например если я вызываю функцию без аргумента, она должна возвращать все словари else, если я вызываю ее со списком аргументов, она должна возвращать соответствующие словари из этой функции. По-видимому, если я звоню без аргументов или одного arg, он работает нормально, но у меня проблема с использованием его с несколькими значениями. Следующий пример показывает эту проблему.Возвращение нескольких словарей из функции python на основе вызывающего аргумента
def mydef(arg1=None):
a = {'a1':1, 'a2':2}
b = {'b1':1, 'b2':2}
c = {'c1':1, 'c2':2}
d = {'d1':1, 'd2':2}
if arg1 is None:
return a,b,c,d
else:
for x in arg1:
if x == 'a':
return a
elif x == 'b':
return b
w,x,y,z = mydef()
print type(w)
print w
s,t = mydef(['a', 'b'])
print type(s)
print s
print type(t)
print t
Сомнение: Списки возвращаются вместо dicts:
def mydef(args=None):
dicts = { 'a' :{'a1' : 1, 'a2' :2}, 'b' : {'b1' : 1, 'b2' :2}}
if args is None:
args = ['a', 'b']
return [dicts[d] for d in args]
x,y = mydef()
type(x)
>> type 'dict'
type(y)
>> type 'dict'
x = mydef(['a'])
type(x)
>> type 'list'
+1 для "sup dawg". – Blender
Незначительный nitpick: я бы написал 'args = dicts.keys()', так что ваша функция будет работать так, как если бы вы добавили больше словарей –
lol @ dog comment. – klobucar