python中可变与不可变类型的全局变量

python中的不可变类型的全局变量如int  a=1,str  b='hello', 若需要修改必须加global申明, 而全局变量是可变类型的,如list, dict ,则直接修改list.append(),dict[x]=xx, 无需申明.

若全局变量与局部变量同名, 采用就近原则.

 

 1 c=[1,2,3,4,5]
 2 d=2
 3 e='HELLO'
 4 f={'name':'xx','age':18}
 5 class A:
 6     b=[1,2,3]
 7     d=222
 8     def hehe(self):
 9         self.b.append(4)
10         self.d=333
11         c.append(6)
12         global e
13         d=3
14         e=e.lower()  # 必须global e 才不报错
15         f['age']=20
16         print(self.b,c,d,e,f,self.d)
17     def haha(self):
18         print(self.b,c,d,e,f,self.d)
19 if __name__ == '__main__':
20     a = A().hehe()
21     A().haha()

output:

[1, 2, 3, 4] [1, 2, 3, 4, 5, 6] 3 hello {'name': 'xx', 'age': 20} 333
[1, 2, 3, 4] [1, 2, 3, 4, 5, 6] 2 hello {'name': 'xx', 'age': 20} 222

 

原因在于int类型str类型,tuplel类型,只有一种修改方法,即x = y, 恰好这种修改方法同时也是创建变量的方法,所以产生了歧义.

转载于:https://www.cnblogs.com/wangyi0419/p/11300855.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值