eval:eval() 函数用来执行一个字符串表达式,并返回表达式的原始值。

例如:有个字符串 A="{'value': 'hello'}"

想要输出该字符串的value值,应该怎么办。

如果仅仅是一个字典的话直接取dict['key']就可以轻松取出来,但是在字符串中我们就必须想办法把字符串转化成字典。这时候eval函数就该闪亮登场了。

代码如下:

>>> A="{'value': 'hello'}"
>>> B=eval(A)
>>> B
{'value': 'hello'}

此时在字典情况下想取出值就轻而易举了!

>>> B['value']

Python eval 函数妙用

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

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

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

globals:可选。必须是dictionary

locals:可选。任意map对象

实例展示:

可以把list,tuple,dict和string相互转化。
#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串转换成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>

eval()使用原因:

1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。

2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

example:

g={'a':20} eval("a+1",g)
#test eval() and locals()
x = 1
y = 1
num1 = eval("x+y")
print (num1)
def g():    
    x = 2    
    y = 2  
    num3 = eval("x+y")    
    print (num3)        
    num2 = eval("x+y",globals())   
    #num2 = eval("x+y",globals(),locals())    
    print (num2)
print locals()["x"]
print locals()["y"] 
print globals()["x"]
print globals()["y"]

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4

locals()对象的值不能修改,globals()对象的值可以修改

#test globals() and locals() def f(): z = 1 print (locals()) locals()["z"] = 2 print (locals()) globals()["z"] = 2 print (z)

可以得出,两个print (locals())的结果是一样的,说明没有修改成功。而print (z)的值是2,说明修改成功了

eval有安全性问题,比如用户恶意输入就会获得当前目录文件

eval("__import__('os').system('dir')")
>>> import os
>>> 'os' in globals()
>>> os.system('whoami')
ap\zhail

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval

eval:eval() 函数用来执行一个字符串表达式,并返回表达式的原始值。例如:有个字符串 A="{'value': 'hello'}"想要输出该字符串的value值,应该怎么办。如果仅仅是一个字典的话直接取dict['key']就可以轻松取出来,但是在字符串中我们就必须想办法把字符串转化成字典。这时候eval函数就该闪亮登场了。代码如下:&gt;&gt;&gt; A="{'...
python字典的常规操作上,主要是根据字典的key键,获取对应的value,或者直接回去整个item键对,自行进行其他操作 在实际开发,我们面向的基本都是多个字典字典数组,此处示例单个字典的键、、对的获取,即对字典数组进行 for i in dict 后的操作 stu = { 'name': '小王', 'age': 14, 'gender': '男', 'chinese': 81, 'math': 92, 'english': 80
题目:把字典的key和value取出来,按照顺序存入到list#-*-coding:utf-8-*- #创建字段 d={'name':'cheng','age':20,'sex':'female'} #创建空列表 #将字典键和循环取出添加到列表 for i in d.keys(): a.append(i) a.append(d[i]) print a
字典的表示: 字典用{}定义,键对之间使用,分隔,键key是索引,value是数据,键和之间使用;分隔,键必须是唯一的. d = {key1 : value1, key2 : value2 } 访问字典: 增加/修改字典的元素 *删除字典的元素
1.字典的组成及表示方式 1.1.字典是由许多对相互之间有联系的元素组成,每一对元素都包含一个键(key)和一个value)。 这种元素称为键对,一般记作键: (key:value)。 字典的表示方法是,大括号内若干对键对排列在一起,它们之间用逗号隔开。例子如下:对应的 1.1.1.1我们可以通过元素的键来获取它的,也可以添加另外的键来改动字典字典型对于键的存储没有特定的顺序。
获取一个字典的key,value有多种方法,现总结一下,直接上代码: dictss={'username': 'zhouchuanlun', 'code': '66666'} # #获取key,value for k,v in dictss.items(): print(k,v) # #方法1:获取key for name in dictss.keys(): print(name.title()) # #方法2:获取key for name in dictss:
在node.js,有时候需要获取字典模型里面的所有value,可以使用underscore模块, 安装underscore模块,npm install underscore --save 在js文件,引用var underscore = require('underscore');就可以 直接获取了。 var underscore = require('underscore');...
eval()函数会将传入的字符串当做JavaScript代码进行执行。语法eval(string) 参数string 一串表示JavaScript表达式,语句, 或者是一系列语句的字符串。表达式可以包括变量以及已存在对象的属性。 返回执行指定代码之后的返回。如果返回为空,返回undefined描述eval()是全局对象的一个函数属性。eval()的参数是一个字符串。如果字符串表示的是表达式
情况一:最大只有一个,只获取最大value)所对应的键(key) 情况二:最大只有一个,同时获取最大value)和所对应的键(key) 情况三:最大有多个,获取所有最大value)所对应的键(key) 情况一:最大只有一个,只获取最大的键 方法一:使用 get >>> dict = {'two': 2, 'one': 1,...
目录字典`keys()`、`values()`和`items()`方法`in`和`not in``get()`方法`setdefault()`方法字典字符串嵌套 像列表一样,字典也是许多的集合。字典的索引被称为键,不只是整数,可以是其它类型。键及其关联的称为键-对。例如: cat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'} 字典由大括号{和}开头和结束,冒号:前表示键,冒号后表示,多个键-对用逗号分隔。可用键作为索引
json_string = '{"key1": "value1", "key2": "value2"}' dictionary = json.loads(json_string) print(dictionary) # 输出:{'key1': 'value1', 'key2': 'value2'} 也可以使用 `ast` 库的 `literal_eval` 函数,例如: import ast dict_string = "{'key1': 'value1', 'key2': 'value2'}" dictionary = ast.literal_eval(dict_string) print(dictionary) # 输出:{'key1': 'value1', 'key2': 'value2'} Authorization not available. Check if polkit service is running or see debug message for more weixin_42096193: 感谢您的方案和解答哈,其实/home我们之前一直有挂载的,不知道这次是不是突然停电的问题导致的表情包 Authorization not available. Check if polkit service is running or see debug message for more liuskyter: home是非必须挂载,如挂载,需确保home挂载设备的存在 Authorization not available. Check if polkit service is running or see debug message for more weixin_42096193: 表情包大哥你牛,试了一早上用一圈看了你这个屏蔽了那个home目录才行表情包