PythonでのEvalについて知っておくべきことすべて



この記事では、PythonでのEvalの詳細で包括的な知識を提供します。その欠点と使用例を示します。

周りを見渡すと、ニーズを満たすために特別に構築されたアプリケーションが見つかります。これらのアプリケーションの開発に使用できるプログラミング言語はたくさんありますが、それらのほとんどは 。 Pythonは、その優れた機能と多様性の向上とともに、強力でありながら常に非常に便利な独自の製品を提供します。このPythonでの評価の記事では、次の点について説明します。

PythonのEvalとは何ですか?

Pythonのeval関数は、最も興味深いオプションの1つです。それをハックと呼ぶ人もいれば、ショートカットと呼ぶ人もいますが、どちらの方法でも、Pythonコード内でPythonプログラムを実行するためにそれを利用できます。かなりかっこいいですよね?





名前空間c ++とは

eval関数を使用する場合、基本的には、eval関数の括弧で囲まれたインタープリターを実行するように促します。

PythonLogo-Pythonでの評価Pythonでeval関数を使用するための構文は次のとおりです。



eval(式、グローバル=なし、ローカル=なし)

上記の構文では、

  1. 式: これは、Pythonプログラム自体の中でPython式として解析および評価される文字列またはコードの一部です。



  2. グローバル: 上記の式を実行するために使用できるすべてのグローバルメソッドを定義するために使用されるのは辞書です。これはオプションのエンティティであり、その用途はニーズによって異なります。

  3. 地元の人: グローバルと同様に、これは変数だけでなく使用可能なローカルメソッドを指定するために使用される別の辞書です。

この関数の使用法をよりよく理解するために、以下の例を見てください。

from math import * def secret_function():return 'シークレットキーは1234'def function_creator():#評価される式expr = raw_input('関数を入力(xに関して): ')#式で使用される変数x = int(raw_input( 'xの値を入力:'))#式の評価y = eval(expr)#評価結果の出力print( 'y = {}'。format(y))if __name__ == '__main __':function_creator ()

上記の例では、function_creatorは、プログラムの実行時にユーザーが作成した数式を評価する関数です。

出力:

関数を入力します(xに関して):x *(x + 1)*(x + 2)

x:3の値を入力します

y = 60

分析

上で共有したコードを確認したので、もう少し分析してみましょう。

文字列を日付javaに変換する
  1. 上記の関数は、式xの任意の変数を入力として受け取ります。

  2. 実行されると、ユーザーはxの値を入力するように求められます。その後、プログラムの結果が生成されます。

  3. 最後に、Pythonプログラムは、を解析してeval関数を実行します。expr引数として。

Evalの欠点

Pythonの他の組み込み関数と同様に、evalにもいくつかの欠点があり、説明しないと問題が発生する可能性があります。

関数の主な脆弱性の1つである上記の例を見ると、function_creatorは、プログラム内の非表示の値を公開し、デフォルトでevalが括弧内にあるものをすべて実行するため、有害な関数を呼び出すことができるということです。

これをさらに理解するには、以下の例を見てください。

ユーザーからの入力

関数を入力します(xに関して):secret_function()

x:0の値を入力します

出力:

y =秘密鍵は1234です

eval関数の使用に伴うもう1つの危険な状況は、osモジュールをインポートすることです。 osモジュールをインポートすると、Pythonは、ユーザーからの認証なしに、ネイティブシステムに存在するファイルの読み取りと書き込みを行うことができます。そのような場合、シングルをタイプミスするとコード行を入力すると、すべてのネイティブファイルが削除される可能性があります。

これらすべての欠点の解決策は、eval関数の機能を制限することにあります。

PythonでEvalを安全にする

Evalには、デフォルトで、アクセスできる関数またはすでに定義されている関数を解析するオプションがあります。コードを書くときにこれを覚えておくと、evalの機能がかなり制限されるため、何も問題がないことを確認できます。

この概念をさらに理解するには、以下の例を見てください。

from math import * def secret_function():return 'シークレットキーは1234'def function_creator():#評価される式expr = raw_input('関数を入力(xに関して): ')#式で使用される変数x = int(raw_input( 'xの値を入力してください:'))#安全な辞書に変数xを渡すsafe_dict ['x'] = x#式を評価するy = eval(expr、{'__ builtins __':None}、safe_dict)#印刷評価結果print( 'y = {}'。format(y))if __name__ == '__ main __':#安全なメソッドのリストsafe_list = ['acos'、 'asin'、 'atan'、 'atan2'、 'ceil '、' cos '、' cosh '、' degrees '、' e '、' exp '、' fabs '、' floor '、' fmod '、' frexp '、' hypot '、' ldexp '、' log '、 'log10'、 'modf'、 'pi'、 'pow'、 'radians'、 'sin'、 'sinh'、 'sqrt'、 'tan'、 'tanh']#安全なメソッドの辞書を作成するsafe_dict = dict ([(k、locals()。get(k、None))for k in safe_list])function_creator()

ユーザーからの入力

関数を入力します(xに関して):secret_function()

x:0の値を入力します

出力:

NameError:名前 'secret_function'が定義されていません

evalのアクセスを制限することでわかるように、有害であることが判明する可能性のある誤った出力の可能性は否定されています。

Javaで休止状態とは何ですか

Evalの使用

上記のセクションで説明したように、いくつかのセキュリティ上の理由により、evalはそれほど一般的に使用されていません。しかし、それでも、evalの使用が役立つことが判明した特定のユースケースがあります。これらの中で最も重要なもののいくつかはです。

  1. ユーザーが独自のスクリプトレットを入力してプログラムの出力を変更するようにしたい場合は、eval関数を使用すると便利です。

  2. 式を記述して数学的なクエリを解決する場合、式パーサーを作成するよりもはるかに簡単なので、evalを利用できます。

evalについてすべて理解できたので、長所と短所を念頭に置いて、日常のプログラミングで同じものを利用してください。

これで、このEval inPythonの記事は終わりです。 Pythonとそのさまざまなアプリケーションに関する深い知識を得るには、次のことができます。 24時間年中無休のサポートと生涯アクセスを備えたライブオンライントレーニング用。

質問がありますか? 「Pythonでの評価」のコメントセクションでそれらに言及してください。折り返しご連絡いたします。