python中函数的默认参数为list时出现异常分析
2016-11-25 21:55
471 查看
遇到一个奇怪的现象:
讲道理来说输出应该是
可是发现python不讲道理了
一脸懵逼!
前两个能看懂,最后一个什么鬼?
找了一圈终于被我发现,要弄清楚这个问题得先弄清楚python函数默认参数时怎么工作的
输出:
发现了什么?
对!y的内存不会随我们调用函数改变!除非你传入不一样的y的值!
搞清楚这一点之后还需要知道,列表不随它的扩大,减小而改变内存!
输出
懂了吧!
还不懂?
不管了!
'''python def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2) f(3,[3,2,1]) f(3) '''
讲道理来说输出应该是
'''python [0,1] [3,2,1,0,1,4] [0,1,4] '''
可是发现python不讲道理了
'''python [0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 0, 1, 4] '''
一脸懵逼!
前两个能看懂,最后一个什么鬼?
找了一圈终于被我发现,要弄清楚这个问题得先弄清楚python函数默认参数时怎么工作的
'''python def test(x,y=1): print 'y的内存:%s' % id(y) test(1) test(2,1) test(3,2) test(4) '''
输出:
'''python y的内存:30832264 y的内存:30832264 y的内存:30832240 y的内存:30439048 '''
发现了什么?
对!y的内存不会随我们调用函数改变!除非你传入不一样的y的值!
搞清楚这一点之后还需要知道,列表不随它的扩大,减小而改变内存!
'''python L = [] print id(L) L.append(1) print id(L) '''
输出
39870344 39870344
懂了吧!
还不懂?
不管了!
相关文章推荐
- Python中函数及默认参数的定义与调用操作实例分析
- Python 函数默认参数不能使用可变对象,如List,dict
- 谈谈Python函数的默认参数
- 数组转换为List后add或remove出现UnsupportedOperationException异常分析
- Python split()函数默认参数
- python把list的元素依序当成函数的参数
- 数组转换为List后add或remove出现UnsupportedOperationException异常分析
- PYTHON的函数对参数解析分析
- python 函数默认参数值、关键参数
- python基础教程共60课-第42课函数的默认参数
- 零基础学python-2.19 定义函数、调用函数与默认参数
- Python中函数的参数定义和可变参数用法实例分析
- 函数可变参数深入分析之va_list、va_start、va_arg、va_end
- 关于python函数的默认参数,可变参数,关键字参数
- python的函数对参数解析分析
- Python学习笔记--《简明Python教程》之默认函数参数和关键参数函数
- Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
- 详细介绍Python函数中的默认参数
- Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数
- A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数