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程序设计入门(3)数组的使用
Jun 16 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
24式加速你的Python(小结)
Jun 13 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
Python调用shell命令常用方法(4种)
May 11 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
Python socket如何解析HTTP请求内容
Feb 12 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
javascript实现多边形碰撞检测
2020/10/24 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
python生成大写32位uuid代码
2020/03/03 Python
Python内置函数locals和globals对比
2020/04/28 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
J2EE面试题
2016/03/14 面试题
寄语学生的话
2014/04/10 职场文书
滴水洞导游词
2015/02/10 职场文书
护士医德医风心得体会
2016/01/25 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL