python的exec eval使用分析

2022-09-28 02:33:10 字數 1622 閱讀 6493

簡介

python 動態執行字串**片段(也可以是檔案), 一般會用到exec,eval。

exec

exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]

注意:exec 是乙個語法宣告,不是乙個函式.也就是說和if,for一樣.

官方文件對於exec的解釋

this statement supports dynamic execution of python code.

exec的第乙個表示式可以是:

1.**字串

2.檔案物件

3.**物件

4.tuple

前面三種情況差不多,第四種比較特殊最後講

如果忽略後面的可選表示式,exec後面**將在當前域執行

>>> a=2

>>> exec "a=1"

>>> a

>>>

如果在表示式之後使用in選項指定乙個dic,它將作為global和local變數作用域

>>> a=10

>>> b=20

>>> g=

>>> exec "global a;print a,b" in g

>>>

如果in後詳指定兩個表示式,它們將分別用作global和local變數作用域程式設計客棧

>>> a=10

>>> b=20

>>> c=20

>>> g=

>>> l=

>>> exec "global a; a,b,c" in g,l

>>>

現在說下tuple的情況,這也是導致很多人誤以為exec是乙個函式的原因。

如果第乙個表示式是tup程式設計客棧le

exec(expr, globals) #它等效與 exec expr in globals

exec(expr, globals, locals) #它等效與 exec expr in globals,locals

eval

eva程式設計客棧l通常用來執行乙個字串表示式,並返回表示式的值。

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

有三個引數,表示式字串,globals變數作用域,locals變數作用域。 其中第二個和第三個引數是可選的。

如果忽略後面兩個引數,則eval在當前作用域執行。

>>> a=1

>>> eval("a+1")

>>>程式設計客棧

如果指定globals引數

>>> a=1

>>> g=

>>> eval("a+1",g)

>>>

如果指定locals引數

>>> a=10

>>> b=20

>>> c=20

>>> g=

>>> l=

>>> eval("a+b+c",g,l)

>>>

如果要嚴格限制eval執行,可以設定globals為__builtins__,這樣 這個表示式只可以訪問__builtin__ module。

總結exec,eval給我帶來了極大的靈活性,同時也帶來了隱含的危險性, 當我們使用它們的時候應該總是記得詳細指定其執行的作用域。

python的包 python的包

1.把解決一類問題的模組放在同乙個資料夾裡,這個資料夾就是包 2.通過import或是from.import匯入時必須遵循乙個原則 a 凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法 b 匯入後,使用時點的左邊可以是包,模組,類,函式 它們都可以用點的方式調節用自己的屬性 c from.imp...

python的語句 Python的語句

python中的兩種語句 1 if條件控制語句 格式 if a int input 請輸入第乙個數 b int input 請輸入第二個數 if a b print a比b小 if else a int input 請輸入第乙個數 b int input 請輸入第二個數 if a b print a...

Python(四)python的注釋

一 python單行注釋符號 python中單行注釋採用 開頭二 批量 多行注釋符號 多行注釋是用三引號 包含的,例如 三 python中文注釋方法 如果檔案裡有非ascii字元,需要在第一行或第二行指定編碼宣告。把chinesetest.py檔案的編碼重新改為ansi,並加上編碼宣告 一定要在第一...