• 技术文章 >后端开发 >Python教程

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

    2016-06-06 11:28:06原创548
    代码如下:


    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': ''}

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:函数缺省值
    上一篇:把大数据数字口语化(python与js)两种实现 下一篇:flask中使用SQLAlchemy进行辅助开发的代码
    大前端线上培训班

    相关文章推荐

    • python fabric实现远程操作和部署示例• python数据结构之二叉树的统计与转换实例• python读写ini配置文件方法实例分析• Python访问MySQL封装的常用类实例• 在Python的Django框架中编写编译函数

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网