Python学习注意点-函数默认值
来源:互联网 发布:java有什么用处 编辑:程序博客网 时间:2024/05/17 21:37
在Python2.x中,函数参数中的默认值是在定义的时候就已经计算出来了,也就是说该默认参数只会初始化一次,以后每次调用的默认参数都是同一个,具体可以参考Python官网文档-函数默认值。由于这个特点,在定义函数默认值的时候,如果参数是可变对象,那么该参数的默认值在定义的地方需要定义成None,同时在函数实现内部进行特殊处理。否则,会由于上一次的值而导致并不是预期的结果
以下是官网的两个例子:
>>> i = 5>>> def f(arg = i):... print arg... >>> i = 6>>> f()5
上面例子中函数的本来含义是函数参数的默认值和变量i的保持一直,但是在修改i的值之后还是原第一次i的值。
>>> def f2(a, L=[]):... L.append(a)... return L... >>> print f2(1)[1]>>> print f2(2)[1, 2]>>> print f2(3)[1, 2, 3]上面例子中由于上一次调用改变了默认值,导致后面使用时列表中包含了上次的元素。
以下是我自己测试的例子:
>>> def get_default():... print 'get_default called!'... return []... >>> def f3(a, L=get_default()):... L.append(a)... return L... get_default called!>>> f3(1)[1]>>> f3(2)[1, 2]>>> f3(3)[1, 2, 3]>>>可以看到在函数定义的时候获取默认值的方法就被调用了。
正确的写法应该是:
>>> def f4(a, L=None):... if L is None:... L = []... L.append(a)... return L... >>> print f4(1)[1]>>> print f4(2)[2]>>> print f4(3)[3]
常见的比如使用当前时间戳time.time():
错误的写法:
>>> import time>>> def time_cost(start, end=time.time()):... print 'time cost: %f' % (end - start)... >>> start = time.time()>>> time_cost(start)time cost: -5.835118>>> time_cost(start)time cost: -5.835118正确的写法:
>>> import time>>> def time_cost(start, end=None):... if end is None:... end = time.time()... print 'time cost: %f' % (end - start)... >>> start = time.time()>>> time_cost(start)time cost: 7.265897>>> time_cost(start)time cost: 9.630550
0 0
- Python学习注意点-函数默认值
- Python split函数注意点
- [Python]默认函数参数注意点
- python函数参数默认值
- python学习错误记录——创建类中初始化函数注意点
- python tips - 注意函数参数的默认值-默认参数-可选参数
- Python中函数默认值问题
- Python注意点
- Python基础知识注意点
- python注意点
- Python函数传参的几个注意点
- Python函数的几点需要注意的细节
- python中函数式生成器迭代的注意点
- cvCloneImage函数注意点
- 3.15-函数注意点
- scanf函数注意点
- strtoul函数注意点
- 学习Python中,总结一些语法相关注意点
- 【安卓】关于 Android 默认字体以及对比微软雅黑字体
- NotePad++ 配置lua语法检查
- 查询union多个表
- 十分钟了解分布式计算:Spark
- OpengGL显示列表
- Python学习注意点-函数默认值
- 怎样能长高个子
- server.xml修改后,tomcat访问不到服务器
- android 头像截取(方形、椭圆、不规则头像截取)
- Android Camera 3D效果
- Storm高级原语(一) — Transactional topology
- javascript_typeof
- Tomcat5集群中的SESSION复制
- 什么是SysWow64