python函数缺省值与引用学习笔记分享
发布时间:2023-10-22 19:43:20
标签:函数缺省值
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': ''}
0
投稿
猜你喜欢
- 孟宪会 由于XML(可扩展标记语言:eXtensible Markup Language)真正的平台无关性,它正在逐渐成为数据传
- OS ( Operating System 操作系统 ) 操作系统模块;它是属于python的标准库,也就是Python自带的库;它常用于处
- sql语句 代码如下:reverse(substring(reverse(Path),1,charindex('/'
- 当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块。可以通过sys.path查看这些路径,比如:>&
- 基本信息程序包名称:基于.net开发的遵循web标准的个人站点程序包下载开发者主页:www.ceocio.net软件大小:1.84mb安装环
- 目录1. 最直观的相加2. 借助 itertools3. 使用 * 解包4. 使用 extend5. 使用列表推导式6. 使用 heapq7
- 一 前期说明:我运行项目的环境是nginx+php,存储代码用的是gitlab,python版本:3.6 django版本:2.2.1 my
- 从去年六一儿童节的LOGO开始,我们就要求以后的每一个节日FLASH LOGO设计时除了具备创意故事外,还必须设计一个小的互动效果,当受众把
- 在pycharm使用过程中,对于每次新建文件的编码格式和关于代码编写者的一些个人信息快捷填写,方法如下:1.打开pycharm,选择File
- 下面代码的功能是为了管理任务的,大家项目中有需要用到的,尽管拿去吧。 这个东西用于可以管理任务比如:今天我要做什么,做了没有,做了就打钩。&
- 性能首先,FCKEDITOR的性能是非常好的,用户只需很少的时间就可以载入FCKEDITOR所需文件.对于其他在线编辑器来说,这几乎是个很难
- 1 , javascript字符集:javascript采用的是Unicode字符集编码。为什么要采用这个编码呢?原因很简单,16位的Uni
- 本文实例讲述了Python实现求数列和的方法。分享给大家供大家参考,具体如下:问题:输入输入数据有多组,每组占一行,由两个整数n(n<
- 一、线程队列queue队列:使用方法同进程的Queue一样如果必须在多个线程之间安全地交换信息时,队列在线程编程中尤其有用。重要:q.put
- CSS3草案中定义了{opacity:来声明元素的透明度,这已经得到了大多数现代浏览器的支持,而IE则很早通过特定的私有属性filter来实
- 【杨辉三角简介】 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。【代码实现】n = eval(input
- 在新建数据库或附加数据库后,想添加关系表,结果出现下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使
- 代码如下:title=request("title") title=replace(title,"chr(3
- 本篇内容介绍了Python编程语言的优势和不足。首先我们来了解什么是Python?Python是一种面向对象的高级编程语言,具有集成的动态语
- 一、安装写出许多有趣的可视化东西也可以画出很多奇妙的图案pip install turtule二、画布画布就是turtle为我们展开用于绘图