写点什么

python 的默认参数的一个坑 (1),快速学会

作者:程序媛可鸥
  • 2022 年 3 月 17 日
  • 本文字数:960 字

    阅读完需:约 3 分钟

'''


遇到问题没人解答?小编创建了一个 Python 学习交流 QQ 群:778463939


寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和 PDF 电子书!


'''


def f(a, L=[]):


print(id(L))


L.append(a)


print(id(L))


return L


print(f(1))


print(f(2))


print(f(3))


结果是


4513289600


4513289600


[1]


4513289600


4513289600


[1, 2]


4513289600


4513289600


[1, 2, 3]


当然, python 的文档中也给出了一个推荐的方法


If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:


def f(a, L=None):


if L is None:


L = []


L.append(a)


return L


即: 将 L 默认为 None, 当该参数未传时, 将 L 设置为空列表, 在 Python 启动时 L 会设置为 None, 而当我们调用而不传参数 L 时, 在函数 f 内部重新给 L 赋值, 此时 L 为函数 f 内的一个私有变量, 其不会影响到参数 L 本身, 同样的我们可以通过打印内存地址来验证


'''


遇到问题没人解答?小编创建了一个 Python 学习交流 QQ 群:778463939


寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和 PDF 电子书!


'''


def f(a, L=None):


print(id(L))


if L is None:


L = []


print(id(L))


L.append(a)


return L


print(f(1))


print(f(2))


print(f(3))


输出


4467395776


4469232960


[1]


4467395776


4469232960


[2]


4467395776


4469232960


[3]


当然我们也可以在不更改函数 f 的情况下, 在每次调用 f 的时候都传输参数 L, 如果想让他为一个空列表那就传一个空列表同样能解决问题, 因为你每次指定了值, 便会在传入时修改 L 的值



(1)Python 所有方向的学习路线(新版)


这是我花了几天的时间去把 Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。


最近我才对这些路线做了一下新的更新,知识体系更全面了。



(2)Python 学习视频


包含了 Python 入门、爬虫、数据分析和 web 开发的学习视频,总共 100 多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。



(3)100 多个练手项目


我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。



用户头像

Python编程资料加Q群免费领取:419829237 2022.03.14 加入

还未添加个人简介

评论

发布
暂无评论
python的默认参数的一个坑(1),快速学会_程序员_程序媛可鸥_InfoQ写作平台