以下のコードで参照する場所で、次のコードをその場で呼び出したいと思いMY_MACRO
ます。
# MY_MACRO
frameinfo = getframeinfo(currentframe())
msg = 'We are on file ' + frameinfo.filename + ' and line ' + str(frameinfo.lineno)
# Assumes access to namespace and the variables in which `MY_MACRO` is called.
current_state = locals().items()
を使用するコードを次に示しますMY_MACRO
。
def some_function:
MY_MACRO
def some_other_function:
some_function()
MY_MACRO
class some_class:
def some_method:
MY_MACRO
それが役立つ場合:
MY_MACRO
この機能が必要な理由の 1 つは、必要な場所でコードを繰り返すことを避けたいからです。短くて簡単なものがあると非常に役立ちます。- もう 1 つの理由は、マクロ内に IPython シェルを埋め込み、すべての変数にアクセスできるようにしたいからです
locals().items()
(この他の質問を参照してください) 。
これはPythonでまったく可能ですか? これを機能させる最も簡単な方法は何ですか?
マクロは、それが呼び出されたスコープの名前空間全体へのアクセスを想定していることに注意してください(つまり、単にコードを関数に配置するだけでは機能しません)。関数に配置すると、間違った行番号が出力されることにも注意してください。MY_MACRO
MY_MACRO
lineno