eval与exec的区别,以及变量的作用范围
# eval与exec的区别:eval 有返回值,而 exec没有返回值
# 这两个函数都是执行python语句,注意:里面传的是字符串的格式
a = eval('1+2')
a # 这里a有值
3
b = exec('1+2')
b # 这里b没有值
def printstr():
print('hello word')
return 1
eval('printstr()')
hello word
1 #可以返回参数
exec('printstr()')
hello word
# 这里就没有返回
# 变量的作用范围
参数为不可变的,对外部的变量就没影响
参数为可变的,对外部的变量就影响
a = 100
def func(a):
a+=1
return a
func(a)
101
a # a的值并没有改变
100 list1 = []
def add(list1):
list1.append(1)
return list1 add(list1)
[1]
list1 # 改变了
[1]
# 函数默认参数“默认参数必须指向 不变对象!
>>> def add_end(L=[]):
... L.append('END')
... return L
... >>> print(add_end([1,2,3]))
[1, 2, 3, 'END']
>>> print(add_end(['x','y','z']))
['x', 'y', 'z', 'END']
>>> print(add_end())
['END']
>>> print(add_end())
['END', 'END']
>>> print(add_end()) # 这是默认参数为可变对象导致的,因为可以变对象参数的作用范围是全局的
['END', 'END', 'END'] #修改方法 >>> def add_end(L=None):
... if L==None:
... L= []
... L.append('END')
... return L
...
>>> print(add_end([1,2,3]))
[1, 2, 3, 'END']
>>> print(add_end(['x','y','z']))
['x', 'y', 'z', 'END']
>>> print(add_end())
['END']
>>> print(add_end())
['END']
>>> print(add_end())
['END']
eval与exec的区别,以及变量的作用范围的更多相关文章
- python3的eval和exec的区别与联系
eval: 可以把字符串里的字符转换为可执行代码,但只支持一行字符.可以返回执行后得到的值.如下: f = "3+6+9+8"s = eval(f)print(s)输出: &quo ...
- eval 与 exec, compile区别
exec 不是表达式: python 2. x, 中的一个语句和 python 3. x. 中的一个函数它编译并立即计算一个字符串中包含的语句或者语句集. 例如: exec('print(5)') # ...
- Python中eval与exec用法的区别
Python中eval,exec这两个函数有着相似的输入参数类型和执行功能,因此在用法上经常出现混淆,以至经常用错,程序易抛出错误.下面主要通过这两个函数的语法来阐述区别,并用例子来进一步说明. 首先 ...
- Python中的eval()、exec()及其相关函数
刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals().locals()和compile() ...
- 深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个. 大部分函数是我们经常使用的,例如 print().open ...
- [转]Python中的eval()、exec()及其相关函数
Python中的eval().exec()及其相关函数 刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数 ...
- 【转】Python中的eval()、exec()及其相关函数
[转]Python中的eval().exec()及其相关函数 刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函 ...
- python内置函数 eval()、exec()以及complie()函数
1.eval函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值. eval(expression[, globals[, locals]]) 参数 expression -- 表达式. ...
- linux中fork, source和exec的区别
转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现 ...
随机推荐
- jmeter—获取当前时间(年、月、日),往前/往后n天
import java.util.Calendar; Calendar cal = Calendar.getInstance(); int day = cal.get(Calendar.DATE); ...
- Oracle表概念
对于初学者来说,对表的概念也有一定的认识.因为我们对数据库的操作,90%以上是对表的操作. 常见表的规则表(Regular table),严格意义上来说又叫 heap table(堆表),也就是我们最 ...
- java中start()、yield、setDeamon()
本节主要说明以下三个问题 start()的启动顺序不代表线程的启动顺序 yeild的作用 守护线程 1.start()与线程启动顺序 package foreverly.cn.chapter1; pu ...
- Java中对象和引用的理解
偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...
- mysql以及mysql bench安装教程
首先,我们需要去官网下载mysql(这里以下载) 1 2 3 4 5 下载好了自己好了之后,点击安装好的东西出现如下界面: 1.接受使用条款并点击next 2.点击custom,可以根据个人习惯进行安 ...
- 数据库or、in、<>、>=、<=、butween区别
操作前先关闭数据库缓存 #创建测试的test表 DROP TABLE IF EXISTS test; CREATE TABLE test( `id` ) NOT NULL, `name` ) DEFA ...
- leecode刷题(24)-- 翻转二叉树
leecode刷题(24)-- 翻转二叉树 翻转二叉树 翻转一棵二叉树. 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 ...
- 链式栈的C++实现
这是去年的内容,之前放在github的一个被遗忘的reporsity里面,今天看到了就拿出来 #include<iostream> #include<string> using ...
- idea一键生成mybatis工具
1.创建maven项目,导包 <build> <plugins> <plugin> <groupId>org.mybatis.generator< ...
- re:正则表达式,字符串处理的杀手锏
介绍 正则表达式是一种用形式化语法描述的文本匹配模式,可以进行复杂的字符串匹配. Python中的正则表达式通过re模块提供,功能比Python内置的str更强,但是速度没有str提供的方法快. 因此 ...