1

たとえば、2 つの変数を出力するメソッドがあります。

def some_method():
    #some calculations
    return first_value, second_value

ここで、1 行の結果を変数とリストに入れたいと思います (first_valueいくつかの変数に入れsecond_value、新しい要素としてリストに追加します)。

私はこのようなことができることを知っています:

def some_method(list):
    #some calculations
    return first_value, list+[second_value]

その後:

some_variable, list = some_method(list)

しかし、メソッド引数としてリストを渡すことなく、1行でそれを行う機会はありますか?

4

5 に答える 5

1

それを行うには、次のように関数デコレータを使用します。

def remember_history(f):
    l = []
    def wrapper(*args,**kw):
        x,e = f(*args,**kw)
        l.append(e)
        return x,l
    return wrapper

def some_method():
    return 1,2

f = remember_history(some_method)
print f() # 1,[2]
print f() # 1,[2,2]
print f() # 1,[2,2,2]
于 2013-07-04T08:19:37.887 に答える
1

本当に必要な場合は、リストをサブクラス化して、次のようなものを作成できます。

>>> def f():
...     return 1, 2

>>> class MyList(list):
...     def __setattr__(self, name, value):
...         if name == '_assign_append':
...             self.append(value)
... 

>>> l = MyList()

>>> a, l._assign_append = f()
>>> a
1
>>> l
[2]
>>> b, l._assign_append = f()
>>> a
1
>>> b
1
>>> l
[2, 2]
于 2013-07-04T07:59:41.320 に答える
1

リストの 2 番目の値を返すことができますか?

このような:

>>> L = [1, 2, 3]
>>> def bar():
...     return 'shenanigan', [4]
... 
>>> myVar, L[len(L):] = bar()
>>> L
[1, 2, 3, 4]

ただし、実際には、2 番目の戻り値を中間変数に代入し、2 行を使用して list.append() を使用することもできます。

于 2013-07-04T08:00:23.293 に答える
0

関数を 2 回呼び出す必要はありません。

>>> L = []
>>> def foo():
...     return 1, 2
... 
>>> myvar, L = foo()[0], L+[foo()[1]] 
>>> myvar
1
>>> L
[2]
于 2013-07-04T07:46:50.500 に答える