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模块概念
Jan 11 Python
python3中的md5加密实例
May 29 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python 获取字典键值对的实现
Nov 12 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
一个入门级python爬虫教程详解
Jan 27 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
虫族 ZERG 概述
2020/03/14 星际争霸
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
smarty中js的调用方法示例
2014/10/27 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python制作websocket服务器实例分享
2016/11/20 Python
python正则实现计算器功能
2017/12/14 Python
Python简单基础小程序的实例代码
2019/04/28 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
详解Python中import机制
2020/09/11 Python
2014年教师培训的自我评价
2014/01/03 职场文书
教师节商场活动方案
2014/02/13 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
运动会演讲稿50字
2014/08/25 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
班委竞选稿范文
2015/11/21 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
九年级英语教学反思
2016/02/15 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers