欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Python 使用 list 作为函数参数时,参数是否会初始化?

程序员文章站 2022-04-10 10:33:12
...
看到了这样一段代码:

def foo(a, b=[]):
    b.append(a)
    print b

回复内容:

>>> def foo(bar=[]):
...     return bar
>>> foo.func_name
'foo'
>>> foo.func_defaults
([],)
>>> foo() is foo.func_defaults[0]
True
官方文档解释在这里:default args 的求值是在定义的时候,只做一次
4. More Control Flow Tools

但是……
>>> def f(a, b=[]):
...     b.append(a)
...     print b
... 
>>> f(1)
[1]
>>> f(1)
[1, 1]
>>> def f(a, b=None):
...     b = b if b is not None else []
...     b.append(a)
...     print b
... 
>>> f(1)
[1]
>>> f(1)
[1]
>>> f(1)
[1]
>>> a = []
>>> b = []
>>> a.append(1)
>>> b
[]
>>> 
啥都不用说,加一个id()输出b的所谓的地址,你就明白了

Python 使用 list 作为函数参数时,参数是否会初始化? no, def foo(a=[]) 这种函数参数写法叫 参数默认值,只会在函数声明是初始化一次。之后不会再变了。

note, 建议了解一下 def foo(a=[])和 foo(a=[])的区别:前者是参数默认值,后者是keyword arguments. 还有这种def foo(*args, **kargs) 和 这种 foo(*args, **kargs), 都是有细微区别的。 不会的, 默认值之间是共享的, 只会创建一次, 并不会每次创建一个新的对象. 也就是说使用可变对象作为函数的默认值时会导致函数的混乱. 同理使用字典作为默认参数,会得出类似的返回.
def foo(k,v, fdict={}):
    fdict[k] = v
    print fdict
foo(1,2)
foo(3,4)
Python 使用 list 作为函数参数时,参数是否会初始化?

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • Python 使用 list 作为函数参数时,参数是否会初始化?
  • 专题推荐

    作者信息
    Python 使用 list 作为函数参数时,参数是否会初始化?

    认证0级讲师

    推荐视频教程
  • Python 使用 list 作为函数参数时,参数是否会初始化?javascript初级视频教程
  • Python 使用 list 作为函数参数时,参数是否会初始化?jquery 基础视频教程
  • 视频教程分类