一 函数的名称空间

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

最新文章

  1. 2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得
  2. iPhone被盗后怎么?这篇文章只办针对iOS7后的系统
  3. 适合wordpress中文网站的seo优化插件 DX-Seo
  4. LeetCode Find Minimum in Rotated Sorted Array
  5. gulp之静态资源防缓存处理
  6. js身份证验证代码
  7. Back to Underworld(搜索)
  8. 第52周四ApplicationContext
  9. ASP.NET jQuery 随笔 显示RadioButtonList成员选中的内容和值
  10. Xcode5和6共处,如何发布应用程序存储
  11. vim跳转
  12. [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
  13. Could not execute auto check for display colors using command /usr/bin/xdpyinfo.(
  14. Mybatis学习笔记一
  15. Windows上安装配置SSH教程(3)——在Windows系统上安装与配置WinSCP
  16. Android WebView的HTML中的select标签不起作用
  17. Jmeter安装web socket协议插件
  18. Qt ------ QDir 路径
  19. ES6_入门(4)_数组的解构赋值
  20. java新特性

热门文章

  1. 解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误
  2. opencv-python 图像基础处理(三)
  3. java 读取 excel 表格内容
  4. 模块二之序列化模块以及collections模块
  5. SQL server利用脚本添加链接服务器,可设置别名
  6. 以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】
  7. LRU hashMap(拉链) + 双向链表 java实现
  8. 9. java API使用 - Scanner类
  9. 201871010113-刘兴瑞《面向对象程序设计(java)》第一周学习总结
  10. Ubuntu更新python3.5到python3.7