一 函数的名称空间

  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. 函数名可以当做元素存放在一个容器里

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

  1. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  2. day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义

    复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...

  3. CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】

    函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...

  4. Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.

    一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...

  5. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

  6. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  7. python基础之函数参数,名称空间,以及函数嵌套

    函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...

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

    一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...

  9. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

随机推荐

  1. JS Switch

    JS Switch switch 语句用于基于不同的条件来执行不同的动作. switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; defa ...

  2. 43-安装 Docker Machine

    前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和销毁,相关容器会通过网络 ...

  3. python3.7安装, 解决pip is configured with locations that require TLS/SSL问题

    python3.7安装, 解决pip is configured with locations that require TLS/SSL问题1.安装相关依赖 yum install gcc libff ...

  4. GO 使用 动态链接库(共享链接库)进行编译 生成动态链接可执行文件

    我们使用 go help buildmode 可以看到 go 可以以多种方式进行构建,默认使用静态链接库. ➜ src go help buildmode The 'go build' and 'go ...

  5. TED演讲积累。

    Passion is not a job,a sport ,or a hobby,it is the full of force of your attention.and energy that y ...

  6. 201871010107-公海瑜《面向对象程序设计(java)》第一周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/   ...

  7. acwing 17. 从尾到头打印链表

    题目地址 https://www.acwing.com/problem/content/description/18/ 来源:剑指Offer 输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值. ...

  8. 【洛谷5298】[PKUWC2018] Minimax(树形DP+线段树合并)

    点此看题面 大致题意: 有一棵树,给出每个叶节点的点权(互不相同),非叶节点\(x\)至多有两个子节点,且其点权有\(p_x\)的概率是子节点点权较大值,有\(1-p_x\)的概率是子节点点权较小值. ...

  9. vscode源码分析【六】服务实例化和单例的实现

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  10. PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串

    需求 如果需要将可能含有中文的字符串进行拆分成数组,我们下面以 utf-8 编码为例. 解决方案一 我习惯的方法可能是: mb_internal_encoding("UTF-8") ...