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中List的sort方法指南
Sep 01 Python
在Python中使用元类的教程
Apr 28 Python
python 2.7.14安装图文教程
Apr 08 Python
Django安装配置mysql的方法步骤
Oct 15 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
Python集合操作方法详解
Feb 09 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
Python如何将装饰器定义为类
Jul 30 Python
Python中lru_cache的使用和实现详解
Jan 25 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
iview实现图片上传功能
2020/06/29 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
安全资金保障制度
2014/01/23 职场文书
公司离职证明标准样本
2014/10/05 职场文书
丧事答谢词
2015/01/05 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL