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 相关文章推荐
MAC中PyCharm设置python3解释器
Dec 15 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
通过python将大量文件按修改时间分类的方法
Oct 17 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
简单的Python调度器Schedule详解
Aug 30 Python
Python with语句和过程抽取思想
Dec 23 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
Python装饰器用法与知识点小结
Mar 09 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
python中round函数如何使用
Jun 19 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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
Banner程序
2006/10/09 PHP
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
隐性调用php程序的方法
2015/06/13 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
Python使用post及get方式提交数据的实例
2019/01/24 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
如何利用find命令查找文件
2016/11/18 面试题
文秘自荐信
2013/10/20 职场文书
出生医学证明书
2014/09/15 职场文书
导师工作推荐信
2015/03/27 职场文书
农村党支部承诺书
2015/04/30 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS
Python+Tkinter制作专属图形化界面
2022/04/01 Python