python函数每日一讲 - eval函数

函数定义:

eval(expression, globals=None, locals=None)

将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。

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

Python版本兼容:

Python2.7

Python3.x

eval()主要作用:

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

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

英文解释:

The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.

The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__’, the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard builtins module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval() is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:

例子:

a=1

g={‘a‘:20}

eval("a+1",g)

结果:

例子2, 测试globals, 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)

g()

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

安全问题:

因为eval的特型, 很可能被黑客利用,造成安全问题。

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval代替

时间: 2024-11-09 12:42:13

python函数每日一讲 - eval函数的相关文章

PHP之回调函数传参(解决eval函数拼接对象参数的问题)

在使用Smarty时,定义了一个统一调用控制器的函数,如下: function C($name, $method){//控制器的名称和其中方法的名称 require_once "controller/".$name."Controller.class.php";//引入控制器 eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');//实例化控制器并调用方法 } 但是该函数只能调用控制器中无参

23 24 25 py中break和continue 循环中的else语句 exec和eval函数

第十课 跳出循环(break和continue) break :退出整个循环 不执行循环下面的其他语句 continue:忽略continue后面的所有的语句 然后会转向执行下一次的循环 也就是会执行下面的语句的 # coding:utf-8 x = 0 while x < 12: print(x,end = ',') x +=1 # 结果Wie : 0,1,2,3,4,5,6,7,8,9,10,11, print() y = 0 while y < 12: if y == 5: break;

js eval函数使用,js对象和字符串互转.

JavaScript eval() 函数  JavaScript 全局函数 定义和用法 eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. <!DOCTYPE html> <ht

Javascript eval()函数 基础回顾

如果您想详细了解ev al和JSON请参考以下链接: eval  :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval JSON:http://www.json.org/ eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式或者语句所

python笔记-调用eval函数出现invalid syntax错误

本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>", line 1 a = 1 ^ SyntaxError: invalid syntax 百度没百度到结果,最后在stackoverflow上找到了好的答案,这里是原文链接. 作者的意思是,eval函数只负责对表达式进行处理,并没有赋值的功能,也就是说,eval函数只负责对你的输入进行输出,True

python eval函数,将列表样式的字符串转化为列表

python eval函数,将列表样式的字符串转化为列表 >>> str_1 = '[1,2,3,4,5,6]'>>> type(str_1)<type 'str'>>>> list_1 = eval(str_1)>>> list_1[1, 2, 3, 4, 5, 6]>>> type(list_1)<type 'list'>>>> 原文地址:https://www.cnbl

(一)Python入门-5函数:07lambda表达式和匿名函数-eval()函数

一:lambda表达式和匿名函数 lambda表达式可以用来声明匿名函数.lambda 函数是一种简单的.在同一行中定义函数 的方法.lambda函数实际生成了一个函数对象. lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值. lambda表达式的基本语法如下: lambda arg1,arg2,arg3... : <表达式> arg1/arg2/arg3为函数的参数.<表达式>相当于函数体.运算结果是:表达式的运算结果. #lambd

python之eval函数,map函数,zip函数

eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果.所以,结合math当成一个计算器很好用. eval()函数常见作用有: 1.计算字符串中有效的表达式,并返回结果 >>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> eval("n + 4") 85 2.将字符串转成相应的对象(如list.tuple.dict和string之间的转换) >&g

python中eval函数作用

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(type(b)) print(b) 二.字符串转换成字典 a = "{1: 'a', 2: 'b'}" print(type(a)) b = eval(a) print(type