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中用于返回绝对值的abs()方法
May 14 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
Python应用领域和就业形势分析总结
May 14 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
python 利用toapi库自动生成api
Oct 19 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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简介
2006/10/09 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php GUID生成函数和类
2014/03/10 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
实时获取Python的print输出流方法
2019/01/07 Python
解决python 上传图片限制格式问题
2019/10/30 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
PHP开发工程师面试问题集锦
2012/11/01 面试题
如何写一个自定义标签
2012/12/28 面试题
六查六看剖析材料
2014/02/15 职场文书
公司业务员岗位职责
2014/03/18 职场文书
开业主持词
2014/03/21 职场文书
纪律教育月活动总结
2014/08/26 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
python 单机五子棋对战游戏
2022/04/28 Python
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript