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
投稿
猜你喜欢
解决python selenium3启动不了firefox的问题
2022-12-02 11:36:34
Python高级特性 切片 迭代解析
2022-03-28 14:32:49
tp5递归 无限级分类详解
2024-05-11 09:53:48
jQuery mobile转换url地址及获取url中目录部分的方法
2023-07-02 05:34:34
Python中is与==的使用区别详解
2023-10-15 04:08:21
django模板加载静态文件的方法步骤
2023-04-12 17:13:26
MySQL多表连接查询详解
2024-01-27 13:07:57
如何将txt文本中的数据轻松导入MySQL表中
2009-03-06 17:35:00
漫谈前端开发中的团队合作
2009-02-05 21:02:00
Python模块/包/库安装的六种方法及区别
2021-11-03 15:53:56
python处理csv数据动态显示曲线实例代码
2022-05-01 00:35:05
一个PHP的QRcode类与大家分享
2023-06-24 05:39:33
pycharm创建scrapy项目教程及遇到的坑解析
2022-05-02 12:55:38
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2024-04-22 12:49:59
Python实现单例模式的四种方式详解
2023-07-12 03:07:43
Go语言切片前或中间插入项与内置copy()函数详解
2024-05-22 10:16:19
JS实现简洁、全兼容的拖动层实例
2024-04-19 09:49:08
MySQL视图简介及基本操作教程
2024-01-24 14:51:51
MySQL百万级高并发网站实战攻略
2009-03-25 15:49:00
Python控制鼠标键盘代码实例
2021-07-28 11:17:30