加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python默认params混乱

发布时间:2020-12-16 22:39:12 所属栏目:Python 来源:网络整理
导读:我刚开始学习Python,我对这个例子感到困惑: def append_to(element,to=None): if to is None: to = [] to.append(element) return to 如果要初始化一次,第二次调用时不会不是None吗?我知道上面的代码有效,但无法解决这个“初始化一次”的描述. 最佳答案 If

我刚开始学习Python,我对这个例子感到困惑:

def append_to(element,to=None):
    if to is None:
        to = []
    to.append(element)
    return to

如果要初始化一次,第二次调用时不会不是None吗?我知道上面的代码有效,但无法解决这个“初始化一次”的描述.

最佳答案

If “to” was initialized once,wouldn’t “to” won’t be “None” the 2nd time it’s called?

如果您没有为它传递值,则将变为None:append_to(1)并且仅当to为None时,您的代码才会将本地名称重新绑定到函数体内新创建的列表:to = [].

函数的默认值只分配一次,即您指定为默认值的任何内容,该对象将用于您对函数进行的每次调用,并且不会更改,通常每次使用相同的默认值引用打电话给你做功能.将mutable分配为默认值时,这很重要:

l = [] 
def defArgs(d=l)            # default arguments,same default list for every call
    d.append(1)
    return d 

defArgs() is l            # Object identity test: True

多次运行上面的函数,您将观察到列表越来越多,因为每个函数调用共享的每个函数只能获得一个参数默认值的副本.但请注意:

def localVars(d=None):
    if d is None: 
        d = []               # Different list for every call when d is None

每次调用localVars时都会执行d = [];当函数完成其工作时,每个局部变量在引用计数降为0时被垃圾收集,但不是参数的默认值,它们在执行函数后生存,并且在执行函数后通常不进行垃圾收集.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读