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 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python制作小说爬虫实录
Aug 14 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Python中Numpy ndarray的使用详解
May 24 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python中Cookies导出某站用户数据的方法
May 17 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不用正则采集速度探究总结
2008/03/24 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
微信小程序实现转盘抽奖
2020/09/21 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
详解Python多线程
2016/11/14 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
Python多图片合并PDF的方法
2019/01/03 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
军训 自我鉴定
2014/02/03 职场文书
网管求职信
2014/03/03 职场文书
2014年设计师工作总结
2014/11/25 职场文书
三峡大坝导游词
2015/01/31 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
贫困生证明范文
2015/06/16 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
初中政治教学工作总结
2015/08/13 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
Pillow图像处理库安装及使用
2022/04/12 Python
java版 简单三子棋游戏
2022/05/04 Java/Android