标签:pen turn 的区别 ret 对象 可变对象 影响 方法 参数
# 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‘]
标签:pen turn 的区别 ret 对象 可变对象 影响 方法 参数
原文地址:https://www.cnblogs.com/su-sir/p/11854025.html