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

 更新时间:2013年02月10日 18:30:52   作者:  
有关一个在函数参数设置缺省值与引用的问题,这个问题是大多数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 ----------
操作前 [] {} {}
操作后 [1] {'e': ''} {'q': ''}
2 ----------
操作前 [] {} {}
操作后 [1] {'d': ''} {'s': ''}
3 ----------
操作前 [] {} {}
操作后 [1] {'m': ''} {'k': ''}

相关文章

  • Python使用百度API上传文件到百度网盘代码分享

    Python使用百度API上传文件到百度网盘代码分享

    这篇文章主要介绍了Python使用百度API上传文件到百度网盘代码分享,本文使用了一个第三方库poster,在文中给出了链接,需要的朋友可以参考下
    2014-11-11
  • pytorch中部分矩阵乘法和数组乘法的小结

    pytorch中部分矩阵乘法和数组乘法的小结

    本文主要介绍了pytorch中部分矩阵乘法和数组乘法的小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python grequests模块使用场景及代码实例

    Python grequests模块使用场景及代码实例

    这篇文章主要介绍了Python grequests模块使用场景及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Django静态文件加载失败解决方案

    Django静态文件加载失败解决方案

    这篇文章主要介绍了Django静态文件加载失败解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python用函数思想完成哥德巴赫猜想代码分析

    Python用函数思想完成哥德巴赫猜想代码分析

    在本篇文章里小编给大家整理的是一篇关于Python用函数思想完成哥德巴赫猜想代码分析,有兴趣的朋友们可以参考下。
    2021-06-06
  • Python第三方库的几种安装方式(小结)

    Python第三方库的几种安装方式(小结)

    这篇文章主要介绍了Python第三方库的几种安装方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Flask带参URL传值的实现方法

    Flask带参URL传值的实现方法

    这篇文章主要介绍了Flask带参URL传值的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • python使用正则搜索字符串或文件中的浮点数代码实例

    python使用正则搜索字符串或文件中的浮点数代码实例

    这篇文章主要介绍了python使用正则搜索字符串或文件中的浮点数代码实例,同时包含一个读写到文件功能,需要的朋友可以参考下
    2014-07-07
  • 对python字典元素的添加与修改方法详解

    对python字典元素的添加与修改方法详解

    今天小编就为大家分享一篇对python字典元素的添加与修改方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 解决Django一个表单对应多个按钮的问题

    解决Django一个表单对应多个按钮的问题

    今天小编就为大家分享一篇解决Django一个表单对应多个按钮的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论