我去运行了一下,第一个的报错是:
UnboundLocalError: local variable 'b' referenced before assignment
意思是在赋值之前引用了局部变量“b”。我就记起来这个是要用global的,b本来是全局变量,在函数add()内部,当你尝试修改b的值时,Python会将其视为新的局部变量,并且你不能直接修改全局变量的值。
总的就是,全局变量和实例对象的作用范围这种,可以说是规则吧是不同的,对于全局变量,你要用global来修改其值,而对于实例对象的属性,你可以直接通过实例对象来访问和修改。这种东西有时候没有个为什么,因为像是个规则一样的,自己记住就好,就是这种区别,但是我讲一下自己的理解吧(不一定对):
变量的作用域是由其定义的位置决定的。全局变量是在函数外部定义的,可以在整个程序中访问。而局部变量是在函数内部定义的,只能在函数内部访问。在函数内部修改一个全局变量时,Python会将其当作一个新的局部变量处理,而不可以直接修改全局变量的值。我觉得这种设计像在大型程序中,都说全局变量的使用应该尽量避免嘛。通过将变量限定在函数内部或类的实例中,可以减少变量之间的相互影响,提高代码的模块化和可重用性。然后说类,类和对象嘛,对象就是可以有自己的属性,有自己的一种特定的属性方法一样的,设计这样的一种访问调用规则可以用起来更加方便灵活
个人的解答和看法,如有错误还请包涵