一篇文章带你踩踩python变量作用域那些坑,局部与全局的战争在所难免,

# coding=utf-8

"""pt1:内部修改全局变量"""
class GlobalParas():
    name = "pig"  # 全局外部
    def call_name(self):

        global name
        name = "fish"   # 全局变量内部
        print name
print GlobalParas().name  #pig
GlobalParas().call_name()  #fish 在函数内部修改全局这一步执行意味着外部全局name变为内部global声称的,后边都得用我内部声称的全局变量
print name  #fish 使用外部修改后的全局变量,

"""pt2: 外部修改全局变量"""

class GlobalVar():
    names = "mm"
    def __init__(self):
         pass
    def call_name(self):
        global names
        names = "gg"
        return names
print GlobalVar().call_name() #gg
print names # gg
names = "jj"
print "pt2 的全局变量是: {}".format(names)  # jj
print GlobalVar().call_name() # gg
print names  # gg

"""pt3: 全局遇上局部"""
face = "handsome"
def see_face():
    face = "ugly"
    print face
see_face()  # ugly  在内部还是听丑的
print face # handsome 外部还是听帅的

"""pt4: 来点骚操作SyntaxWarning: name 'feature' is assigned to before global declaration
  global  feature"""
feature = "have money"
def wealthy():

    feature = "poor"  # 错在这儿
    global  feature
    feature = "very poor"
    print feature
wealthy()
print feature

""" pt5:外部访问内部变量显示未定义NameError: global name 'hobby' is not defined"""
#hobby = "sleep"
def test_hobby():
    global hobby
    hobby = "eat"
    hobby = "run"
    print hobby
print hobby
test_hobby()

"""pt6:赋值之前引用的局部变量“i”UnboundLocalError: local variable 'i' referenced before assignment"""
i =0
def foo():
    print i  #局部变量在使用前没有赋值,因为变量都是从内向外找的,内部没有跑外部找找到为止,否则exception
    i = 9
foo()












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值