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 16 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
Python加载带有注释的Json文件实例
May 23 Python
django初始化数据库的实例
May 27 Python
Python引用计数操作示例
Aug 23 Python
Pycharm设置utf-8自动显示方法
Jan 17 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
Python的形参和实参使用方式
Dec 24 Python
Python实现验证码识别
Jun 15 Python
python3爬虫中异步协程的用法
Jul 10 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Pytest测试框架基本使用方法详解
Nov 25 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
网站防止被刷票的一些思路与方法
2015/01/08 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
使用Python实现windows下的抓包与解析
2018/01/15 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
使用python实现学生信息管理系统
2021/02/25 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
控制工程专业个人求职信
2013/09/25 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
优秀员工推荐信
2014/05/10 职场文书
销售员试用期自我评价
2014/09/15 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
golang json数组拼接的实例
2021/04/28 Golang
Pytorch 如何实现常用正则化
2021/05/27 Python
Python的这些库,你知道多少?
2021/06/09 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers