zoukankan      html  css  js  c++  java
  • 十五、python沉淀之路--eval()的用法

    一、eval函数

    python eval() 函数的功能:将字符串str当成有效的表达式来求值并返回计算结果。

    语法:eval(source[, globals[, locals]]) -> value

    参数:

    source:一个Python表达式或函数compile()返回的代码对象

    globals:可选。必须是dictionary

    locals:可选。任意map对象

    如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。

    python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。

     1 x = 1
     2 y = 1
     3 num = eval("x+y")
     4 print('num',num)
     5 
     6 def g():
     7     x = 2
     8     y = 2
     9     num1 = eval("x+y")
    10     print('num1',num1)
    11     num2 =eval("x+y",globals())
    12     print('num2',num2)
    13     num3 = eval("x+y",globals(),locals())
    14     print('num3',num3)
    15 
    16 g()
    1 num 2
    2 num1 4
    3 num2 2
    4 num3 4

    解析:num2 因为有globals所以是全局变量,执行后结果为4;num3 既有globals 又有locals,仅在此情况下,优先采用locals的值,故计算结果是2

    二、eval 可以把 list, tuple, dict 转换成str,返回来也成立;即互转。

    1 ###############
    2 # 字符串转成列表
    3 s = '[[1,2,],[3,4,],[5,6,],[8,9]]'
    4 li = eval(s)
    5 print(li)
    6 print(type(s))
    7 print(type(li))
    1 [[1, 2], [3, 4], [5, 6], [8, 9]]
    2 <class 'str'>
    3 <class 'list'>
    1 ########################
    2 #字符串转成字典
    3 s = "{1:'a',2:'b'}"
    4 dic = eval(s)
    5 print(dic)
    6 print(type(s))
    7 print(type(dic))
    1 {1: 'a', 2: 'b'}
    2 <class 'str'>
    3 <class 'dict'>
    1 ###########################
    2 #字符串转成元组
    3 s = '([1,2,],(3,4,),[5,6,],(8,9))'
    4 tu = eval(s)
    5 print(tu)
    6 print(type(s))
    7 print(type(tu))
    1 ([1, 2], (3, 4), [5, 6], (8, 9))
    2 <class 'str'>
    3 <class 'tuple'>
  • 相关阅读:
    老李分享:《Linux Shell脚本攻略》 要点(四)
    老李分享:《Linux Shell脚本攻略》 要点(三)
    老李分享:《Linux Shell脚本攻略》 要点(二)
    老李分享:《Linux Shell脚本攻略》 要点(一)
    持续集成:TestNG组织如何测试用例
    Linux安装Redis
    Linux安装JDK
    Redis主从复制
    MySQL主从同步
    Spring 事务
  • 原文地址:https://www.cnblogs.com/jianguo221/p/8975899.html
Copyright © 2011-2022 走看看