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变量不能以数字打头详解
Jul 06 Python
Python字符串格式化的方法(两种)
Sep 19 Python
python删除过期log文件操作实例解析
Jan 31 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python3实现磁盘空间监控
Jun 21 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
python实现的读取网页并分词功能示例
Oct 29 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
python try...finally...的实现方法
Nov 25 Python
如何编写python的daemon程序
Jan 07 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
PHP编写RESTful接口
2016/02/23 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
Python实现类继承实例
2014/07/04 Python
python使用psutil模块获取系统状态
2016/08/27 Python
window下eclipse安装python插件教程
2017/04/24 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Django中的Signal代码详解
2018/02/05 Python
用Eclipse写python程序
2018/02/10 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
党员公开承诺事项
2014/03/25 职场文书
政工例会汇报材料
2014/08/26 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Python实现位图分割的效果
2021/11/20 Python
Python标准库pathlib操作目录和文件
2021/11/20 Python