python怎样定义初始值,Python初始值
本文主要介绍Python的类成员变量默认初始值的坑及其解决方法,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
00-1010 Pit类成员变量的缺省初始值问题发现示例代码结果原因解决方案Python缺省值参数简单而粗糙代码可以按以下方式编写
目录
类成员变量默认初始值的坑
在一个循环中,默认值用相同的名称初始化变量,其中列表成员不为空,并将延续前一个同名变量的值。
问题发现
#定义类别
类变量():
#使用
def __init__(self,price=500,description=默认描述,values=[, , ]):
self.price=价格
自我描述=描述
自我价值=价值观
def __str__(self):
返回“价格: {},描述: {},值: {}”。格式(自我价格、自我描述、自我价值)
variant_list=[]
#迭代创建同名实例
对于范围(3):中的I
current_variant=Variant()
如果i==1:
current _ variant . values[2]= hello
current _ variant.price=i
current _ variant . description= variant : { }的说明。格式(一)
variant_list.append(当前变量)
#测试结果
对于variant_list:中的变型
打印(字符串(变量))
示例代码
所有实例的值列表值都相同。
结果
在Python中,可选参数默认值的设置只执行一次,即在定义函数时。“这样,默认值用于初始化,列表成员指向同一个列表(地址)。如果只修改了其中一个元素(而不是分配一个新的列表来打开新的内存),那么所有实例的列表成员都将被修改。
原因
在直接构造函数中将其设置为null(self . values=[, , ]),然后修改值。
解决方法
Python默认值参数
def fun(a,b=[]):
乙=[甲]
打印(b)
乐趣(1)
fun(2,[])
乐趣(3)
是不是看似简单,实则玄机?请看一下输出结果。是不是让你很纳闷~
[1]
[2]
[1, 3]
此时的你是否有和我一样的疑惑?为什么fun(3)的输出结果是[1,3]?
哈哈,没有悬念,这是因为,函数定义后,只会生成一次,所以函数生成时定义的变量B的默认值只会初始化一次。
所以在执行fun(1)函数时,没有参数传递给B,所以使用B的默认值,B的默认值是[1]。
在执行fun(2,[])时,将[]的一个值传递给B(与默认值相同,但实际上是不同的数据),所以使用传入的数据,执行结果为[2]。
然后执行fun(3)后,此刻没有参数传递给B,所以仍然使用B的默认值,B的默认值只会随着函数生成而生成一次(fun(1)已经生成了),所以当前的默认值是fun(1) [1]的执行结果,所以再次调用fun(3)时,输出结果会是[1,3]。
如果这不可能,那么每次调用函数时都要初始化变量。
简单粗暴上代码
定义函数(a,b=无):
B=b if b else [] #每次都明确定义b。
乙=[甲]
打印(b)
功能(1)
函数(2,[])
功能(3)
输出结果:
[1]
[2]
[3]
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。