python函数对象/函数嵌套/名称空间/作用域

本文介绍了函数对象的概念及其作为第一类对象的应用场景,包括作为参数传递、返回值及容器元素等。同时,深入探讨了名称空间的分类、生命周期以及名称查找顺序等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数对象

​ 函数名存放的是函数的地址,所以函数名也是对象,称为函数对象

​ 函数是第一类对象,指的是函数名指向的值(函数的内存地址)可以被当作数据去使用

  1. 可以被引用
  2. 可以当作参数传给另一个函数
  3. 可以当作一个函数的返回值
  4. 可以当作容器类型的元素
函数嵌套
  1. 函数的嵌套调用:在调用一个函数的过程中,内部代码又调用了其他的函数
  2. 函数的嵌套定义:在一个函数的内部有定义了一个函数。在那一层定义的函数只能在那一层用
名称空间

​ 名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)

​ 但凡查找值一定要通过名字,访问名字必须要去查找名称空间

名称空间三大分类
  1. 内置名称空间:存放的是python解释器自带的名字 built-in. len() max()
  2. 全局名称空间:存放的是文件级别的名字
  3. 局部名称空间:在函数内定义的名字
名称空间生命周期:
  1. 内置名称空间:在解释器启动时则生效,解释器关闭则失效
  2. 全局名称空间:在解释器执行python文件时则生效,文件执行完毕后则失效
  3. 局部名称空间:在调用函数时临时产生该函数的局部名称,调用完毕则回收
加载顺序:

​ 内置 - > 全局 -> 局部

查找顺序

​ 基于当前的位置往上查找

​ 假设当前站在局部,查找顺序:局部 - > 全局 - > 内置

​ 假设当前站在全局,查找顺序:全局 - > 内置

​ ⭐️ 名字的查找顺序,在定义函数时就已经固定死了(即在检测语法时就已经确定了名字的顺序),与函数的调用位置无关,也就是说无论在任何地方调用函数,都必须回到当初定义函数的位置去确定名字的查找关系

作用域

​ 域就是值范围,作用域指的就是作用的范围,分为两种

​ 全局作用域:包含的是内置名称空间与全局名称空间的名字

​ 特点:全局有效,全局存活

​ 局部作用域:包含的是局部名称空间中的名字

​ 特点:局部有效,临时存活

global 在局部声明一个名字是来自于全局作用域的,可以用来在局部修改全局的不可变类型
nonlocal 声明一个名字是来自于当前层外一层的作用域,可以用来在局部修改外层函数的不可变类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值