eval和列表解析的一处陷阱
>>> def f():
a=1
return [i+a for i in range(3)] >>> f()
[1, 2, 3]
>>> def f():
a=1
return [i+eval('a') for i in range(3)] >>> f()
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
f()
File "<pyshell#12>", line 3, in f
return [i+eval('a') for i in range(3)]
File "<pyshell#12>", line 3, in <listcomp>
return [i+eval('a') for i in range(3)]
File "<string>", line 1, in <module>
NameError: name 'a' is not defined
看看locals()是什么:
>>> def f():
a=1
return [print(locals()) for i in range(3)] >>> f()
{'i': 0, '.0': <range_iterator object at 0x0000000003353530>}
{'i': 1, '.0': <range_iterator object at 0x0000000003353530>}
{'i': 2, '.0': <range_iterator object at 0x0000000003353530>}
[None, None, None] >>> def f():
a=1
return [(i+a,print(locals())) for i in range(3)] >>> f()
{'a': 1, 'i': 0, '.0': <range_iterator object at 0x0000000003353530>}
{'a': 1, 'i': 1, '.0': <range_iterator object at 0x0000000003353530>}
{'a': 1, 'i': 2, '.0': <range_iterator object at 0x0000000003353530>}
[(1, None), (2, None), (3, None)]
eval和列表解析的一处陷阱的更多相关文章
- Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化
一.装饰器 一.装饰器的知识储备 1.可变长参数 :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...
- 文件处理,三元操作符,seek()函数,迭代函数和列表解析,reduce函数
1.文件读取方类型 r,r+,w,x,a, r,读文件 w,写文件,文件内容全部删除,并将新内容从第一行开始赋值 x,写文件,只有文件不存在,可写,文件存在,报错 a,在文件莫问追加信息 r+,w+, ...
- python迭代器 生成器 三元运算 列表解析
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式
一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数 :*args和**kwargs def index(name,age): print(na ...
- 《python核心编程》读书笔记——列表解析
列表解析是列表类型的方法,这种方法结合了列表的方括弧.for循环.if语句. 用for把处理后的值放入列表: squared = [ x**2 for x in range(4) ] for i in ...
- Python filter,map,lambda,reduce,列表解析
filter用法 filter(func,seq) 将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤 >>> def foo(x): return x> ...
- python函数,lambda表达式,三目运算,列表解析,递归
一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...
- Python学习笔记第七天(列表解析)
列表解析: 根据已有列表,高效生成列表的方式,它的执行效率要快很多,比for循环的速度要快很多 示例如下: 生成器表达式 生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一 ...
- Python入门笔记(13):列表解析
一.列表解析 列表解析来自函数式编程语言(haskell),语法如下: [expr for iter_var in iterable] [expr for iter_var in iterable i ...
随机推荐
- ASP.NET CORE系列【六】Entity Framework Core 之数据库迁移
前言 最近打算用.NET Core写一份简单的后台系统,来练练手 然后又用到了Entity Framework Core 发现园子里有些文章讲得不是那么细节,对于新手小白来说,可能会有点懵. 特意整理 ...
- JEECG 新版在线文档WIKI正式发布
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhangdaiscott/article/details/80 JEECG 新版在线文档WIKI正式 ...
- [HAOI 2007]上升序列
Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...
- [ZJOI2007]Hide 捉迷藏
Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条 ...
- 【Rain in ACStar HDU-3340】
·你正从AC星球返回,天又下起凸包雨,只好到线段树下躲雨. ·英文题,述大意: 一个竖直平面的美丽天空,会下凸包雨.凸包雨指的是边数为3~6的多边形,并且每一个它都遵守一个神奇定律,那就是 ...
- hdu5569 BestCoder Round #63 (div.2)
题意: 给你一个矩阵,要求从左上角走到右下角,走个的费用:a[1]*a[2] + a[3]*a[4] + ......+ a[2n-1]*a[2n] 思路: 果然不机智,自己把自己套路了 对于每个奇数 ...
- bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp
1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1826 Solved: 405[Submit][S ...
- Linux LCD 显示图片【转】
转自:https://blog.csdn.net/niepangu/article/details/50528190 BMP和JPEG图形显示程序1) 在LCD上显示BMP或JPEG图片的主流程图首 ...
- TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。
Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...
- js延迟函数
正确写法: setTimeout(function (){ alert("delay!"); },5000); 错误写法: setTimeout( alert("dela ...