Python eval 函数说明
eval(str [,globals [,locals ]]) -- 函数将字符串str当成有效Python表达式来求值,并返回计算结果。
例 : eval('3+4') ==> 7
>>> a = 1
>>> b = eval("a")
>>> id(a)
505910960
>>> id(b)
505910960
>>> b = 1000
>>> id(b)
16834704
>>> a
1
根据eval函数的含义:把1赋值给变量b ==> 让b指向1的内存地址 b = 1000 ==>让b指向1000的内存地址
这里牵涉到一个概念:python的赋值是只是把变量的内存地址赋值给另一个变量,这一点可以使用python的内建方法id()来进行测试
我们假设'QH'这个字符串在内存中的地址是a,'LJQ'在内存中的地址是b
you='QH' #让you变量指向a地址
me=you #让me变量和you变量一样指向a地址
you='LJQ' #修改you变量,让它指向到b地址
print you #可想而知you指向的是b地址,所以它的值为'LJQ'
print me #me指向的是a地址,所以它的值为'QH'
输出:
LJQ
QH
class Foo:
val = 1 foo = Foo()
print(foo.val)
==> 1
print(foo)
==> <__main__.Foo object at 0x010153D0>
eval_foo = eval("foo")
print(eval_foo)
==> <__main__.Foo object at 0x010153D0>
eval_foo.val = 1000
print(foo.val)
==> 1000
eval_foo = eval("foo") 将foo对象的地址传递给eval_foo
相当于获得了一个引用,所以foo和eval_foo指向的是同一个对象,当然属性是一样的,一个改变另一个也会改变.
若添加 eval_foo = Foo() 将创建一个实体对象,内存的地址将与foo的内存地址不同
PS:如果不想获得一个引用 那么我们就要用到拷贝,包括浅拷贝(copy模块的copy函数)和深拷贝(copy模块中的deepcopy函数)
Python eval 函数说明的更多相关文章
- python——eval()函数
eval()函数用来执行一个字符串表达式,并返回表达式的值. 语法:eval(expression[, globals[, locals]]) x = 4 print(eval('3 * x'))12 ...
- Python eval()函数的用法
Python eval()函数的用法 eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果.所以,结合math当成一个计算器很好用. eval()函数常见作用有 ...
- python eval函数,将列表样式的字符串转化为列表
python eval函数,将列表样式的字符串转化为列表 >>> str_1 = '[1,2,3,4,5,6]'>>> type(str_1)<type 's ...
- Python eval 函数用途
Python eval 函数用途: eval 函数可将字符串转换成列表,元组和字典 实例如下: 可以把list,tuple,dict和string相互转化. ##################### ...
- Python eval 函数妙用
eval 功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source, globals, locals) -> value 参数: source:一个Python ...
- python eval()函数的妙用和滥用
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果: >>> s='8*8' >>> eval(s) 64 >& ...
- python eval函数
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果. 可以把字符串转为list.tuple .dict 等数据类型 1.把字符串转为字典 ####### ...
- Python:eval的妙用和滥用
时间 2014-07-08 13:05:24 CSDN博客 原文 http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...
- python笔记-调用eval函数出现invalid syntax错误
本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>& ...
随机推荐
- spring ioc经典总结
component-scan标签默认情况下自动扫描指定路径下的包(含所有子包),将带有 @Component @Repository @Service @Controller标签的类自动注册到spri ...
- 【Docker 命令】- login 命令
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub docker logout : 登出一个Docker镜像仓库,如果未指定镜像 ...
- C语言宏中"#"和"##"的用法
转自:https://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html 在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉 ...
- C/C++打印堆栈信息
转自:http://www.cnblogs.com/zhurizhe/p/3412369.html 在C/C++程序中打印当前函数调用栈 前几天帮同事跟踪的一个程序莫名退出,没有core dump(当 ...
- java 基础--switch--003
1,break可以省略吗? default中的可以省略,其他的如果省略会执行下一个case,从下一个case的 break中中断.(case穿透) 2,default一定要在最后吗? 不是,可以在任意 ...
- [OS] 信号量(Semaphore)
一个信号量S是一个整型量,除对其初始化外,它只能由两个原子操作P和V来访问.P和V的名称来源于荷兰文proberen(测试)和verhogen(增量),后面亦将P/V操作分别称作wait(), sig ...
- cf Round 587
A.Duff and Weight Lifting(思维) 显然题目中只有一种情况可以合并 2^a+2^a=2^(a+1).我们把给出的mi排序一下,模拟合并操作即可. # include <c ...
- python的if语句、while循环、for循环
if语句 计算机又被称作电脑,意指计算机可以像人脑一样,根据周围环境条件(即expession)的变化做出不同的反应(即执行代码)if语句就是来控制计算机实现这一功能 语法: 1.单分支,单个条件判断 ...
- SPOJ3267/DQUERY:D-query——题解
https://vjudge.net/problem/SPOJ-DQUERY http://www.spoj.com/problems/DQUERY/en/ 给定一列数,查询给定区间内数的种类数. 这 ...
- mybatis Mapper 中resultType使用方法及返回值为Map的写法
mybatis学习(七)——resultType解析 resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等.现总结一下再解释 总结: resul ...