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选择排序算法的实现代码
Nov 21 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python实现外卖信息管理系统
Jan 11 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
python线程池threadpool使用篇
Apr 27 Python
Python带动态参数功能的sqlite工具类
May 26 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python安装Bs4的多种方法
Nov 28 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php实现无限级分类
2014/12/24 PHP
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Python中的sort()方法使用基础教程
2017/01/08 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python使用wxPython实现计算器
2018/01/30 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
Python 多进程原理及实现
2020/12/21 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
美德好少年事迹材料
2014/01/19 职场文书
初中科学教学反思
2014/01/21 职场文书
服务员岗位职责
2014/01/29 职场文书
文明寝室申报材料
2014/05/12 职场文书
学习张林森心得体会
2014/09/10 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
高三教师工作总结2015
2015/07/21 职场文书
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android