Python中eval()函數的功能及使用方法


eval(str)函數很強大,官方解釋為:將字符串str當成有效的表達式來求值並返回計算結果。所以,結合math當成一個計算器很好用。

eval()函數常見作用有:

1、計算字符串中有效的表達式,並返回結果

>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> eval("n + 4")
85

2、將字符串轉成相應的對象(如list、tuple、dict和string之間的轉換)

      將python內存中的數據類型轉成其該有的數據類型,而不是json字符串

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>> b = eval(a)
>>> b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> a = "{1:'xx',2:'yy'}"
>>> c = eval(a)
>>> c
{1: 'xx', 2: 'yy'}
>>> a = "(1,2,3,4)"
>>> d = eval(a)
>>> d
(1, 2, 3, 4)

例外:json格式的字典字符串如果鍵值對中的值為單字節的話可以使用eval()表達式轉換為python數據類型【例如json轉dict】

          ①但是如果json格式的字典字符串中的鍵值對中的值為復雜的數據類型如列表或者列表中嵌套字典則無法將json轉換為dict數據

          ②eval(str)當字符串中有null【null的反序列化通過json.load()方法可以轉換為None】值,無法將字符串轉成相應的對象,會報錯。

json_string = """{
  "answerList": [
    {
      "content": "string",
      "questionId": "string",
      "questionIndex": 0,
      "questionTitle": "string",
      "questionType": 0,
      "questionWeight": 0,
      "score": 0,
      "scoreId": "string",
      "scoreName": "string",
      "scoreWeight": 0,
      "selectOptions": [
        {
          "disabledWeight": true,
          "evaluateStatus": 0,
          "optionId": "string",
          "optionTitle": "string",
          "optionWeight": 0
        }
      ],
      "tags": [
        {
          "tagId": "string",
          "tagTitle": "string"
        }
      ]
    }
  ],
  "channel": "string",
  "externalUnionid": "string",
  "key": "string",
  "qaJson": "string",
  "unionid": "string",
  "uuid": "string"
}"""

print(json_string) #打印json字符串
print(type(json_string))#打印json字符串的類型:str

print(eval(json_string))使用eval()表達式把json字符串轉換為python數據類型:字典類型--》結果失敗,報錯

json_dict = json.loads(json_string) #使用json.loads反序列化方式,將json字符串轉換為python數據類型成功
print(type(json_dict)) #打印轉換后的數據類型:dict
print(json_dict)#打印轉換成功后的字典數據

3、將利用反引號轉換的字符串再反轉回對象

>>> list1 = [1,2,3,4,5]
>>> `list1`
'[1, 2, 3, 4, 5]'
>>> type(`list1`)
<type 'str'>
>>> type(eval(`list1`))
<type 'list'>
>>> a = eval(`list1`)
>>> a
[1, 2, 3, 4, 5]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM