複製代碼 代碼如下: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': ''}