0

パイソン初心者の質問です。何らかの状態を保持する関数を動的に作成したいとします (整数 i の下のコード内)。定義された関数はオブジェクトなので、後で使用できます。次のコードでは、関数をリストに追加し、 を呼び出すたびに が返されprint(fn(0))ます0 1 2 3 4が、代わりに4 4 4 4 4の最新の値のみiが使用されているように見えます。

fns = []
for i in range(5):

    def fn(x):
        return x + i

    fns += [fn]
print(fns)

for fn in fns:
    print(fn(0))
quit()

このコードがしようとしていることを Python で達成することは可能ですか?

4

2 に答える 2

3

遅延バインディングの問題を回避するには、デフォルトのキーワード パラメータを使用できます。

for i in range(5):
    def fn(x, i=i):  # <-----
        return x + i
    ....
于 2014-12-24T12:29:57.920 に答える
0

独自の状態を保持する関数? 私は次のようにします:

class func:
    # can behave as a function, but can also hold its own value
    def __init__(self, value=0):
        self.value = value

    # this function is the actual 'function' that is called each time
    def __call__(self, arg): 
        self.value += arg
        return self.value

fns = []
for i in range(5):

    # create new function, and give it a starting value of  i
    fn = func(i)

    fns += [fn]


for fn in fns:
    print( fn(0) )

結果は0 1 2 3 4

于 2014-12-24T12:44:39.277 に答える