zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    mobileSelect学习
    使用qrcode生成二维码
    点点点右边有内容
    搜索框search
    input样式和修改
    art-template模板引擎高级使用
    Nodejs中的路径问题
    异步编程(回调函数,promise)
    在nodejs中操作数据库(MongoDB和MySQL为例)
    MongoDB数据库
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12526258.html
Copyright © 2011-2022 走看看