Categories: Python

【Python】文字列を式として評価する方法

この記事では、Pythonで文字列を式として評価する方法を解説します。

単一の式を含んだ文字列を評価するにはeval関数、複数行の文字列をコードとして実行するにはexce関数を使います。どちらも組み込み関数です。

それでは、使い方を見ていきましょう!

文字列を式として実行する

eval関数の引数に式を文字列として引き渡すことでPythonの式として評価されます。評価された式の結果は戻り値として受け取ることができます。

r = eval('1 + 2') print(r) # 3

変数も使用可能です。

x = 10 r = eval('x + 2') print(r) # 12

複数行の文字列を評価したい場合はexec関数を使います。

exec(''' x = 1 y = 2 r = x + y ''') print(r) # 3

eval関数とexce関数の違いは以下のとおりです。

eval関数

  • 1行の文字列を評価
  • 結果を戻り値として返す
  • 外部の変数を使用可能

exce関数

  • 複数行の文字列を実行できる
  • 戻り値はNone
  • 外部の変数を使用可能
  • 内部で生成した変数を外部で使用可能

組み込みの制限

eval関数やexec関数のglobals引数を指定することで評価する文字列内での組み込みの機能を制御することができます。

import copy # eval関数で使用する変数 x = 0 # 元の__builtins__に影響を与えないようにコピーを受け取る b = copy.copy(__builtins__.__dict__) # 組み込み関数の削除 del b['id'] # モジュールの名前空間の代入 g = globals() # __builtins__に先程のbを代入 g['__builtins__'] = b # eval関数で使用するglobalsにgを指定 e = eval('id(x)', g) print(e)

実行結果

Traceback (most recent call last): File "main.py", line 18, in e = eval('id(x)', g) File "", line 1, in NameError: name 'id' is not defined

上記の例では、__builtins__からid関数を削除して式中で制限しました。

まとめ

この記事では、文字列を動的に式として実行する方法を解説しました。

eval関数は、クラスに定義している__repr__メソッドの文字列を使って元のオブジェクトを再生成するのに使われたりします。

__str__と__repr__の使い方

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

リッチなソースコードをブログに載っける方法

この記事では、ブログにソースコードを記述…

2か月 ago

【Mac】Homebrew自体のアンインストール

この記事では、パッケージ管理システムであ…

2か月 ago

【Python】MeCab(めかぶ)を使って形態素解析する

この記事では、Pythonで「MeCab…

2か月 ago

【Python】pytubeを使ってYouTubeの動画をダウンロードする

この記事ではpytubeを使ってYouT…

2か月 ago

【Python】Icrawlerを使って画像を大量にダウンロードする

この記事では、Icrawlerを使って画…

2か月 ago

【Python】Seleniumを使ってWebブラウザを自動化する

この記事では、Seleniumを使ってW…

2か月 ago