鱼C论坛

 找回密码
 立即注册
查看: 5081|回复: 11

[已解决]关于 __init__ 的参数的默认值

[复制链接]
发表于 2021-1-29 16:31:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gux 于 2021-1-29 16:34 编辑

问题源于 零基础入门学习 Python 038节编程题 1。我试着定义了一个平面上的点的类 Point:

  1. class Point:
  2.     def __init__(self, cor = [0, 0]):
  3.         self.cor = cor # 平面上一点的坐标
复制代码


编辑器建议我把代码改为

  1. class Point:
  2.     def __init__(self, cor = None):
  3.         if cor is None:
  4.             cor = [0, 0]
  5.         self.cor = cor
复制代码


这样改的好处是什么?
最佳答案
2021-1-29 16:31:15

因为你第一个代码 默认参数的值设置为一个列表,因为列表是可变的,会导致你列表中元素可能发生改变

举个例子,下面这个代码执行同个函数就会导致原本是默认的参数变成变化的参数:

  1. def test(list1=[], number=100):
  2.     list1.append(number)
  3.     print(list1)
  4.    
  5. test()
  6. test()
  7. test()
复制代码


输出结果,每次调用同个函数,默认参数的结果都不同:
  1. [100]
  2. [100, 100]
  3. [100, 100, 100]
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-4 00:19:41 | 显示全部楼层
Cool_Breeze 发表于 2021-1-30 11:27
什么编辑器,pycharm?

是的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-4 00:21:43 | 显示全部楼层
Stubborn 发表于 2021-1-29 21:50
对默认参数的赋值,只在函数定义的时候绑定一次,例如上面 function_one 的默认参数,在定义的时候 val ...

序列 [0, 0]是一个可变的对象吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-1 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表