首页 > 编程语言 > 详细

Python正课34 —— Global与Nonlocal

时间:2020-03-19 18:24:40      阅读:37      评论:0      收藏:0      [点我收藏+]

本文内容皆为作者原创,如需转载,请注明出处: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

Python正课34 —— Global与Nonlocal

原文:https://www.cnblogs.com/xuexianqi/p/12526258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!