Python使用函数默认值实现函数静态变量的方法


Posted in Python onAugust 18, 2014

本文实例展示了Python使用函数默认值实现函数静态变量的方法,具体方法如下:

一、Python函数默认值

Python函数默认值的使用可以在函数调用时写代码提供方便,很多时候我们只要使用默认值就可以了。 所以函数默认值在python中用到的很多,尤其是在类中间,类的初始化函数中一帮都会用到默认值。 使用类时能够方便的创建类,而不需要传递一堆参数。

只要在函数参数名后面加上 ”=defalut_value”,函数默认值就定义好了。有一个地方需要注意的是,有默认值的参数必须在函数参数列表的最后,不允许将没有默认值的参数放在有默认值的参数后,因为如果你那样定义的话,解释器将不知道如何去传递参数。

先来看一段示例代码:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
  while True:
    ok = raw_input(prompt)
    if ok in ('y', 'ye', 'yes'): return True
    if ok in ('n', 'no', 'nop', 'nope'): return False
    retries = retries - 1
    if retries < 0: raise IOError, 'refusenik user'
    print complaint

你调用上面的函数时,可以修改重试次数和输出的提示语言,如果你比较懒得话,那么什么都不用改。

二、python使用函数默认值来实现函数静态变量的功能

Python中是不支持静态变量的,但是我们可以通过函数的默认值来实现静态变量的功能。
当函数的默认值是内容是可变的类时,类的内容可变,而类的名字没变。(相当于开辟的内存区域没有变,而其中内容可以变化)。
这是因为python中函数的默认值只会被执行一次,(和静态变量一样,静态变量初始化也是被执行一次。)这就是他们的共同点。

再来看下面的程序片段:

def f(a, L=[]):
  L.append(a)
  return L
 
print f(1)
print f(2)
print f(3)
print f(4,['x'])
print f(5)

其输出结果是:

[1]
[1, 2]
[1, 2, 3]
['x', 4]
[1, 2, 3, 5]

前面的好理解,为什么最后 “print f(5)”的输出是 “[1, 2, 3, 5]”呢?

这是因为 “print f(4,['x'])”时,默认变量并没有被改变,因为默认变量的初始化只是被执行了一次(第一次使用默认值调用),初始化执行开辟的内存区(我们可以称之为默认变量)没有被改变,所以最后的输出结果是“[1, 2, 3, 5]”。

相信本文所述实例对大家Python程序设计有一定的帮助作用。

Python 相关文章推荐
python 解析html之BeautifulSoup
Jul 07 Python
Python进程间通信用法实例
Jun 04 Python
浅析python中的分片与截断序列
Aug 09 Python
Python实现统计文本文件字数的方法
May 05 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
Python如何根据时间序列数据作图
May 12 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
Python中正则表达式的用法实例汇总
Aug 18 #Python
python中enumerate的用法实例解析
Aug 18 #Python
Python采用raw_input读取输入值的方法
Aug 18 #Python
Python中Collection的使用小技巧
Aug 18 #Python
Python实现3行代码解简单的一元一次方程
Aug 18 #Python
Python统计列表中的重复项出现的次数的方法
Aug 18 #Python
Python中无限元素列表的实现方法
Aug 18 #Python
You might like
php getsiteurl()函数
2009/09/05 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
浅谈Koa服务限流方法实践
2017/10/23 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
python中dir函数用法分析
2015/04/17 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python实现SOM算法
2018/02/23 Python
利用Python如何生成便签图片详解
2018/07/09 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python实现归并排序算法
2018/11/22 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
python实现程序重启和系统重启方式
2020/04/16 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
《搭石》教学反思
2014/04/07 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
nginx rewrite功能使用场景分析
2022/05/30 Servers