美文网首页
关于python的默认参数

关于python的默认参数

作者: 6b7d78bff1fd | 来源:发表于2016-04-03 09:23 被阅读0次

首先从函数的定义开始理解
****命题1: ****函数的定义不会引起函数内部代码的执行

def a():
    print "a executed"
    return 1

看下面这个函数, 函数内部是错误的, 不过没关系, 根据命题1, 函数内部代码不会执行

def b(x = a()):
    x.append(5)
    print x
a executed

但是函数b在定义的时候, 函数a被执行
修改函数b:

def b(x = a()):
    return x + 1
a executed
def c(r):
    print r, "at", id(r)

x = b()
c(x)
y = b()
c(y)
z = b()
c(z)
2 at 25485664
2 at 25485664
2 at 25485664

**命题2 **每个具有相同的值的NAME, 或者TAG, 内存地址一样
证明如下:

o = 1
p = 1
q = 1
print id(o)
print id(p)
print id(q)
25485688
25485688
25485688

即使是deepcopy(i don't care about what deepcopy() does)之后(注意看o, p, q的内存地址)

import copy
n1 = 1
n2 = copy.deepcopy(n1)
print id(n1)
print id(n2)
25485688
25485688

另外, 有关mutable, immutable的定义, 这里不做介绍
此外, 本文并不是科普文, 不会详细介绍每一个概念, 所以如果你因为我没有讲清楚而埋怨, 请记住我只意在讲述以下结论
1, immutable类型的客体(我不把object翻译成对象)由于函数设定而需要被改变的时候, 编译器会分配一块新的内存来存储改变后的对象
2, immutable客体在任何scope内存的地址都一样(证明如下)

num = 10
print id(num)
def func():
    l_num = 10
    print id(l_num)
func()
25485472
25485472

关于mutable客体

它们的地址是不固定的, 每次运行以下代码都会得到不同结果
根据python的赋值机制, 要追踪一个mutable客体, 给它挂上一个TAG, 以下例子中TAG是flxbl

print id([])
print id([])
print id([])
print "-"*50
print id([1])
print id([1])
print id([1])
print "-"*50
flxbl = []
print id(flxbl)
print id(flxbl)
print id(flxbl)
140053251742320
140053251965728
140053251524368
--------------------------------------------------
140053251524368
140053251965728
140053251524368
--------------------------------------------------
140053251524368
140053251524368
140053251524368

rambling are located mutable objects, they are not unique, they are scattered everywhere

以上结论表明: 如果你在默认参数上出现问题, 那么问题并不是出在函数的定义, 而是由于你不理解python的赋值机制

相关文章

  • 关于python的默认参数

    首先从函数的定义开始理解****命题1: ****函数的定义不会引起函数内部代码的执行 看下面这个函数, 函数内部...

  • Python—参数类型

    1、位置参数(必选参数) 2、默认参数 (1)设置默认参数时,必选参数在前,默认参数在后,否则Python解释器会...

  • python-调用函数(2)

    python中,有默认参数时,需要将默认参数放在必选参数之后 有多个默认参数时,可以通过顺序提供默认参数,也可以不...

  • Python进阶-函数默认参数

    写在前面 如非特别说明,下文均基于Python3 Python进阶-函数默认参数 一、默认参数 python为了简...

  • Python函数的参数(详细版)

    函数的参数有:必选参数、默认参数、可变参数、关键字参数。 在Python中定义函数,可以用必选参数、默认参数、可变...

  • python学习(五)-函数的参数

    默认参数 设置默认参数时,有几点要注意: 一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下...

  • Python 那些不为人知的冷知识

    1、默认参数最好不为可变对象 函数的参数分三种 可变参数 默认参数 关键字参数 Python 中的 def 语句在...

  • python基础-07-函数

    python基础-函数 1.函数的定义 例子: 2.python中函数的参数详解 必备参数demo: 默认参数de...

  • Python的参数

    在Python 中,除了正常定义的参数外,Python 还可以使用默认参数,可变参数,关键字参数,使得函数的灵活度...

  • Python:函数的参数(默认参数)

    新的power(x, n)函数定义没有问题,但是,旧的调用代码失败了,原因是我们增加了一个参数,导致旧的代码因为缺...

网友评论

      本文标题:关于python的默认参数

      本文链接:https://www.haomeiwen.com/subject/iroelttx.html