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运行的17个时新手常见错误小结
Aug 07 Python
在Python中使用列表生成式的教程
Apr 27 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python三级目录展示的实现方法
Sep 28 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
详解Python学习之安装pandas
Apr 16 Python
numpy求平均值的维度设定的例子
Aug 24 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
Python使用pdb调试代码的技巧
May 03 Python
keras 多gpu并行运行案例
Jun 10 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
重置版宣传动画
2020/04/09 魔兽争霸
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
服装设计专业毕业生推荐信
2013/11/09 职场文书
地理教师岗位职责
2014/03/16 职场文书
公司委托书格式
2014/08/01 职场文书
党员自我评价范文2015
2015/03/03 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS