您的位置: 网站首页> python基础> 当前文章

python函数坑之默认参数为列表(可变对象),每次调用值都变

老董-我爱我家房产SEO2020-09-29163围观,116赞

  前言:函数的坑可以查看此文python函数各种坑了解更多。python函数可以有默认参数,但是当你给一个默认参数传值为为可变数据类型时,你会发现一些奇葩的问题。案例如下:

# -*- coding: utf-8 -*-
def append_to(num, my_list=[]):
    my_list.append(num)
    print(my_list)

append_to(1)
append_to(2)
append_to(3)
[1]
[1, 2]
[1, 2, 3]

  python中函数也是对象,默认参数是函数的属性(函数的参数默认值保存在函数的__defaults__属性中),如果默认值是可变类型变量,它的值会随着函数被调用而改变。

  python这个特点一方面和python中可变类型变量的数据结构有关,另一方面可能是为了体现python中一切皆对象的事实!其实这种现象在js里也会遇到!避免这种问题就直接用下面的写法,简单实用。

# -*- coding: utf-8 -*-


def append_to(num):
    my_list = []
    my_list.append(num)
    return my_list


a = append_to(5)
print('a是',a)

b = append_to(6)
print('a是',a) # 此时a跟着变了
print('b是',b)




a是 [5]
a是 [5]
b是 [6]

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    python函数坑之默认参数为列表(可变对象),每次调用值都变文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200