D15-02 全局变量与局部变量part1、2、3

name = 'lpt'
def test():
    name = 'liu'
    print('test',name)
test()
print(name)
输出结果
test liu
lpt

 如果想修改全局变量name 在函数任意位置声明如下:

name = 'lpt'
def test():
    global name
    name = 'liu'
    print('test',name)
test()
print(name)
输出结果
test liu
liu

如果函数内部无global关键字,优先读取局部变量,再读取全局变量,无法对全局重新赋值。

对于可变类型,(元组,数字,字符串不可修改)可以对内部元素进行操作 例如name.append('ddd')

如果函数中有global关键字,本质上就是全局的变量,可读取,可赋值。

注意:要在name之前声明全局变量 否则容易报错 

name = '产品经理'
def yang():
    global name
    print('====>',name)
    name = 'ddddd'
    print('------->',name)

yang()
输出结果为
====> 产品经理
-------> ddddd
name = 'gangniang'
def weihou():
    name = 'chenzhuo'
    def weiweihou():
        global name
        name = 'lengjing'
    weiweihou()
    print(name)
print(name)
weihou()
print(name)
输出结果

gangniang
chenzhuo
lengjing

 notlocal 指定上一级变量

name = 'gangniang'
def weihou():
    name = 'chenzhuo'
    def weiweihou():
        nonlocal name
        name = 'lengjing'
    weiweihou()
    print(name)
print(name)
weihou()
print(name)
输出结果
gangniang
lengjing
gangniang

  

风湿理论

name = '海风'
def huangwei():
    name = '黄伟'
    print(name)
    def liuyang():
        name = '刘洋'
        print(name)
        def nulige():
            name = '陆志华'
            print(name)
        print(name)
        nulige()
    liuyang()
    print(name)
print(name)
huangwei()
print(name)
输出结果:
    海风
    黄伟
    刘洋
    刘洋
    陆志华
    黄伟
    

 

函数中的内容先不执行,首先找到调用函数,输出结果。

首先打印当前作用域,如果当前作用域没有再向上一层找。

 

posted @ 2018-07-19 16:17  犀利的攻城狮  阅读(145)  评论(0)    收藏  举报