[問題] 關於compile() 和 eval() 將字串轉成dict

看板Python作者 (Michael 6)時間14年前 (2009/07/27 15:04), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
最近看到一個python程式,目的是將長的很像dict結構的字串 透過compile()與eval()轉換成dict,其程式碼如下: str1 = "{'a':4, 'b':42, 'c':99}" command = "result = %s" % str1 co = compile(command, "", "exec") eval(co,globals()) return result 不懂為什麼這裡可以直接回傳result? 而且result所存的值就是:{'a':4, 'b':42, 'c':99} , type是dict 很神奇!! 查過許多python的書雖然都有提到compile()和eval()這二個函式 但還是無法理解 為什麼可以這樣使用 就將字串轉成dict?? 請教各位大大 來解惑一下啦! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.72.248

07/27 15:51, , 1F
compile() 是把輸入的 python 原始碼編譯成 bytecode
07/27 15:51, 1F

07/27 15:51, , 2F
eval() 則是執行一段 expression 或者 code object
07/27 15:51, 2F

07/27 15:52, , 3F
這段程式基本上就是執行 result = { .... } 這段 code
07/27 15:52, 3F

07/27 15:56, , 4F
不過這種情況其實也不用寫得那麼複雜,直接:
07/27 15:56, 4F

07/27 15:57, , 5F
return eval("{'a':4, 'b':42, 'c':99}") 就好 XD
07/27 15:57, 5F

07/27 16:34, , 6F
原來如此!感謝^^
07/27 16:34, 6F

07/27 16:35, , 7F
其實我省略了原程式前面處裡的動作 只是把重點po上來
07/27 16:35, 7F

07/27 16:35, , 8F
所以看起來才會感覺多些一舉!!XD
07/27 16:35, 8F
文章代碼(AID): #1ARL63HA (Python)