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查看微信好友是否删除自己
Dec 19 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
python回调函数中使用多线程的方法
Dec 25 Python
python多进程控制学习小结
Oct 31 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
Python模块、包(Package)概念与用法分析
May 31 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
详解python中docx库的安装过程
Nov 08 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
Python基础之元组与文件知识总结
May 19 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 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
python调用java的Webservice示例
2014/03/10 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python爬取m3u8连接的视频
2018/02/28 Python
numpy中矩阵合并的实例
2018/06/15 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
机电专业毕业生推荐信
2013/11/10 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
校园招聘策划书
2014/01/09 职场文书
入党自传范文2015
2015/06/26 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
JS函数式编程实现XDM一
2022/06/16 Javascript