zoukankan      html  css  js  c++  java
  • 函数 名称空间与作用域

    函数 名称空间与作用域

    函数对象

    • 函数名可以被引用

      def add(x, y):
          return x + y
      func = add
      print(func(1, 2))
      3
      
    • 函数名可以当做参数引用

    def foo(x, y, func):
        print(x, y)
        func()
    def bar():
        print('from bar')
    foo(1, 2, bar)
    
    1 2
    from bar
    
    
    • 函数可以当作返回值使用
    def index():
    	print('from index')
    def func(a):
        return a
    a = func(index)
    a()
    
    
    • 函数名可以当做容器类型的元素
    def func():
        print('from func')
    l1 = [1, '2', func, func() ]
    f = l1[2]
    print(f)
    from func
    <function func at 0x000002C52CC14288>
    
    

    名称空间

    • 内置名称空间

      python提前定义好的名字

    • 全局名称空间

      存放于文件级别的名字,就是全局名称空间

    • 局部名称空间

      函数内部定义的所有名字都存放于当前函数的内置名称空间

      名称空间 就是存放名字与对象映射/绑定关系的地方

      内置名称空间:

    ​ 伴随python解释器的启动而存在,关闭而结束

    全局名称空间:

    ​ 当前文件的开始执行而产生,当前页面代码执行结束后失效

    ​ 局部名称空间:

    ​ 伴随函数的调用而产生,函数的结束而回收

    名称空间的加载顺序

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

    查找顺序

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

    ​ 函数内部使用的名字,在定义阶段已经规定死了,与调用位置无关

    作用域

    1. 全局作用域

      位于全局名称空间,内置名称空间中的名字属于全局范围,

    2. 局部作用域

    ​ 局部可以调用的名字

    • global 声明全局变量
    • nonlocal 在局部名称空间声明局部变量,修改上层变量

    函数的嵌套

    ​ 在函数中,无论嵌套多少层,都可以查看全局作用域的名字 在函数内部修改全局名称时空间

    ​ 的名字的值,当值为不可变类型时,要用global

    ​ 当实参函数为可变类型时,函数体内对该值的修改将直接反应到原值

  • 相关阅读:
    收集常用的.net开源项目
    前端兼容性
    IntelliJ IDEA 14 注册码生成器
    Web开发者的10个最好的云开发环境
    [置顶] 浅谈大型web系统架构
    简单的前端js+ajax 购物车框架(入门篇)
    CSS3 background-size图片自适应
    CSS clip:rect矩形剪裁功能及一些应用介绍
    Aspx 页面生命周期
    Asp.Net页面(母版页)加载顺序
  • 原文地址:https://www.cnblogs.com/127-2933/p/11867926.html
Copyright © 2011-2022 走看看