目录

  • 嵌套函数

    • 定义
  • 名称空间的三大类(只存变量名)
    • 名称空间加载顺序
    • 变量名的查找顺序为
  • 作用域

嵌套函数

定义

函数内部定义的函数,无法在函数外部使用内部定义的函数。

def f1():def f2():print('from f2')f2()f2()  # NameError: name 'f2' is not defineddef f1():def f2():print('from f2')f2()f1()'''
from f2
'''

名称空间的三大类(只存变量名)

  1. 内置名称空间

    • 定义:python解释器自带的方法,如:int,float,len等。==类似小整数池==
    • 生命周期:在python解释器启动时,就开始生效。直到python解释器关闭
  2. 全局名称空间

    • 定义:除了内置和局部的名字之外,其余都存在全局名称空间。如下面的代码x,func,z

      x = 1def func():passif x > 11:z = 20000
      else:z = 555
      print(z)
      
    • 生命周期:在文件执行时生效,文件执行完后失效

  3. 局部名称空间

    • 定义:在函数内部的都叫局部,也就是说在函数内部定义的变量 就是局部变量。如下图的x ,f2等等

      def test_one():x = 1def max_num():print("from max_num")max_num()test_one()
    • 生命周期:在调用函数时生效,当函数执行结束后失效

名称空间加载顺序

内置名称空间 --> 全局名称空间 --> 局部名称空间

变量名的查找顺序为

局部名称空间 --> 全局名称空间 --> 内置名称空间

作用域

  1. 全局作用域

    • 定义:全局有效,全局存活,包含内置名称空间和全局名称空间.如x,test_one

      x = 1def test_one():print(x)test_one()
  2. 局部作用域

    • 定义:局部有效,临时存储,只包含局部名称空间。如x

      def test_one()x = 1print(x)test_one()
  • PS:当局部名称空间没有对应的变量时,系统会自动去全局名称空间查找。没有找到就会报错。

    # 第一种情况
    x = 1
    def one():print(x)def two():x = 10one()
    two()'''
    1
    '''# 第二种情况
    x = 1
    def one():x = 10print(x)def two():x = 5one()two()'''
    10
    ''''''总结:对于第一种情况,程序调用了two函数,在two函数中调用了one函数,而one函数中没有定义x变量,对于one函数而言,它属于局部名称空间,变量x既然没有定义,那么就直接去上一级找,因此x=1对于第二种情况,one函数中定义了x变量,因此直接使用即可,所以x=10'''
  • 函数对象+作用域应用

  • 补充知识点

    • global关键字:修改全局作用域中的变量

      x = 1def f1():x = 2def f2():#         global x  # 修改全局x = 3f2()f1()
      print(x)'''
      1
      '''x = 1def f1():x = 2def f2():global x  # 修改全局x = 3f2()f1()
      print(x)'''
      3
      '''
    • nonlocal关键字

      x = 1def f1():x = 2def f2():#         nonlocal xx = 3f2()print(x)f1()'''
      2
      '''x = 1def f1():x = 2def f2():nonlocal xx = 3f2()print(x)f1()'''
      3
      '''
    • 注意

      • 在局部名称空间中想要修改全局的可变类型,不需要任何声明,可以直接修改

        lis = []def f1():lis.append(1)print(f"调用函数前: {lis}")
        f1()
        print(f"调用函数后: {lis}")
      • 在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改

转载于:https://www.cnblogs.com/plf-Jack/p/10951730.html

python之函数名称空间,作用域,嵌套函数相关推荐

  1. scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例

    scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...

  2. python基础之名称空间和作用域、函数嵌套

    一.名称空间 1.定义:存放名字与值的绑定关系 2.名称空间分为:内置名称空间.全局名称空间.局部名称空间 内置名称空间:python解释器自带的名字,python解释器启动就会生成 全局名称空间:文 ...

  3. python 3.28 第三章 函数嵌套/名称空间//内置名称空间/全局名称空间/局部名称空间/作用域/函数对象/闭包函数。...

    1 函数嵌套: 函数内可以调用了其他的函数. # def max2(x,y):# if x > y:# return x# else:# return y## def max3(x,y,z):# ...

  4. python 类的执行中保部存值_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  5. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

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

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

  7. python函数内嵌,嵌套函数

    python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor):def multiplyByFactor(number):return nu ...

  8. python嵌套函数具体案例_python编程嵌套函数实例代码

    python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return ...

  9. python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数

    python 函数嵌套函数 A nested function is simply a function within another function, and is sometimes calle ...

最新文章

  1. mybatis 一对多_MyBatis面试题集合,90%会遇到这些问题
  2. JavaScript初学者编程题(14)
  3. 开发缺点_成都嗨创科技:原生APP开发与混合APP开发的优缺点对比
  4. 大家谈谈公司里的项目经理角色及职责都是干什么的?
  5. mysql查询通过两个字段逆序
  6. [LeetCode] Linked List Cycle II
  7. BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...
  8. 异步发送,那消息可靠性怎么保证?
  9. python MySQL 插入Elasticsearch
  10. 安卓手机小说阅读器_乐小说阅读器下载手机版-乐小说阅读器app下载安装
  11. 【Mac】mac移动查找的图片到某个目录
  12. 20160417_无为_常州
  13. sqlserver基本增删查语句
  14. 易班 华南理工大学 新生入学教育在线考试 题库共503题
  15. iconfont-阿里巴巴矢量图标库的使用方法
  16. 来的正当时,EnableQ在线问卷调查引擎免费版发布
  17. 微软 edge浏览器自动关闭问题处理
  18. uq mysql_MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
  19. PHP遍历文件夹下的所有子文件夹及文件
  20. 四十八 停电与打牌(中) 我在软件园的那些日子里

热门文章

  1. 对 Linux 新手非常有用的 20 个命令
  2. 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...
  3. c语言windows api编程,windows API编程学习
  4. 广工计算机专业离散数学考试题,广工华立2014年离散数学期末考试试题(配答案)...
  5. springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
  6. vsftp:425 错误
  7. java迷宫队列实现_Creator 迷宫生成: DFS 与 BFS 算法实现
  8. 下位机和上位机是什么意思_单反无反选择高速机是什么意思?什么是高速机
  9. 表情转html,PHP转换emoji表情为HTML字符实体
  10. 设置linux英文环境,英文Linux里中文和日文用户环境设置