!!! サイト改修中のため表示が乱れる場合があります(1月末頃まで) !!!
解説

16-35. Pythonで関数内から被代入変数名を検出する方法

やること

タイトルが何言ってるかわからないと思いますが、Pythonで

x = function()

と関数を呼んだとき、関数内から「お、こいつはxに代入しようとしてるな」を検出できないかということです。

結論から言うとそんな便利な方法は用意されていないのですが、無理やり実現することはできます。

方法

こんな感じです。

import inspect

def function():
    #被代入変数名の検出
    frame = inspect.currentframe().f_back
    code = frame.f_code
    calling_line = frame.f_lineno
    with open(code.co_filename, 'r', encoding='utf-8') as f:
        lines = f.readlines()
        calling_code = lines[calling_line - 1]
    variable_name = calling_code.split('=')[0].strip()
    del frame
    
    print(f'{variable_name}に代入したよね?')

    return [None] * len(variable_name.split(','))


x = function()
x, y = function()
xに代入したよね?
x, yに代入したよね?

要は実行されたコードを調べて、関数を呼び出している行の=の左側にある文字を検出するんですね。

ただこの方法は非常に脆くて環境によってあっさりエラーが出るのでまったくおすすめしません。Colabでも機能しません。あしからず。

おわりに

いつ使うんだこれ?

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました