簡介
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,並加上編碼宣告 一定要在第一...