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中何种情况下需要使用断言
Apr 01 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Python实现的单向循环链表功能示例
Nov 10 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python的依赖管理的实现
May 14 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
python Zmail模块简介与使用示例
Dec 19 Python
Python作用域和名称空间的详细介绍
Apr 13 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
轻松修复Discuz!数据库
2008/05/03 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
10款实用的PHP开源工具
2015/10/23 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
取得父标签
2006/11/14 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
使用JavaScript破解web
2018/09/28 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
高校自主招生自荐信
2013/12/09 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
2014年服务员工作总结
2014/11/18 职场文书
小学课改工作总结
2015/08/13 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python