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 Django连接MySQL数据库做增删改查
Nov 07 Python
Python不规范的日期字符串处理类
Jun 10 Python
零基础写python爬虫之神器正则表达式
Nov 06 Python
python分析网页上所有超链接的方法
May 08 Python
简单上手Python中装饰器的使用
Jul 12 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
python中return的返回和执行实例
Dec 24 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
用python实现一个简单的验证码
Dec 09 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
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python只用40行代码编写的计算器实例
2017/05/10 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
python requests post多层字典的方法
2018/12/27 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
小区停车场管理制度
2014/01/27 职场文书
就业推荐表导师评语
2014/12/31 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
Python如何让字典保持有序排列
2022/04/29 Python