あなたは、コードのその部分のために別々のスコープを作成せずに、インライン方式でコードを再利用することができますどのCマクロに似feautreはありますか?
例えば:
a=3
def foo():
a=4
foo()
print a
私はそれが4を印刷したいしかし、3を出力します。
私は単に私が代わりに、呼び出し元の範囲内の変更を加えてみましょうだろう(例えば、関数デコレータのような)より原始的な解決策を探していますが、クラスやグローバル辞書のようなオブジェクトを含むソリューションを認識しています。
どうもありがとうございました
編集:私は使用しようとしてOR mutabaleオブジェクトなどの「名前空間」を宣言していた変数を宣言する必要が任意のソリューションは、事前に私が探しているソリューションではありません。
この場合、単に使用しglobal
たキーワードを:
a=3
def foo():
global a
a=4
foo()
print (a)
それがグローバルであれば、外側のスコープを変更します。
外側のスコープを用いて行われる機能である場合nonlocal
はPython 3.0で導入された-その代わりキーワード。
動的スコープ
呼び出し元関数のスコープを変更すると、しかし、パイソンの前提ではなく、言語の特性です。
それはすることができます行うこと。しかし、単に民間のC APIの呼び出しによって(ベークへ」を地元の人々の価値観は、高速なローカル変数に戻す)とdefinettely良い習慣ではありません。
魔法のデコレータを通してそれをやってすることも可能であろうが、デコレータは、内側の関数にバイトコードを書き換えなければならないだろう- caler上の値を取得し、更新することにより、「非ローカル」変数への各アクセスを交換することによってlocals
、そして、最後に-機能のhttps://programtalk.com/python-examples/ctypes.pythonapi.PyFrame_LocalsToFast/