• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python函数缺省值与引用学习笔记分享

python 搞代码 4年前 (2022-01-07) 23次浏览 已收录 0个评论

有关一个在函数参数设置缺省值与引用的问题,这个问题是大多数Pythoner可能会忽视的问题,作个笔记,以备后阅,同时供需要的朋友参考

代码如下:
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 —-来源gao@dai!ma.com搞$代^码网——
操作前 [] {} {}
操作后 [1] {‘e’: ”} {‘q’: ”}
2 ———-
操作前 [] {} {}
操作后 [1] {‘d’: ”} {‘s’: ”}
3 ———-
操作前 [] {} {}
操作后 [1] {‘m’: ”} {‘k’: ”}

以上就是python函数缺省值与引用学习笔记分享的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python函数缺省值与引用学习笔记分享
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址