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爬虫正则表达式之处理换行符
Jun 08 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
Python中psutil的介绍与用法
May 02 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
python模拟斗地主发牌
Apr 22 Python
python爬虫工具例举说明
Nov 30 Python
浅谈怎么给Python添加类型标注
Jun 08 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数据库操作面向对象的优点
2006/10/09 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php实现httpclient类示例
2014/04/08 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
银行毕业实习自我鉴定
2013/09/19 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
伊索寓言读书笔记
2015/06/30 职场文书