作者bluevestige (Michael 6)
看板Python
標題[問題] 關於compile() 和 eval() 將字串轉成dict
時間Mon Jul 27 15:04:34 2009
最近看到一個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
→ twolights:compile() 是把輸入的 python 原始碼編譯成 bytecode 07/27 15:51
→ twolights:eval() 則是執行一段 expression 或者 code object 07/27 15:51
→ twolights:這段程式基本上就是執行 result = { .... } 這段 code 07/27 15:52
推 twolights:不過這種情況其實也不用寫得那麼複雜,直接: 07/27 15:56
→ twolights:return eval("{'a':4, 'b':42, 'c':99}") 就好 XD 07/27 15:57
→ bluevestige:原來如此!感謝^^ 07/27 16:34
→ bluevestige:其實我省略了原程式前面處裡的動作 只是把重點po上來 07/27 16:35
→ bluevestige:所以看起來才會感覺多些一舉!!XD 07/27 16:35