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

复制代码 代码如下:

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

时间: 2025-01-06 09:45:45

python函数缺省值与引用学习笔记分享_python的相关文章

关于python函数递归返回值的问题

问题描述 关于python函数递归返回值的问题 这是一个匹配字典中词语的函数. 按理说已经匹配成功了 在return之前加个print 输出结果是对的 但是在外面调用输出来就是None 不知道为什么 求大神!! def find_word(dictionary,word): if word in dictionary: return word else: if len(word)-1 == 0: return word else: word = word[0:len(word)-1] find_

JS 自定义函数缺省值的设置方法_javascript技巧

如果想把a缺省值设为5,不能写成: function my(a=5){ xxx; } 简单查了一下,有下面几种可以使用: function my(a){ alert(a||5); } function my(a){ a = typeof(a) == 'undefined' ? 5 : a; } function my(a){ if(typeof(a) == 'undefined'){ a = 5; } } 个人觉得第二种更简洁,更清晰.

JS 自定义函数缺省值的设置方法

如果想把a缺省值设为5,不能写成: function my(a=5){ xxx; } 简单查了一下,有下面几种可以使用: function my(a){ alert(a||5); } function my(a){ a = typeof(a) == 'undefined' ? 5 : a; } function my(a){ if(typeof(a) == 'undefined'){ a = 5; } }

python 列表(list)和元组(tuple)之学习笔记

序列 索引:索引就是php数组的键值.从0开始. 分片:php的slice,如果number[3:9] 注意,截取的值是从第4个索引开始. 步长:分片的每次操作的步进长度.不可以是0,要以是负数,即从后往前数. 序列相加:使用+号进行序列的连接操作 两种相同类型的序列才能相加. 用一个数字x乘以一个序列会生成一个新的序列,原来的序列会被重复x次. None是一个python的内建值,它的确切含义是"什么也没有",有的语言用null. 成员资格:使用in可以检查一个字符串是否存在一个列表

php 变量作用域学习笔记分享

在php当中变量的作用范围php手册上是这样描述的 在用户自定义函数中,一个局部函数范围将被引入.任何用于函数内部的变量按缺省情况将被限制在局部函数范围内.例如:  代码如下 复制代码 <?php $a = 1; /* global scope */ function Test() {    echo $a; /* reference to local scope variable */ } Test(); ?> 这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且

Bootstrap教程JS插件滚动监听学习笔记分享_javascript技巧

本文主要来学习一下JavaScript插件--滚动监听. 1.案例 滚动监听插件可以根据滚动条的位置自动更新所对应的导航标记.你可以试试滚动这个页面,看看左侧导航的变化. 先把实现的代码上了,你可以通过测试代码先来看看效果. <!DOCTYPE html> <html> <head> <title>Bootstrap</title> <meta name="viewport" content="width=de

Python实现的一个自动售饮料程序代码分享_python

写这个程序的时候,我已学习Python将近有一百个小时,在CSDN上看到有人求助使用Python如何写一个自动售饮料的程序,我一想,试试写一个实用的售货程序.当然,只是实现基本功能,欢迎高手指点,新手学习参考. 运行环境:Python 2.7 # encoding=UTF-8 loop=True money=0 while loop:     x = raw_input('提示:请投入金币,结束投币请按"q"键')     if x=='q':         if money==0:

python网络编程学习笔记(一)_python

学习用书:<python 网络编程基础>作者John Goerzen 第一部分底层网络学习         Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作         在<python 网络编程基础>一书中,作者列出了一个简单的Python客户端程序,具体如下: 复制代码 代码如下: import socket,sysport =70host=sys.argv[1] filename=sys.a

JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记三)

1.负号是一元求反运算 如果直接给数字直接量前面添加负号可以得到他们的负值     2.JavaScript中的运算超出了最大能表示的值不会报错,会显示Infinity. 超出最小也不报错,会显示-Infinity. 运算出的结果如果是个非数字的值得时候,用NaN表示.   3.字符串直接量拆分成数行 ECMAScript3中,字符串直接量必须下载一行中,而在ECMScript中,字符串直接量可以拆分成数行,每行必须以反斜线(\)介绍. 如:"two\lines"       &quo