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‘]

原文地址:https://www.cnblogs.com/su-sir/p/11854025.html

时间: 2024-10-27 13:43:03

eval与exec的区别,以及变量的作用范围的相关文章

python3的eval和exec的区别与联系

eval: 可以把字符串里的字符转换为可执行代码,但只支持一行字符.可以返回执行后得到的值.如下: f = "3+6+9+8"s = eval(f)print(s)输出: "C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py26exec:可以把字符串里的字符转换为可执行代码,可以支持多行字符.但是拿不到返回结果.如下: code = '''def

Python中的eval()、exec()及其相关函数

Python中的eval().exec()两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是

Shell脚本之:EVAL and EXEC command

由于工作上的需要,花了点时间,研究了一下eval和exec这两个shell内建特殊的命令.因为用的不是很多,所以还是有一点比较隐晦的.. 1.eval 该命令是bashshell中内建的一个命令,相比其他的命令来说还是有一点的难度.该命令后面所跟的内容都认为是参数,但是会两次扫描其参数,第一次扫描会将参数中的变量进行替换,第二次扫描会将后面的参数当作一个shell中的命令组合来执行命令.其常用的情况是对变量的处理下面看几个例子: 案例1:直接组合命令[[email protected] shel

python内置函数 eval()、exec()以及complie()函数

1.eval函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值. eval(expression[, globals[, locals]]) 参数 expression -- 表达式. globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象. locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象. 返回值 返回表达式计算结果. 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式(注意eval不支持任何形式的赋值

[转]Python中的eval()、exec()及其相关函数

刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, local

深度辨析 Python 的 eval() 与 exec()

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个. 大部分函数是我们经常使用的,例如 print().open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用.内置函数们能够被"提拔"出来,这就意味着它们皆有独到之处,有用武之地. 因此,掌握内置函数的用法,就成了我们应该点亮的技能. 在<Python进阶:如何将字符串常量转为变量?>这篇文章中,

Shell中source/fork/exec的区别

fork是linux的系统调用,用来创建子进程,子进程是父进程的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境.子进程与父进程唯一不同的地方在于pid(process id).环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程.不管子进程的环境变量如何变化,都不会影响父进程的环境变量.默认shell中的命令都是此种方式,创建sub-shell,然后执行.执行完后,返回父shell. exec和source都属于bash内置命令,执行sour

linux中fork, source和exec的区别

转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现的,如awk,sed. source和exec都是内部命令. fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent

&lt;%#eval() %&gt;和&lt;%#bind() %&gt; 的区别

1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateString ={0:d} ,则 必须把 属