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的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python实现的读写json文件功能示例
Jun 05 Python
用python爬取租房网站信息的代码
Dec 14 Python
Python 转换文本编码实现解析
Aug 27 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
python 下载文件的多种方法汇总
Nov 17 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
Python 中面向接口编程
May 20 Python
python基础之//、/与%的区别详解
Jun 10 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+Html+缓存
2006/11/25 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php单一接口的实现方法
2015/06/20 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
Javascript window对象详解
2014/11/12 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
canvas知识总结
2017/01/25 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
增大python字体的方法步骤
2020/07/05 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
行政前台岗位职责
2013/12/04 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
Spring整合Mybatis的全过程
2021/06/28 Java/Android
vue封装数字翻牌器
2022/04/20 Vue.js