exce機能
exceパイソンが内蔵されている機能、名前空間符号列に付加することができます。
関数eval()やexec()関数は似ている、あなたはPythonコードの文字列(文字列の形で提供されたコード)、Pythonインタプリタと同等のものを実行することができます。
両方とも、evalは()最後に実行結果を返す、とexec()の実行結果が完了していない返すことを除いて、
evalの()とexec()の使用
evalの()関数の構文は次のとおりです。
evalの(ソース、グローバル=なし、地元の人々=なし、/)
次のように構文とexec()関数です。
EXEC(ソース、グローバル=なし、地元の人々=なし、/)
幹部(文字列コード、グローバル名前空間、ローカル名前空間)
*********** * 注:私はあなたがあなた自身の名前空間を作り出すことができることを証明したいです。
次のように様々なパラメータの特定の意味であることを特徴と他のに加えて、関数名の構文の両方が、同じである、見ることができます。
- 表現:このパラメータは、実行する文を表す文字列です。この文は、2つの辞書のグローバルや地元の人々の背後にあるパラメータの種類によって制限され、そして唯一の辞書の関数と変数グローバルや地元の人々辞書スコープ内で実行することができます。
- グローバル:この制御パラメータは、グローバルネームスペース、発現はグローバルネームスペースで使用することができる、すなわち関数です。のみカスタマイズ設けずに、グローバルパラメータを提供する場合
__builtins__
、システムは、現在の環境を設定する__builtins__
グローバルこのパラメータが提供されていない場合でも、パイソンの使用、自分自身を提供するために、グローバルにコピーされ、その後、計算されますグローバル名前空間。 - 地元の人:この制御パラメータは、ローカル名前空間、グローバル、などであり、それが重複または競合グローバルを有している場合には、被写体までの地元の人々。グローバルへの地元の人々が提供されていない場合、それがデフォルトになります。
注意
__builtins__
モジュールは、Pythonを構築し、intは通常使用し、strが、このモジュールでは、ABS。プリント(DIC [ "__builtins__
「])文は見ることができ__builtins__
、対応する値を。
まず第一には、パラメータのグローバルの役割の範囲を示すために、次の例により、ときそれは観察する__builtins__
辞書グローバルにコピーします:
dic={} #定义一个字dic['b'] = 3 #在 dic 中加一条元素,key 为 bprint (dic.keys()) #先将 dic 的 key 打印出来,有一个元素 bexec("a = 4", dic) #在 exec 执行的语句后面跟一个作用域 dicprint(dic.keys()) #exec 后,dic 的 key 多了一个
次のような結果を操作します:
dict_keys([ 'B'])
dict_keys([ 'B'、 ' __builtins__
'、 ''])
上記のコードは= 4スコープDICで実行されるコードです。Bのみに見られるように、EXEC()DIC以前のキー。Execの()を実行した後、システムは、DICに2つの新しい鍵を生成し、それぞれ__builtins__
。変数は文によって生成された実行され、システムはその範囲を配置します辞書指定し、__builtins__
システムに内蔵されているキーに追加されます。
使用法地元の引数は、例えば、非常に簡単です:
a = 1
exec("a = 2") #相当于直接执行 a=2
print(a)
a = exec("2+3") #相当于直接执行 2+3,但是并没有返回值,a 应为 None
print(a)
a = eval('2+3') #执行 2+3,并把结果返回给 a
print(a)
出力は次のようになります。
116
差のexec()と評価()で
既に述べたように、それらの違いは、評価は、()の実行の結果を返す、とexec()戻り値の結果を実行せずになります。例えば:
a=10
b=20
c=30
g={'a':6, 'b':8} #定义一个字典
t={'b':100, 'c':10} #定义一个字典
print(eval('a+b+c', g, t)) #定义一个字典 116
次のような結果を操作します:
2
なし
5
図から分かるように、Execの()ステートメントは、操作の後、最も適切な場所にはなりません、のeval()文が適切な結果に配置されたが返されます。
返されていない結果でいる場合に設置のeval()ステートメントは、次に起こるのだろうか?たとえば、以下のコード:
a= eval("a = 2")
そして、Pythonインタプリタは、等号の構文を認識しないようにeval()を示唆、にSyntaxErrorエラーを報告しました。