函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用

一 函数的名称空间

  1. 内置空间:存放python解释器内置函数的空间
  2. 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失.
  3. 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失)

加载顺序:内置空间 > 全局空间 > 局部空间

取值顺序:局部空间 > 全局空间 > 内置空间

  1. 作用域

    全局作用域:内置空间 + 全局空间

    局部作用域:局部空间

二 函数的嵌套

只要遇到变量名()就是函数的调用,没有()就不是函数的调用

函数调用执行后,函数体中开辟的空间就自动销毁了

2.1 嵌套

def func():
    a = 1
    def foo():
        b = 2
        print(b)  # 2
        print(a)  # 1
        def f1():
            print(b) # 2
        return f1()
    return foo()
print(func())

结果:

2
1
2
None

局部空间里的变量就近使用上一级空间和全局空间里的变量,两个并列局部空间里的变量不能相互使用

2.2 函数互相引用

def a():
    a = 1
    c()
    print(c)

def c():
    c = 3
    print(a)
def run():
    a()
run()

结果:

<function a at 0x0000000002101E18>
<function c at 0x00000000025B98C8>

输出的是定义函数a\c的内存地址,并列的内置空间里的变量不能相互使用

2.3 global 和 nonlocal

1. global 只修改全局变量对应的值

a = 10
def func():
    global a  # 声明修改全局变量的值
    a += 1
    print(a)
func()
print(a)

结果:

11
11

在函数内部修改全局的变量,如果全局中不存在就创建一个变量

lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
def func():
    lst.append("马云")   # 对于可变数据类型可以直接进行访问
    print(lst)
func()
print(lst)

结果:

[‘麻花藤‘, ‘刘嘉玲‘, ‘詹姆斯‘, ‘马云‘]
[‘麻花藤‘, ‘刘嘉玲‘, ‘詹姆斯‘, ‘马云‘]

2. nonlocal 就近修改局部空间的变量值,不会修改全局空间的变量值

a = 10
def func():
    def f1():
        a = 20
        def foo():
            nonlocal a
            a += 1
            print(a)   # 21
        foo()
        print(a) # 21
    f1()
func()
print(a)   # 10

输出:

21
21
10

三 函数名的运用

  1. 函数名的内存地址

    print(func)

  2. 函数名可以赋值给其他变量
  3. 函数名可以当做函数的参数去传递

    注意点:传递函数名的时候如果+()就是在传递这个函数的返回值

  4. 函数名可以当做函数的返回值被返回
  5. 函数名可以当做元素存放在一个容器里

原文地址:https://www.cnblogs.com/lav3nder/p/11801516.html

时间: 2024-08-30 02:15:07

函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用的相关文章

函数参数补充、名称空间与作用域、global与nonlocal

函数参数补充 # 1. 命名关键字参数(了解)# 命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数# 特点:# 1.命名关键字实参必须按照key=value的形式为其传值# def func(x,y,*,a,b): # 其中,a和b称之为命名关键字参数# print(x,y)# print(a,b)## # func(1,2,b=222,a=111) # 示例# def func(x,y,*,a=11111,b):# print(x,y)# print(a,b)##

python 函数的名称空间及作用域

一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周期为:在python解释器启动时创建,在解释器关闭时销毁 全局名称空间:除了内置的,函数内的都是在全局名称空间中 生命周期为:在执行文件时,创建全局名称空间,所有文件中的代码全部执行完毕后,销毁名称空间(即解释器关闭时) 局部名称空间:只要在函数内的名称空间就是局部的 生命周期为:调用函数时创建,函

11.11函数对象,名称空间,作用域,命名关键字参数

函数对象 函数是一个对象 函数名可以被引用 函数名可以当做一个参数进行传参 函数名也可以当成返回值,但是不能加括号,不然会直接调用函数 函数名可以当做容器类的元素 函数的嵌套 就是函数内部定义或调用函数 例 def x(): print('x') def y(): print('y') y() x() 名称空间 内置名称空间 python解释器自带的名称空间,开机就有了 全局名称空间 打开python解释器后就形成的名称空间, 局部名称空间 函数内部的名称空间 查找顺序 先从局部查找,在查找全局

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

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内

函数的名称空间与作用域

1.名称空间namespaces 存放名字与值绑定关系的地方 2.名称空间分为三大类 内置名称空间: 作用:存放python解释器自带的名字 生命周期: 在解释器启动时生效,在解释器关闭时失效 全局名称空间: 作用:除了内置的与局部的名字外,其余都是全局名字 生命周期: 在文件执行时生效,在文件执行完毕时失效 例如:x,func,y,l,z都是 x=1 def func(): a=1 y=2 l=[1,2] if 3 > 2: if if if z=3 局部名称空间: 作用:用于存放函数调用期间

Python—函数的名称空间

名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方 名称空间共3种,分别如下 locals: 是函数内的名称空间,包括局部变量和形参 globals: 全局变量,函数定义所在模块的名字空间 builtins: 内置模块的名字空间 不同变量的作用域不同就是由这个变量所在的命名空间决定的. 作用域即范围 全局范围:全局存活,全局有效 局部范围:临时存活,局部有效 查看作

Python全栈之路----函数进阶----名称空间

又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的=地方 名称空间共3种,分别如下 locals:是函数内的名称空间,包括局部变量和形参 globals:全局变量,函数定义所在模块的名称空间 builtins:内置模块的名称空间(Python解释器自带的内置模块) >>> x = 1 >>> locals() #处在该区域,打印该区域所有变量 {'__na

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

一:函数嵌套,在调用一个函数的过程中,又调用了其他函数 def bar(): print('from bar')def foo(): print('from foo') bar()foo()通过函数的嵌套使用,分解成最小的操作,一次调用 二:函数的嵌套定义:在一个函数的内部,又定义了一个函数 def f1(): x = 1 def f2(): print('from f2') f2()f1() 三:名称空间,存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的地方内置名称空间:pytho

Python__名称空间与作用域

一:函数嵌套,在调用一个函数的过程中,又调用了其他函数 def bar(): print('from bar')def foo(): print('from foo') bar()foo()通过函数的嵌套使用,分解成最小的操作,一次调用 二:函数的嵌套定义:在一个函数的内部,又定义了一个函数 def f1(): x = 1 def f2(): print('from f2') f2()f1() 三:名称空间,存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的地方内置名称空间:pytho