关于Python中compile() 函数简单实用示例详解

 更新时间:2023年05月29日 09:07:09   作者:门前大橋下丶  
这篇文章主要介绍了关于compile() 函数简单实用示例,compile() 函数将一个字符串编译为字节代码,compile将代码编译为代码对象,应用在代码中可以提高效率,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下

compile() 函数是什么

compile() 函数将一个字符串编译为字节代码。
compile将代码编译为代码对象,应用在代码中可以提高效率。

语法

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

参数

  • source:表示要编译的源代码字符串、AST对象或代码对象。
  • filename:表示源代码的文件名。如果源代码不是从文件中读取的,可以使用一个虚拟的文件名。
  • mode:表示编译模式,可以指定为 exec, eval, single。
  • flags:可选参数,用于指定编译时的标志。可以使用ast.PyCF_*常量进行按位或运算的组合,用于控制编译过程中的不同行为。
  • dont_inherit:可选参数,如果设置为True,则编译时不会继承当前作用域的符号表。
  • optimize:可选参数,指定编译优化级别的标志。默认值为-1,表示使用默认优化级别。

返回表达式执行结果。

示例

首先code下新建demo.py

from code.cal import add,mul
from code.sqrt import sqrt
__all__ =[ "add","mul","sqrt"]

cal.py

def add(a,b):
	return a+b
def mul(a,b):
	return a*b

sqrt.py

def sqrt(a):
	return a**2

编写调用脚本test.py

import traceback
import os
import requests
import threading
import time
import json
import logging
log=logging.getLogger()
def compile_funcs(codefile,funname_list):
    """
    Args:
        codefile: Path of Python's Code file
        funname_list: list of function names
    Return: dict of func info     
    """
    try:
    	#读取代码
        with open(codefile) as f:
            code=f.read()
        #将字符串编译为字节代码
        methods_obj=compile(code,"","exec")
        scope = {}
        '''
        exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容;
        换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,
        也可以是任何Linux下可执行的脚本文件
        '''
        exec(methods_obj,scope)
        fun_object={}
        for name in funname_list:
            fun_obj= scope.get(name,None)
            fun_object[name] = fun_obj
        return fun_object
    except Exception as e:
        traceback.print_exc(e)
        return None
#函数名称
func_lists=['add','mul','sqrt']
#传入code下的demo.py
func_dict= compile_funcs("./code/demo.py",func_lists)
#获取返回对象
add = func_dict['add']
mul = func_dict['mul']
sqrt = func_dict['sqrt']
#传参调用
c = add(2,3)
d = mul(3,3)
e = sqrt(5)
print(f"add(2,3)={c}")
print(f"mul(3,3)={d}")
print(f"sqrt(5)={e}")

结果:

add(2,3)=5
mul(3,3)=9
sqrt(5)=25

总结

compile() 函数的应用场景包括:

1、动态执行代码:可以将源代码字符串编译为代码对象,然后使用exec()函数执行。
2、动态求值表达式:将单个表达式编译为代码对象,然后使用eval()函数求值。
3、AST分析和修改:将源代码字符串编译为AST对象,然后使用ast模块进行分析和修改操作,例如静态代码分析、代码转换等。
在使用某些代码需要提炼出公共的代码块是可以使用,方便后续的使用和添加;

到此这篇关于关于compile() 函数简单实用示例的文章就介绍到这了,更多相关compile() 函数实用示例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django+RestFramework API接口及接口文档并返回json数据操作

    Django+RestFramework API接口及接口文档并返回json数据操作

    这篇文章主要介绍了Django+RestFramework API接口及接口文档并返回json数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python异步编程中asyncio.gather的并发控制详解

    Python异步编程中asyncio.gather的并发控制详解

    在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量机制实现精准并发控制,希望对大家有所帮助
    2025-03-03
  • jupyter notebook快速入门及使用详解

    jupyter notebook快速入门及使用详解

    这篇文章主要介绍了jupyter notebook快速入门及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python保留格式汇总各部门excel内容的实现思路

    python保留格式汇总各部门excel内容的实现思路

    这篇文章主要介绍了python保留格式汇总各部门excel内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python 类,property属性(简化属性的操作),@property,property()用法示例

    Python 类,property属性(简化属性的操作),@property,property()用法示例

    这篇文章主要介绍了Python 类,property属性(简化属性的操作),@property,property()用法,结合实例形式分析了Python类的定义、属性、方法及相关使用技巧,需要的朋友可以参考下
    2019-10-10
  • Django Rest framework频率原理与限制

    Django Rest framework频率原理与限制

    这篇文章主要介绍了Django Rest framework频率原理与限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 在Python中使用Neo4j的方法

    在Python中使用Neo4j的方法

    今天小编就为大家分享一篇关于在Python中使用Neo4j的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • python实现简易云音乐播放器

    python实现简易云音乐播放器

    这篇文章主要介绍了python实现简易云音乐播放器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • python实现带界面的井字棋小游戏

    python实现带界面的井字棋小游戏

    这篇文章我们主要介绍的是python实现带界面的井字棋小游戏,从安装tkinter开始,然后初始化窗口,定义按钮即查找获胜条件,想具体了解的小伙伴可以参考下文,附有详细代码
    2021-09-09
  • 详解如何用OpenCV + Python 实现人脸识别

    详解如何用OpenCV + Python 实现人脸识别

    这篇文章主要介绍了详解如何用OpenCV + Python 实现人脸识别,非常具有实用价值,需要的朋友可以参考下
    2017-10-10

最新评论