python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal

Posted jiandanxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal相关的知识,希望对你有一定的参考价值。

名称空间:

  内置名称空间: 在打开pytharm是加载

  全局名称空间: 在运行py文件是加载

  局部名称空间(临时名称空间) :在py文件中调用时加载

def func(): ----->函数定义

  pass ------->函数体

func()------------->函数调用

  

函数定义时:内存中只储存与函数名的对应关系,函数体的内容不储存

函数调用时:才执行函数体的内容,创建临时空间,随着函数执行结束,内存中的临时名称空间里面的内容也清空 

 

作用域:

  全局作用域:内置名称空间里的内容+全局名称空间里的内容

  局部作用域:局部名称空间

取值顺序:

  局部--->全局--->内置 ,单向取值,不可逆.

技术分享图片
a=10
b=20
def test5(a,b):
    print(a,b) ---> 20,10
    a=3
    b=5
    print(a,b) ---> 3,5
c = test5(b,a)
print(c) ---------> None
技术分享图片

 

加载顺序:

  内置名称空间

  全局名称空间

  局部名称空间

函数的嵌套:

  看到调用就执行

global 和 nonlocal(当数据类型是不可变的时候需要申明,但是当数据类型是列表的时候,可以直接用append往列表添加数据,同时直接引起全局变量的改变)

  global:申明函数内的元素可以作为全局变量 (函数可以直接引用全局变量,没有global不能改变全局变量)

  nonlocal:申明子级函数可以改变父级函数的变量 ,但nonlocal不能改变全局变量(子级函数可以直接引用父级函数的变量,没有nonlocal不能改变父级函数的变量)

count = 1
def func1():
    count += 1 # 会报错 # count = 2 不会报错
    print(count)
func1() 
技术分享图片
def func1():
    count = 666
    def inner():
        print(count)
        def func2():
            nonlocal count
            # global count
            count += 1
            print(‘func2‘,count)
        func2()
        print(‘inner‘,count)
    inner()
    print(‘func1‘,count)
func1()
print(count)

以上是关于python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal的主要内容,如果未能解决你的问题,请参考以下文章

python第四天学习总结

Python:函数名称空间与作用域:

python学习笔记第五节(函数,名称空间,作用域)

Python的学习之旅———函数对象函数嵌套名称空间与作用域装饰器

Python开发第XXX篇----函数 -名称空间与作用域

python之旅:函数对象函数嵌套名称空间与作用域装饰器