当前位置: 首页 > news >正文

Python函数高级

函数对象

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

函数在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

转载于:https://www.cnblogs.com/liusijun113/p/10034789.html

相关文章:

  • JVM 参数调优
  • 参数为空取全部数据的几种做法
  • Chisel3 - 基本数据类型
  • 实验五 编写调试具有多个段的程序
  • JSAAS 平台实现 微信类似的TOKEN机制
  • kafka集群Controller竞选与责任设计思路架构详解-kafka 商业环境实战
  • Linux C编程之一:Linux下c语言的开发环境
  • 写给高年级小学生看的《Bash 指南》
  • Windows10下 tensorflow-gpu 配置
  • 前端模板技术面面观(2)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 操作系统-进程控制
  • 区块链在刚刚领域引起行业革新
  • pages bookmarks for machine learning domain
  • 2019年值得关注的八大DevOps趋势
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【译】理解JavaScript:new 关键字
  • github指令
  • Java教程_软件开发基础
  • js面向对象
  • Vue.js-Day01
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 关于for循环的简单归纳
  • 机器学习中为什么要做归一化normalization
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 使用agvtool更改app version/build
  • 使用SAX解析XML
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 移动端高清、多屏适配方案
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​TypeScript都不会用,也敢说会前端?
  • $().each和$.each的区别
  • (06)金属布线——为半导体注入生命的连接
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (8)STL算法之替换
  • (Git) gitignore基础使用
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十八)三元表达式和列表解析
  • (一)认识微服务
  • (转)关于多人操作数据的处理策略
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net 7 上传文件踩坑
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net打印*三角形
  • /3GB和/USERVA开关
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @font-face 用字体画图标
  • []C/C++读取串口接收到的数据程序