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

时间:2023-10-22 19:43:20 


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

标签:函数缺省值
0
投稿

猜你喜欢

  • 解决python selenium3启动不了firefox的问题

    2022-12-02 11:36:34
  • Python高级特性 切片 迭代解析

    2022-03-28 14:32:49
  • tp5递归 无限级分类详解

    2024-05-11 09:53:48
  • jQuery mobile转换url地址及获取url中目录部分的方法

    2023-07-02 05:34:34
  • Python中is与==的使用区别详解

    2023-10-15 04:08:21
  • django模板加载静态文件的方法步骤

    2023-04-12 17:13:26
  • MySQL多表连接查询详解

    2024-01-27 13:07:57
  • 如何将txt文本中的数据轻松导入MySQL表中

    2009-03-06 17:35:00
  • 漫谈前端开发中的团队合作

    2009-02-05 21:02:00
  • Python模块/包/库安装的六种方法及区别

    2021-11-03 15:53:56
  • python处理csv数据动态显示曲线实例代码

    2022-05-01 00:35:05
  • 一个PHP的QRcode类与大家分享

    2023-06-24 05:39:33
  • pycharm创建scrapy项目教程及遇到的坑解析

    2022-05-02 12:55:38
  • javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)

    2024-04-22 12:49:59
  • Python实现单例模式的四种方式详解

    2023-07-12 03:07:43
  • Go语言切片前或中间插入项与内置copy()函数详解

    2024-05-22 10:16:19
  • JS实现简洁、全兼容的拖动层实例

    2024-04-19 09:49:08
  • MySQL视图简介及基本操作教程

    2024-01-24 14:51:51
  • MySQL百万级高并发网站实战攻略

    2009-03-25 15:49:00
  • Python控制鼠标键盘代码实例

    2021-07-28 11:17:30
  • asp之家 网络编程 m.aspxhome.com