重複の可能性:
Pythonデコレータを理解する
いくつかのPythonコードをJavaに「移植」しようとしたところ、次のPythonコードに出くわしました。
@fake(lambda s, t, n: [(s.field(i+1), s) for i in range(n)])
def split(secret, threshold, num_players):
shares = []
for i in range(1, num_players+1):
# do some shares calculation
return shares
これには、これまで気づかなかった興味深い構成がかなりあります。誰かがこの@fakethingyとの取引は何ですか?
def fake(replacement):
"""Replace a function with a fake version."""
def decorator(func):
fakes = os.environ.get('FUNC_FAKE', '')
if fakes == '*' or func.__name__ in fakes.split():
return replacement
else:
return func
return decorator
さらに、このラムダは関数名を表しますか、それともそれとの関係は何ですか?