python函数缺省值与引用学习笔记分享
python函数缺省值与引用学习笔记分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:importrandom,stringclassC(object):passdefdangerFunction(msg,l...

复制代码 代码如下:

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学习
热门python学习
脚本专栏子分类