Skip to main content
 首页 » 编程设计

python之根据调用参数从python函数返回多个字典

2025年05月04日10shihaiming

我希望我的函数根据调用参数返回多个字典。例如如果我不带参数调用函数,它应该返回所有的字典,否则如果我用参数列表调用它,它应该从函数返回相应的字典。显然,如果我调用时没有参数或一个参数,它工作正常,但我在使用多个值时遇到问题。下面的例子说明了这个问题。

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 

疑问:返回的是列表而不是字典:

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' 

请您参考如下方法:

一个函数只能返回一次。您不能循环并尝试在循环的每次迭代中返回一些东西;第一个返回并结束函数。如果您想“返回多个值”,您真正需要做的是返回一个包含所有值的值,例如值列表或值元组。

此外,最好将字典放入字典中 (sup dawg) 而不是使用局部变量来命名它们。然后你就可以通过按键将它们挑出来。

这是一种返回所选字典列表的方法:

>>> def returnDicts(args=None): 
...     dicts = { 
...         'a': {'a1':1, 'a2':2}, 
...         'b': {'b1':1, 'b2':2}, 
...         'c': {'c1':1, 'c2':2}, 
...         'd': {'d1':1, 'd2':2} 
...     } 
...     if args is None: 
...         args = ['a', 'b', 'c', 'd'] 
...     return [dicts[d] for d in args] 
>>> returnDicts() 
[{'a1': 1, 'a2': 2}, 
 {'b1': 1, 'b2': 2}, 
 {'c1': 1, 'c2': 2}, 
 {'d1': 1, 'd2': 2}] 
>>> returnDicts(['a']) 
[{'a1': 1, 'a2': 2}] 
>>> returnDicts(['a', 'b']) 
[{'a1': 1, 'a2': 2}, {'b1': 1, 'b2': 2}]