ITPub博客

首页 > IT职业 > IT图书 > Python参数传递,既不是传值也不是传引用

Python参数传递,既不是传值也不是传引用

IT图书 作者:ldzsl 时间:2021-09-09 09:12:36 0 删除 编辑

面试的时候,有没有被问到Python传参是传引用还是传值这种问题?有没有听到过Python传参既不是传值也不是传引用这种说法?一个小小的参数默认值也可能让代码出现难以查找的bug?

如果你也遇到过上面的问题,不妨我们来探究下Python函数传递的种种。

1才对,而实际输出看上去好像默认参数好像只生效了一次。原因在于Python的函数也是对象(万物皆对象),这个对象只初始化一次,加上参数又是不可变对象,所以每次调用实际上都修改的是一个对象。

解决这个问题,推荐再参数传递可变对象时,默认值设置为None,在函数内部对None进行判断后再赋予默认值。

def test(b=None):
    b = b or []
    b += [1]
    print(b)

test()  # [1]
test()  # [1]
test()  # [1]

再看一段代码。

i = 1
def test(a=i):
    print(a)

i = 2
test()  # 1

由于参数默认值是在函数定义时而不是函数执行时确定的,所以这段代码test方法的参数默认值时1而不是2。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2325/viewspace-2800599/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-01-19

  • 博文量
    72
  • 访问量
    12921