最新のPythonでは、関数や多くのバリエーションをピクルスにすることができます。このことを考慮
import pickle, time
def foobar(a,b):
print("%r %r"%(a,b))
あなたはそれを漬けることができます
p = pickle.dumps(foobar)
q = pickle.loads(p)
q(2,3)
あなたはクロージャを漬けることができます
import functools
foobar_closed = functools.partial(foobar,'locked')
p = pickle.dumps(foobar_closed)
q = pickle.loads(p)
q(2)
クロージャがローカル変数を使用している場合でも
def closer():
z = time.time()
return functools.partial(foobar,z)
p = pickle.dumps(closer())
q = pickle.loads(p)
q(2)
ただし、内部関数を使用して閉じると失敗します
def builder():
z = 'internal'
def mypartial(b):
return foobar(z,b)
return mypartial
p = pickle.dumps(builder())
q = pickle.loads(p)
q(2)
エラーあり
pickle.PicklingError:ピクルスできません<function mypartial at 0x7f3b6c885a50>:__main__。mypartialとして見つかりません
Python2.7および3.6でテスト済み