Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】eval()関数で文字列を評価してオブジェクトを取得する方法

Pythonには、文字列を引数として受け取り、それをPythonの式として評価する組み込み関数 eval() が用意されています。インタプリタは渡された文字列を有効なPython式として解析し、正しければ評価を実行した結果のオブジェクトを返します。

eval()関数の基本的な使い方

eval() の構文は以下のとおりです。

eval(expression[, globals[, locals]])

第一引数には評価対象の文字列を指定します。省略可能な第二・第三引数では、評価時に使用するグローバルおよびローカルの名前空間(辞書)を指定できます。

算術式を含む文字列の評価

最もシンプルな例が、算術式を含む文字列です。評価結果は int 型のオブジェクトとして返されます。

>>> x = eval('2+2')
>>> type(x)
<class 'int'>
>>> x
4

リストやタプルに評価される文字列

文字列の中でリストやタプルを生成する式を書けば、対応する型のオブジェクトが返されます。次の例では、tuple() を使ってタプルを生成しています。

>>> x = eval('tuple([1,2,3])')
>>> x
(1, 2, 3)
>>> type(x)
<class 'tuple'>

ジェネレータ式・リスト内包表記を含む文字列

より複雑な式も評価できます。次の例では、0から4までの値を2倍にするジェネレータ式を list() でリスト化しています。

>>> x = eval('list((a*2 for a in range(5)))')
>>> x
[0, 2, 4, 6, 8]
>>> type(x)
<class 'list'>

eval()を使用する際の注意点

eval() は任意のコードを実行できるため、外部から受け取った信頼できない文字列に対して使用すると、深刻なセキュリティリスク(任意コード実行攻撃)につながる可能性があります。ユーザー入力などを直接評価することは避け、どうしても必要な場合は globalslocals 引数で実行環境を厳しく制限するか、ast.literal_eval() の利用を検討してください。ast.literal_eval() はリスト・辞書・数値などのリテラルのみを安全に評価できる関数です。

  1. Pythonで文字列を逆順にする方法|スライスとreversed()の使い方を解説

    Pythonでは、文字列スライスやrange演算子を活用することで、文字列を簡単に逆順(反転)にすることができます。この記事では、代表的な2つの方法をわかりやすく解説します。 方法1:スライス記法 [::-1] を使う(推奨・高速) 最もシンプルで一般的なのが、スライス記法を使う方法です。ステップに -1 を指定するだけで、文字列を後ろから前へ一文字ずつ取り出せます。 >>> Hello[::-1] olleH >>> Halloween[::-1] neewollaH スライスの仕組み 角括弧 [] の中には、コロン「:」で区切った3つの値を指定できます

  2. Python関数からJSONオブジェクトを返す方法をわかりやすく解説

    Pythonの関数からJSONオブジェクト(JSON形式の文字列)を返すには、標準ライブラリの json モジュールに含まれる json.dumps() 関数を使用します。この関数は、Pythonの辞書(dict)などのオブジェクトをJSON形式の文字列へ変換(シリアライズ)してくれます。 基本的な例 以下は、Pythonの辞書をJSON文字列に変換して返す関数のシンプルな例です。 import json # Pythonの辞書 a = {name: Sarah, age: 24, isEmployed: True} def retjson(): python2json = jso