python 赋值方法大全

2022-09-29 09:19:30

NB(注意):# 后面的部分表示输出结果。
第一种:类似于其他语言的中规中矩的赋值方式,代码如下:

classDebug:def__init__(self):
        self.x1=5
        self.x2=6defprintNum(self):print(f"the value of x1 is: {self.x1}")# the value of x1 is: 5print(f"the value of x2 is: {self.x2}")# the value of x2 is: 6if __name__=="__main__":
    main= Debug()
    main.printNum()

最常见的一种赋值方式,每个变量占据一行进行赋值。
第二种:赋值语句在一行分开完成,代码如下:

classDebug:def__init__(self):
        self.x1=5; self.x2=6defprintNum(self):print(f"the value of x1 is: {self.x1}")# the value of x1 is: 5print(f"the value of x2 is: {self.x2}")# the value of x2 is: 6if __name__=="__main__":
    main= Debug()
    main.printNum()

可以看到此时我们将两个赋值语句放置在同一行,并用分号隔开,此时也可以成功完成赋值,分号类似于C#语言中结尾的分号的作用,告诉程序当前行执行完毕。
第三种是:赋值语句在一行合并完成,专业术语叫做序列解包 ,代码如下:

classDebug:def__init__(self):
        self.x1, self.x2=5,6defprintNum(self):print(f"the value of x1 is: {self.x1}")# the value of x1 is: 5print(f"the value of x2 is: {self.x2}")# the value of x2 is: 6if __name__=="__main__":
    main= Debug()
    main.printNum()

我们将多个变量名用逗号隔开放在左侧,使用一个赋值号,并将对应想要给与的值放在右侧的相应位置,也用逗号隔开即可,从结果可以看到我们也成功完成了赋值。当要给多个变量赋值的时候推荐使用这种形式
第四种:当两个变量值相等的时候可以连等赋值,专业术语叫做链式赋值。代码如下:

classDebug:def__init__(self):
        self.x1= self.x2=5defprintNum(self):print(f"the value of x1 is: {self.x1}")# the value of x1 is: 5print(f"the value of x2 is: {self.x2}")# the value of x2 is: 5print(id(self.x1))# 140703956215952print(id(self.x2))# 140703956215952
        self.x1=7print(f"the value of x1 is: {self.x1}")# the value of x1 is: 7print(f"the value of x2 is: {self.x2}")# the value of x2 is: 5print(id(self.x1))# 140703956216016print(id(self.x2))# 140703956215952if __name__=="__main__":
    main= Debug()
    main.printNum()

然而上述的赋值方法存在隐患,先说明一下id()函数的作用:
id(): 函数返回对象的标识。 这是给定对象唯一的整数,并且在其生存期内保持不变。
我们可以看到当我们完成链式赋值时,此时变量self.x1self.x2的标识是一样的,可以理解为都是张三这个人,一个是他的小名,一个是他的大名,但是都是一个人,因此当我们改变变量self.x1的值时,理论上self.x2的值也是会改变的,因为我们将张三换成了李四,然而这里我们打印发现,仅仅self.x1的值发生了变化,它的标识也从140703956215952变为了140703956216016,而self.x2的值并未发生变换,并且它的标识还是原来的值,这是因为编译器自身对这个赋值进行了调整。
根据我的使用经验,当使用Anaconda编译器时,这个变量重新赋值的过程会被修正,改变一个变量的值是不会改变另一个变量的值的,但是Pycharm编译器中,改变一个变量的值是会改变另一个变量的值的。所以在使用链式赋值并且后面要对变量进行重新赋值时,要根据不同编译器的不同情况采取不同的措施,我估计python自带shell中的情况应该类似于Pycharm(没有尝试过)。
第五种:增强赋值,个人觉得这个只是个噱头,一个概念而已,我们会经常用到,只不过会很少注意到。代码如下:

classDebug:def__init__(self):
        self.x1=5 
        self.x1+=2defprintNum(self):print(f"the value of x1 is: {self.x1}")# the value of x1 is: 7if __name__=="__main__":
    main= Debug()
    main.printNum()

上述代码中的self.x1 += 2的专业术语就是增强赋值,其本身为self.x1 = self,x1 + 2
如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

  • 作者:勤奋的大熊猫
  • 原文链接:https://blog.csdn.net/u011699626/article/details/108455649
    更新时间:2022-09-29 09:19:30