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函数缺省值与引用学习笔记分享
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@