python3 中的 eval 函式

2021-09-02 15:13:19 字數 3021 閱讀 2798

from:

python:eval的妙用和濫用:

python eval():

python eval 函式妙用:

python 中 eval 帶來的潛在風險:

python之 eval() 函式危險性**:

eval()函式十分強大,官方文件解釋是:將字串 string 物件 轉化為有效的表示式參與求值運算返回計算結果

語法上:呼叫的是:eval(expression,globals=none, locals=none)返回的是計算結果

so,結合 math 當成乙個計算器很好用。

可以把 list、tuple、dict 和 string 相互轉化

其中:expression 是乙個參與計算的 python 表示式

globals 是可選的引數,如果設定屬性不為 none 的話,就必須是 dictionary 物件了

locals 也是乙個可選的物件,如果設定屬性不為 none 的話,可以是任何 map 物件了

python 是用命名空間來記錄變數的軌跡的,命名空間是乙個dictionary,鍵是變數名,值是變數值。

當一行**要使用變數 x 的值時,python 會到所有可用的名字空間去查詢變數,按照如下順序:

python 的全域性名字空間儲存在乙個叫 globals() 的 dict 物件 中;區域性名字空間儲存在乙個叫 locals() 的 dict 物件中。

我們可以用 print (locals()) 來檢視該函式體內的所有變數名和變數值。

下面簡單演示一下 eval()函式的使用:

#!usr/bin/env python

#encoding:utf-8

import math

def eval_test():

l='[1,2,3,4,[5,6,7,8,9]]'

d=""

t='([1,3,5],[5,6,7,8,9],[123,456,789])'

print '--------------------------轉化開始--------------------------------'

print type(l), type(eval(l))

print type(d), type(eval(d))

print type(t), type(eval(t))

if __name__=="__main__":

eval_test()

執行結果為:

--------------------------轉化開始--------------------------------

[finished in 0.2s]

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

b = eval(a)

bout[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]

type(b)

out[4]: list

a = ""

b = eval(a)

bout[7]:

type(b)

out[8]: dict

a = "([1,2], [3,4], [5,6], [7,8], (9,0))"

b = eval(a) b

out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))

eval 函式就是實現list、dict、tuple與 str 之間的轉化

str 函式把 list,dict,tuple 轉為為 字串

# 字串轉換成列表

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

print(type(a))

b = eval(a)

print(b)

# 字串轉換成字典

# 字串轉換成元組

上面簡單演示的是eval在字串物件和list、dictinoary、tuple物件之間的轉換作用。

不可謂不強大!

but!強大的函式有代價。安全性是其最大的缺點。

想一想這種使用環境:需要使用者輸入乙個表示式,並求值。

如果使用者惡意輸入,例如:__import__('os').system('dir')

那麼 eval() 之後,你會發現,當前目錄檔案都會展現在使用者前面。

eval(__import__('os').system('dir'))

那麼繼續輸入:open('檔名').read()

**都給人看了。獲取完畢,一條刪除命令,檔案消失。哭吧!

眾所周知:

怎麼避免安全問題?

1、自行寫檢查函式;

2、使用 ast.literal_eval:自行檢視document:

3、更多好文:restricted "safe" eval(python recipe):

python3中的eval和exec的區別與聯絡

看了很多網上的方法,寫入檔案後開啟檔案看確實不再是亂碼,但是從檔案中讀入json時發現了亂碼,可能是讀檔案預設的編碼格式不對。下面讀寫方法可行。注意,ensure ascii false可以保證不會以ascii格式編碼,保證中文的正常轉換 import js程式設計客棧on with open te...

python中的eval函式

eval 函式用來執行乙個字串表示式,並返回表示式的值。還可以把字串轉化為list tuple dict。eval函式的語法 eval expression globals locals 引數 expression 表示式。globals 變數作用域,如果被提供,必須是乙個字典物件。locals 變...

Python中的eval函式

一 簡介 eval函式就是實現list dict tuple與str之間的轉化,而str函式實現把list dict tuple轉換成字串 1 字串轉化為列表 1 字串轉化為列表 2 a 1,2 3,4 5,6 7,8 9,10 3 print type a 4 b eval a 5print ty...