函数对象

在面向对象编程中 一切皆对象

函数在python中是第一类对象

  • 函数可以这么用

    1. 可以被引用

      def func():
      print('hello world !')

      f=func
      f()
    2. 可以当做参数传入

      def func():
      print('hello world !') def func1(func):
      print('hello China !')
      func()

      f = func1(func)
    3. 可以当做函数的返回值

      a = 1
      def func():
      return a
      res = func()
      print(res)

      1
    4. 可以当做容器类型的元素

      def register():
      print("注册") def login():
      print("登录")

      def check():
      print("查看") l = [register,login,check]
      l[0]()

函数的嵌套

  1. 函数的嵌套调用

    在函数内调用了其他函数

    def func():
    print('hello world !') def func1(func):
    print('hello China !')
    func()

    f = func1(func)
  2. 函数的嵌套定义

    在函数内又定义了其他函数,定义在函数内部的函数只能在函数内部用

    def func():
    print("hello world !")
    def func1():
    print("hello China")
     

名称空间(name space)

  • 定义

    专门存名字的空间,存放名字与值绑定关系 (名字和地址)的地方。

  • 分类

    1. 内置名称空间(print、len、max)

      • 内置名称:存放python解释器自带的名字

      • 生效与失效:在解释器启动时即生效,解释器关闭时失效

    2. 全局名称空间

      • 全局名称:文件级别的名字(顶头写的)即不是内置名称也不是局部名称就是全局名称

      • 生效与失效:在执行文件时生效,在所有文件结束或在执行期间被删除,则失效。

    3. 局部名称空间

      • 局部名称:在函数内的名称就是局部名称

      • 生效与失效:调用时产生,函数结束时结束。函数内的名字和参数都存放于局部空间

    名称空间的加载顺序:内置 >>> 全局 >>> 局部

    名称空间的查找顺序:局部 >>> 全局 >>> 内置

作用域

  • 定义:域》指的是区域,范围的意思,作用域即不同名称作用的范围

  • 全局作用域:包含内置名称空间和全局名称空间的名字

    • 特点:在任何位置都能访问得到

      该范围内的名字会伴随程序整个生命周期

  • 局部作用域:包含局部名称空间的名字

    • 特点:只能在函数内使用

    • 调用时生效,调用结束时失效

    globals(查看全局作用域中的内容) 表示的全局范围 就是所谓的全局作用域

    print(dir(globals()["__builtins__"]))

    locals(查看局部作用域中的内容)要注意的是你在全局中使用locals看到的就是全局的内容,与globals没有什么区别。

    print(locals()) # 在全局中查看作用域,相当于globals


    def func():
    a = 100
    print(locals()) # 在局部空间查看作用域

    func()

    global:明确声明,要使用全局中的名称

    nonlocal:明确声明,要使用上一层中的名称,如上一层没有则找上上层,但是注意 不能找到全局中

    注意:你在全局中使用locals 看到的就是全局的内容

闭包函数

  • 定义:定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用,该函数称为闭包函数

  • 作用域关系在函数定义阶段就规定死了,与调用位置无关。

    def outer():
    a = 1
    def inner():
    print(a) return inner

最新文章

  1. ie与火狐中常见的一些兼容问题
  2. UVa2521
  3. 在WebApi中基于Owin OAuth使用授权发放Token
  4. iOS屏幕适配知识
  5. 关联:objc_getAssociatedObject和objc_setAssociatedObject使用
  6. DP:Corn Fields(POJ 3254)
  7. How to evaluate a transimpedance amplifier (part 1)
  8. 黑马程序员-IO(二)
  9. mysql source 报错 Unknown command '\'' 解决办法
  10. Linux各目录及每个目录的详细介绍(转载)
  11. p1257 平面上最接近点对---(分治法)
  12. 监控中的TP50
  13. multi-thread debug
  14. Java Nashorn--Part 5
  15. 对MVC模式与MVVM模式的认识
  16. 如何批量删除QQ浏览器指定历史记录和导出指定的历史记录
  17. for循环输出菱形
  18. 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
  19. python3网络爬虫系统学习:第一讲 基本库urllib
  20. System Center Configuration Manager 2016 必要条件准备篇(Part2)

热门文章

  1. layui 单选框选中事件
  2. collections 中 typing 中对象的引用
  3. python虚拟环境四
  4. python学习之调试:
  5. Unix高级编程之文件权限
  6. js 打开新窗口
  7. split()分割字符串用法
  8. Asp.Net实现记录历史访问人数和当前在线人数
  9. 【转】java的动态代理机制详解
  10. DVWA之命令注入(command injection)