1

呼び出し引数に基づいて、関数が複数の辞書を返すようにします。たとえば、引数なしで関数を呼び出すと、すべての辞書が返されます。引数のリストを指定して呼び出すと、関数から対応する辞書が返されます。どうやら、引数なしまたは1つの引数で呼び出すと、正常に動作しますが、複数の値で使用すると問題が発生します。次の例は、この問題を示しています。

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'
4

2 に答える 2

11

関数は一度だけ戻ることができます。ループして、ループの各反復で何かを返そうとすることはできません。最初の 1 つが返され、関数が終了します。「複数の値を返す」場合は、値のリストや値のタプルなど、それらすべてを含む 1 つの値を返す必要があります。

また、ローカル変数を使用して名前を付けるのではなく、辞書を辞書 (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}]
于 2012-08-05T07:29:06.813 に答える
0

口述の口述をそのようにしないのはなぜですか

def mydicts(arg1=None):
    dicter = {'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 all the dictionaries.
    if arg1 is None:
        arg1 = ['a', 'b', 'c', 'd']

    # Check if arg1 is a list and if not make it one 
    # Example you pass it a str or int

    if not isinstance(arg1, list):
        arg1 = [arg1]

    return [dicter.get(x, {}) for x in arg1]

これにより、アイテムのリストも返されることに注意してください。

于 2012-08-05T07:39:14.900 に答える