python函数缺省值与引用学习笔记分享


Posted in Python onFebruary 10, 2013
import random, string
class C(object):    pass
def dangerFunction(msg, l = [], b = {}, c = C()):
    print msg, '-'*10
    print l, b, c.__dict__
    l.append(1)
    b[random.choice(string.ascii_lowercase)] = ''
    c.__dict__[random.choice(string.ascii_lowercase)] = ""
    print l, b, c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print '-'*20
def safeFunction(msg, l = None, b = None, c = None):
    if not l:   l = []
    if not b:   b = {}
    if not c:   c = C()
    print msg, '-'*10
    print l, b, c.__dict__
    l.append(1)
    b[random.choice(string.ascii_lowercase)] = ''
    c.__dict__[random.choice(string.ascii_lowercase)] = ""
    print l, b, c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')

运行结果:
1 ----------
[] {} {}
[1] {'q': ''} {'p': ''}
2 ----------
[1] {'q': ''} {'p': ''}
[1, 1] {'q': '', 'a': ''} {'p': '', 'g': ''}
3 ----------
[1, 1] {'q': '', 'a': ''} {'p': '', 'g': ''}
[1, 1, 1] {'q': '', 'a': '', 'w': ''} {'p': '', 'w': '', 'g': ''}
--------------------
1 ----------
[] {} {}
[1] {'k': ''} {'l': ''}
2 ----------
[] {} {}
[1] {'r': ''} {'c': ''}
3 ----------
[] {} {}
[1] {'q': ''} {'h': ''}

由dangerFunction打印出来的结果来看,缺省值为 [], (), class
再下次调用时,如果继续参数空缺而使用缺省值,那么缺省值延续上次引用。

可能打印无任何标志无法看清楚,加上文字应该会简单很多。

# -*- coding: utf-8 -*-
import random, string
class C(object):    pass
def dangerFunction(msg, l = [], b = {}, c = C()):
    print msg, '-'*10
    print u'操作前', l, b, c.__dict__
    l.append(1)
    b[random.choice(string.ascii_lowercase)] = ''
    c.__dict__[random.choice(string.ascii_lowercase)] = ""
    print u'操作后', l, b, c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print '-' * 10, u'我是分隔符', '-' * 10
def safeFunction(msg, l = None, b = None, c = None):
    if not l:   l = []
    if not b:   b = {}
    if not c:   c = C()
    print msg, '-'*10
    print u'操作前', l, b, c.__dict__
    l.append(1)
    b[random.choice(string.ascii_lowercase)] = ''
    c.__dict__[random.choice(string.ascii_lowercase)] = ""
    print u'操作后',l, b, c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')
1 ----------
操作前 [] {} {}
操作后 [1] {'m': ''} {'v': ''}
2 ----------
操作前 [1] {'m': ''} {'v': ''}
操作后 [1, 1] {'i': '', 'm': ''} {'g': '', 'v': ''}
3 ----------
操作前 [1, 1] {'i': '', 'm': ''} {'g': '', 'v': ''}
操作后 [1, 1, 1] {'i': '', 's': '', 'm': ''} {'s': '', 'g': '', 'v': ''}
---------- 我是分隔符 ----------
1 ----------
操作前 [] {} {}
操作后 [1] {'e': ''} {'q': ''}
2 ----------
操作前 [] {} {}
操作后 [1] {'d': ''} {'s': ''}
3 ----------
操作前 [] {} {}
操作后 [1] {'m': ''} {'k': ''}
Python 相关文章推荐
Python学习笔记_数据排序方法
May 22 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
python实现稀疏矩阵示例代码
Jun 09 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
浅谈Python 参数与变量
Jun 20 Python
python 实现简单的计算器(gui界面)
Nov 11 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 #Python
用python实现的去除win下文本文件头部BOM的代码
Feb 10 #Python
python创建只读属性对象的方法(ReadOnlyObject)
Feb 10 #Python
python将人民币转换大写的脚本代码
Feb 10 #Python
pydev使用wxpython找不到路径的解决方法
Feb 10 #Python
python的id()函数介绍
Feb 10 #Python
python client使用http post 到server端的代码
Feb 10 #Python
You might like
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python 基础教程之Map使用方法
2017/01/17 Python
python3实现绘制二维点图
2019/12/04 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
外语专业毕业生个人的自荐信
2013/11/19 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
老干部工作汇报材料
2014/10/28 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
第一军规观后感
2015/06/12 职场文书
社区结对共建协议书
2016/03/23 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
vue实现在data里引入相对路径
2022/06/05 Vue.js