函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用
2024-09-01 22:38:31
一 函数的名称空间
- 内置空间:存放python解释器内置函数的空间
- 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失.
- 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失)
加载顺序:内置空间 > 全局空间 > 局部空间
取值顺序:局部空间 > 全局空间 > 内置空间
作用域
全局作用域:内置空间 + 全局空间
局部作用域:局部空间
二 函数的嵌套
只要遇到变量名()就是函数的调用,没有()就不是函数的调用
函数调用执行后,函数体中开辟的空间就自动销毁了
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
三 函数名的运用
函数名的内存地址
print(func)
函数名可以赋值给其他变量
函数名可以当做函数的参数去传递
注意点:传递函数名的时候如果+()就是在传递这个函数的返回值
函数名可以当做函数的返回值被返回
函数名可以当做元素存放在一个容器里
最新文章
- 2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得
- iPhone被盗后怎么?这篇文章只办针对iOS7后的系统
- 适合wordpress中文网站的seo优化插件 DX-Seo
- LeetCode Find Minimum in Rotated Sorted Array
- gulp之静态资源防缓存处理
- js身份证验证代码
- Back to Underworld(搜索)
- 第52周四ApplicationContext
- ASP.NET jQuery 随笔 显示RadioButtonList成员选中的内容和值
- Xcode5和6共处,如何发布应用程序存储
- vim跳转
- [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
- Could not execute auto check for display colors using command /usr/bin/xdpyinfo.(
- Mybatis学习笔记一
- Windows上安装配置SSH教程(3)——在Windows系统上安装与配置WinSCP
- Android WebView的HTML中的select标签不起作用
- Jmeter安装web socket协议插件
- Qt ------ QDir 路径
- ES6_入门(4)_数组的解构赋值
- java新特性
热门文章
- 解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误
- opencv-python 图像基础处理(三)
- java 读取 excel 表格内容
- 模块二之序列化模块以及collections模块
- SQL server利用脚本添加链接服务器,可设置别名
- 以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】
- LRU hashMap(拉链) + 双向链表 java实现
- 9. java API使用 - Scanner类
- 201871010113-刘兴瑞《面向对象程序设计(java)》第一周学习总结
- Ubuntu更新python3.5到python3.7