首页 > 编程语言 > 详细

用python时遇到的bug

时间:2020-03-01 21:53:51      阅读:58      评论:0      收藏:0      [点我收藏+]

这是个非常简单又重要又极其容易忽视的bug!!!

python定义一个类时,一定要在__init__里面把所有的参数给初始化!!!

我今天写代码时没这么做。结果发现,一个类A,他里面有集合参数s = {1,2,3}。然后定义一个对象A a1,向a1里的s增加个元素,s变为{1,2,3,4},这时在定义一个对象A a2,发现此时a2里的s为{1,2,3,4,}!!!!

代码如下:

class A:
    s = {1,2,3}
a1= A()
print(a1.s)
a1.s.add(4)
a2= A()
print(a2.s)

这也太诡异了!最关键的是只有集合参数是这样的,整型参数、字符串参数等等并不这样。

也许你会认为,对象之间共享集合参数,可是,当你定义完a1、a2之后,改变a1的集合,a2的集合并不随之改变!也就是说,这种诡异的情况只发生在“改变a1的值是发生在定义a2之前”这个情况下。太诡异了!

解决方法:在__init__里面把所有的参数给初始化!!!在__init__里面把所有的参数给初始化!!!在__init__里面把所有的参数给初始化!!!

原因好理解就不说了。

害我找这个bug找了将近两个小时,枯了。

 

新bug:

在python中的函数里,如果确定要引用并修改全局变量必须加上global关键字(主函数除外)

例子:

a = 6
def abc():
    global a
    print (a)
    a=a+1
abc()

 

用python时遇到的bug

原文:https://www.cnblogs.com/ljfl-study/p/12391759.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!