python 赋值方法大全

更新时间:2020-09-23 15:50:30点击次数:274次
NB(注意): # 后面的部分表示输出结果。
第一种:类似于其他语言的中规中矩的赋值方式,代码如下:

class Debug:
    def __init__(self):
        self.x1 = 5
        self.x2 = 6
    
    
    def printNum(self):
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 5
        print(f"the value of x2 is: {self.x2}") # the value of x2 is: 6


if __name__ == "__main__":
    main = Debug()
    main.printNum()

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

class Debug:
    def __init__(self):
        self.x1 = 5; self.x2 = 6
    
    
    def printNum(self):
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 5
        print(f"the value of x2 is: {self.x2}") # the value of x2 is: 6


if __name__ == "__main__":
    main = Debug()
    main.printNum()

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

class Debug:
    def __init__(self):
        self.x1, self.x2 = 5, 6
    
    
    def printNum(self):
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 5
        print(f"the value of x2 is: {self.x2}") # the value of x2 is: 6


if __name__ == "__main__":
    main = Debug()
    main.printNum()

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

class Debug:
    def __init__(self):
        self.x1 = self.x2 = 5
    
    
    def printNum(self):
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 5
        print(f"the value of x2 is: {self.x2}") # the value of x2 is: 5
        print(id(self.x1))                      # 140703956215952
        print(id(self.x2))                      # 140703956215952
        self.x1 = 7
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 7
        print(f"the value of x2 is: {self.x2}") # the value of x2 is: 5
        print(id(self.x1))                      # 140703956216016
        print(id(self.x2))                      # 140703956215952


if __name__ == "__main__":
    main = Debug()
    main.printNum()

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

class Debug:
    def __init__(self):
        self.x1 = 5 
        self.x1 += 2
    
    
    def printNum(self):
        print(f"the value of x1 is: {self.x1}") # the value of x1 is: 7


if __name__ == "__main__":
    main = Debug()
    main.printNum()

上述代码中的 self.x1 += 2的专业术语就是增强赋值,其本身为 self.x1 = self,x1 + 2。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息