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实现发送email的几种常用方法
Aug 18 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python登录豆瓣并发帖的方法
Jul 08 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
Django中使用MySQL5.5的教程
Dec 18 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
python如何通过twisted搭建socket服务
Feb 03 Python
python面向对象版学生信息管理系统
Jun 24 Python
python周期任务调度工具Schedule使用详解
Nov 23 Python
python 多态 协议 鸭子类型详解
Nov 27 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基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Python程序设计入门(2)变量类型简介
2014/06/16 Python
python生成密码字典的方法
2018/07/06 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python的高阶函数用法实例分析
2019/04/11 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
中学教师岗位职责
2013/11/26 职场文书
十佳护士先进事迹
2014/05/08 职场文书
移交协议书
2014/08/19 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
七年级作文之英语老师
2019/10/28 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
MySQL详细讲解变量variables的用法
2022/06/21 MySQL