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

Python函数机制

Python函数机制

函数的创建

def f():
    print(f"function f run")
    g()

f()  # [1]

def g():
    print(f"function g run")

f()  # [2]

函数的执行

Python程序的执行过程

d2cf53ea6de14841839046b5bf27e710.png

经常看见说 Python是一门解释性语言,没有编译的过程。实际上Python也有编译过程,只不过编译的结果是字节码文件。

python test.py执行之后会发生什么?先是.dll把源码转成.pyc文件(这个.pyc实际上就是字节码存储体现,有些情况下也可能不会生成pyc文件,直接在内存中以PyCodeObject的形式存在),这个过程就是Python的编译过程,然后.dll再顺序执行字节码。dll包含了编译器和虚拟机。

这里提一下pyc文件。正常来说,python test.py肯定是先词法语法分析之类的,然后把源码组织成内存中的对象,这个对象的类型就是PyCodeObject。pyc就是硬盘中的PyCodeObject。

Python 会根据 pyc 中记录的编译结果直接建立内存中的 PyCodeObject 对象,而不用再次对源文件进行 编译了。

对于一段 Python 代码,其对应的 PyCodeObject 对象只有一个,而代码所对应的
PyFunctionObject 对象却可能有很多个,比如一个函数多次调用,则 Python 会在运行时
创建多个 PyFunctionObject 对象,每一个 PyFunctionObject 对象的 func_code 域都会
关联到这个 PyCodeObject 对象。

无参函数

函数函数执行定义与

流程图

有参函数

位置参数和kwargs

默认参数的坑

闭包

例子

a = 1
def outer_func():
    a = 10
    def inner_func():
        print(a)
    return inner_func
f = outer_func()
f()

这个大家都知道因为闭包的原因,输出是10。但实际上按照直觉来说,inner_func调用的时候已经跳出了outer_func的作用域,a应该是1,为什么a的值还是能被a = 10约束住。闭包在这里是怎么起作用的?

简单地说,闭包是函数+约束。这个约束主要指闭包作用域closure。

outer_func返回的是不仅仅是inner_func,还有a = 10这个外部的变量这条约束,Python将这两个作为一个整体返回,这个约束就是func_closure。

Python 闭包原理_python闭包原理-CSDN博客

闭包流程图

几个闭包的典型错误分析

装饰器

lambda函数

热更新

什么是热更新


http://www.kler.cn/a/455017.html

相关文章:

  • 美畅物联丨如何通过视频汇聚平台汇聚视频并推送至上级28181平台
  • vue2/3,Spring Boot以及生产环境跨域解决方案
  • LabVIEW条件配置对话框
  • 互联网十万个为什么之什么是微服务
  • PSINS工具箱函数介绍——kfplot
  • oracle基础:中文字段排序详解
  • 音视频入门知识(五):流媒体篇
  • mysql部署(5.7.31)
  • 图研院 | 掌握前沿图技术,从 “Graph XAI” 课程起航
  • 01-c++对c的扩展(上)
  • FOC软件 STM32CubeMX 使用
  • 【玩转OCR】 | 腾讯云智能结构化OCR在多场景的实际应用与体验
  • 头歌-边缘检测
  • AT24C02学习笔记
  • 【EDA】Gate Sizing算法
  • 基于springboot的论坛管理系统丨源码+数据库+万字文档+PPT
  • 在blender中 导出模型给threejs 用3dsprite出现缩放或者位置不对问题排查
  • 玩转OCR | 腾讯云智能结构化OCR推动跨行业高效精准的文档处理与数据提取新时代
  • linux ext4文件系统
  • 编译安装教程