1.exec
執行乙個字串的語句是exec:
但是,使用簡單形式的exec語句絕不是好事,很多情況下可以給他提供命名空間-可以放置變數的地方,你想這樣做,從而使**不會干擾命名空間,比如下面**中使用的名稱sqrt:>>>
exec
"print 'hello world'"
exec 語句最有用的地方在可以動態的建立**字串,如果字串是從其他地方獲得的–很有可能是使用者—那麼幾乎不能確定其他到底包含什麼**,所以為了安全起見可以增加乙個字典,起命名空間的作用。from math import sqrt
exec("sqrt = 4")
sqrt(4)
traceback (most recent call last):
file "c:\users\administrator\eclipse-workspace\web_authentication\shellexec.py", line
3, in
sqrt(4)
typeerror: 'int' object is not callable
可以通過增加in來實現,其中就是起到放置**字串命名空間作用的字典。
潛在的破壞性**並不是覆蓋sqrt函式,原來的函式能正常工作,而通過exec 賦值的變數sqrt只在它的作用域內有效。from math import sqrt
scope={}
exec('sqrt=1',scope)
sqrt(4)
2.0scope['sqrt']
1
注意,如果需要將scope列印出來的話,會看到其他有用的東西,因為內建的builtins 字典自動包含所有內建函式和值:
scope['sqrt']
1len(scope)
2scope.keys()
dict_keys(['__builtins__', 'sqrt'])
Python中的exec和eval函式
函式exec將字串作為 執行 exec print hello,world hello,world 然而,呼叫函式exec時只給它提供乙個引數絕非好事。大多數情況下,還應向它傳遞乙個命名空間 用於放置變數的地方 否則 將汙染你的命名空間,即修改你的變數。例如,假設 使用了名稱sqrt,結果將如何呢?...
執行順序和eval
1 將命令切割成token 是以固定的一支煙meta字元分割的,有空格 製表符 換行符 與 token 的種類暴扣單詞,關鍵字 輸出入重定向 以及分號 2 檢查每個命令的第乙個token,看看是否他是不帶引號或者反斜槓的關鍵字,如果他是乙個開發的關鍵字,則這個命令其實是乙個復合命令 3 將每個命令的...
python3中的eval和exec的區別與聯絡
看了很多網上的方法,寫入檔案後開啟檔案看確實不再是亂碼,但是從檔案中讀入json時發現了亂碼,可能是讀檔案預設的編碼格式不對。下面讀寫方法可行。注意,ensure ascii false可以保證不會以ascii格式編碼,保證中文的正常轉換 import js程式設計客棧on with open te...