eval与exec的区别,以及变量的作用范围
Posted su-sir
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的区别,以及变量的作用范围的主要内容,如果未能解决你的问题,请参考以下文章