python默认参数问题
我们在定义默认参数时,有时会遇到一写似乎难以理解的问题。比如,在第二次调用函数时,默认参数记住了上一次执行的结果:
>>> def test(L=[3,]):
... L.append("end")
... print(id(L))
... return L
...
>>> test()
2529720312648
[3, 'end']
>>> test()
2529720312648
[3, 'end', 'end']
>>> test()
2529720312648
[3, 'end', 'end', 'end']
>>> test([1,2,3])
2529720300488
[1, 2, 3, 'end']
>>> test()
2529720312648
[3, 'end', 'end', 'end', 'end']
>>>
看了一下上面代码,我们不难发现,当我们不带参数执行test()
函数时,它的默认参数会记住上次的执行结果。原因时默认参数是一个列表变量,它的地址在开始时已经定住了,所以每次改变都会被记录下来。
但是,但你带参数执行test([1,2,3])
时,你会发现,函数会为[1,2,3]重新开辟一个地址。
本质上,默认参数和你自己输入的列表参数时两个不同的变量。所以,才会有上面精彩的部分。
版权:保留所有解释权。转发请注明出处。
python默认参数问题的更多相关文章
- 笔记:Python 默认参数必须指向不变对象
笔记:Python 默认参数必须指向不变对象 学习记录 >>> def add_end(L=[]): L.append('END') return L >>> ad ...
- python默认参数陷阱
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而 ...
- Python默认参数的坑
默认参数的坑 定义一个函数,传入一个list,添加一个end再返回 def add_end(L=[]): L.append('END') return L 正常调用时,结果似乎不错 print add ...
- Python 默认参数
定义默认参数 定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') ...
- python默认参数不能定义为可变对象类型
python的默认参数只会在函数定义时被确定,而不是每次调用时重新确定,所以,一旦在函数中修改了默认参数,则在随后的调用中都会生效 由于这个特性,在定义函数时,如果默认参数使用可变的对象类型,如空列表 ...
- Python默认参数
在python函数中, 可以使用如下方式声明并初始化参数 def to_smash(total_candies, n_friends=3): """Return the ...
- Python - 默认参数传参陷阱
def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) print(list1) # [10] list2 ...
- Python默认参数的陷阱
一:内置函数 globals() locals() 1.返回的是字典,字典里面的键值对:全局作用域的全部内容 print(globals()) 2.返回的是字典,字典里面的键值对:当前作用域的全部内容 ...
- Python 默认参数 关键词参数 位置参数
def StudentInfo(country='中国', name): print('%s,%s' % (name, country)) StudentInfo('美国', '大卫') 上述代码报错 ...
随机推荐
- 2016-2017学年第三次测试赛 习题E 林喵喵算术
时间限制: 1 Sec 内存限制: 128 MB 提交: 70 解决: 25 提交统计讨论版 题目描述 给你两个八进制数,你需要在八进制计数法的情况下计算a-b. 如果结果为负数,你应该使用负号代 ...
- 结对编程任意Android App Demo
一.产品说明 1.编写目的:用于获取百度图标. 2.情景设计:本产品用于展示图标.随着21世纪各类元素的普及,大部分的人群想下载各类网站的图标,也为了方便用户更便捷的下载而开发的. 3.Demo主要实 ...
- 子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案
最近在编码过程中,遇到过这样一个问题,代码如下,我们有一个父级,他有一定的宽度,在他的里面有两个子级,其中一个是绝对定位的,且要求他们的宽度都和父级保持一致,然后问题就出现了,我们会发现,有了定位的s ...
- [原]greenplum安装详细过程
今天又帮其他项目装了一遍GP,加上之前的两次,这是第三次了,虽然每次都有记录,但这次安装还是发现漏写了一些步骤,在此详细记录一下,需要的童鞋可以借鉴. 1.准备 这里准备了4台服务器,1台做maste ...
- php基础 php 全局变量
$_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和post两种方式的值 $GLOBALS ---- ...
- Lesson 15 Secrecy in industry
Why is secrecy particularly important in the chemical industries? Two factors weigh heavily against ...
- PageObject
import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import o ...
- PAT A1131 Subway Map
dfs,选择最优路径并输出~ 这道题难度非常炸裂,要求完完整整自己推一遍,DFS才算过关!思路:一遍dfs,过程中要维护两个变量,minCnt 中途停靠最少的站.minTransfer需要换成的最少次 ...
- php的弱类型比较
1.==和=== ==为弱相等,也就是说12=="12" --> true,而且12=="12cdf" --> true,只取字符串中开头的整数部分 ...
- 杭电2019 数列有序!(STL解法)
由于这题对于学过数据结构的我来说,真的是很简单,为了减少时间上的损失,链表无疑是最好的选择(因为数组要往后移位子).然后,因为最近想玩些STL的骚操作,所以就用<list>了,然后顺便学了 ...