Python正课34 —— Global与Nonlocal

本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12526258.html

x = 10  # x => 10 的内存地址

def func(a):    # a = 10的内存地址
    a=11    # a = 11的内存地址

func(x)     # func(10的内存地址)

print(x)

输出:
10

一:示范1

x = 111

def func():
    x = 2222

func()
print(x)

输出:
111

详解:

x = 111

def func():
    x = 2222
    print(x,id(x))

func()
print(x,id(x))

输出:
2222 23019056
111 1357311632

二:示范2

如果在局部想要修改全局的名字对应的值(不可变类型),需要用global

x = 111

def func():
    global x  # 声明x这个名字是全局的名字,不要再造新的名字了
    x = 2222

func()
print(x)

输出:
222
x=0
def f1():
    x=11
    print('f1原来的x:',x)
    def f2():
        global x
        x=22
    f2()
    print('f2中的x:',x)

f1()
print('运行f1的x:',x)

输出:
f1原来的x: 11
f2中的x: 11
运行f1的x: 22

三:示范3

l=[111,222]
def func():
    print(l)    # l是list列表,属于不可变类型
    l.append(333)   # 没有创造新的值

func()
print(l)

输出:
[111, 222]
[111, 222, 333]

四:示范4

Nonlocal(了解):修改函数外层函数包含的名字对应的值(不可变类型)

x = 0

def f1():
    x = 11
    print('f1原来的x:', x)

    def f2():
        nonlocal x  # 从当前层的外层开始找
        x = 22  # 这里f2的x没有被调用

    f2()
    print('运行f2后的x:', x)

f1()
print('输出x的值:',x)

输出:
f1原来的x: 11
运行f2后的x: 22
输出x的值: 0
posted @ 2020-03-19 18:16  轻描丨淡写  阅读(275)  评论(0编辑  收藏  举报