python函数缺省值与引用学习笔记分享
代码如下:
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': ''}
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
世事一场大梦 2020-11-17
xiaoseyihe 2020-11-16
Morelia 2020-11-03
CloudXli 2020-11-03
文山羊 2020-10-31
comtop0 2020-10-31
pythonxuexi 2020-10-30
三石 2020-10-29
chaochao 2020-10-27
PythonMaker 2020-10-27