python默认参数陷阱】的更多相关文章

对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而且非常惊人(对于新手来说): >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo() 实际上,这不是设计缺陷…
[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(li…
请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(list1 is list3) 请先猜想打印的结果: 是不是这样: [10] [123] [a] False 但是,实际的打印效果 请…
笔记:Python 默认参数必须指向不变对象 学习记录 >>> def add_end(L=[]): L.append('END') return L >>> add_end() ['END'] >>> # 但是再次调用 add_end() 时,结果就不对了 >>> add_end() ['END', 'END'] >>> add_end() ['END', 'END', 'END'] 所以默认参数改为 None 就…
其实也不能说是陷阱,只是一个不容易注意到的地方,尤其是有其他java/c++类编程语言经验的人员,这里涉及到python的一个特点,所以笔者说是陷阱只是一个噱头而已. def test(item, buf = []): buf.append(buf) print buf 非常简单的一个函数,功能非常简单,现在看下面的调用代码 test('younger') test('shen') 输出: ['younger'] ['younger', 'shen'] 该函数初衷是希望当没有提供默认的buff参…
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而且非常惊人(对于新手来说): >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo() 实际上,这不是设计缺陷…
一:内置函数 globals() locals() 1.返回的是字典,字典里面的键值对:全局作用域的全部内容 print(globals()) 2.返回的是字典,字典里面的键值对:当前作用域的全部内容 print(locals()) 二:默认参数的陷阱 1.默认参数:没传值,可变数据类型在内存中是同一个 def func(name, alist=[]): alist.append(name) renturn alist r1 = fun('whj') print(r1) >>>['whj…
def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) print(list1) # [10] list2 = extend_list(123, []) print(list2) # [123] list3 = extend_list('a') print(list3) # [10, 'a'] print("-" * 20) print(list1) # [10, 'a'] print(list…
默认参数的坑 定义一个函数,传入一个list,添加一个end再返回 def add_end(L=[]): L.append('END') return L 正常调用时,结果似乎不错 print add_end([1,2,3]) #[1, 2, 3, 'END'] 使用默认参数调用时,一开始结果也是对的,但是再次调用时,结果就不对了 print add_end() #['END'] print add_end() #['END', 'END'] print add_end() #['END', '…
定义默认参数 定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 >>> int('123', 8) 83 int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数. 可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去.但是在需要的时候,又可以传入额外的参数来覆盖默认参数值. 我们来定…