Pythonでグローバル変数ルックアップを無効にする(およびそこでの私自身の答え)に基づいて、この最小限の例のように、オプションのパラメーターを使用して関数を使用すると問題が発生しました。
import types
def noglobal(f):
return types.FunctionType(f.__code__, {})
@noglobal
def myFunction(x=0):
pass
myFunction()
基本的に、次のように失敗します。
Traceback (most recent call last):
File "SetTagValue.py", line 10, in <module>
myFunction()
TypeError: myFunction() missing 1 required positional argument: 'x'
なぜx
突然必須パラメータとして扱われるのですか?
デフォルトの引数値を保持したい場合は、それらも渡す必要があります。
import types
def noglobal(f):
return types.FunctionType(f.__code__, {}, f.__name__, f.__defaults__)
@noglobal
def myFunction(x=0):
pass
myFunction()
最後の1つのclosure
パラメーターをに渡すことができますtypes.FunctionType
。これf.__closure__
は、クロージャーを使用して関数を機能させ続ける場合にも継承することができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加