欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于Python中compile() 函數(shù)簡單實用示例詳解

 更新時間:2023年05月29日 09:07:09   作者:門前大橋下丶  
這篇文章主要介紹了關于compile() 函數(shù)簡單實用示例,compile() 函數(shù)將一個字符串編譯為字節(jié)代碼,compile將代碼編譯為代碼對象,應用在代碼中可以提高效率,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下

compile() 函數(shù)是什么

compile() 函數(shù)將一個字符串編譯為字節(jié)代碼。
compile將代碼編譯為代碼對象,應用在代碼中可以提高效率。

語法

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

參數(shù)

  • source:表示要編譯的源代碼字符串、AST對象或代碼對象。
  • filename:表示源代碼的文件名。如果源代碼不是從文件中讀取的,可以使用一個虛擬的文件名。
  • mode:表示編譯模式,可以指定為 exec, eval, single。
  • flags:可選參數(shù),用于指定編譯時的標志。可以使用ast.PyCF_*常量進行按位或運算的組合,用于控制編譯過程中的不同行為。
  • dont_inherit:可選參數(shù),如果設置為True,則編譯時不會繼承當前作用域的符號表。
  • optimize:可選參數(shù),指定編譯優(yōu)化級別的標志。默認值為-1,表示使用默認優(yōu)化級別。

返回表達式執(zhí)行結(jié)果。

示例

首先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

編寫調(diào)用腳本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()
        #將字符串編譯為字節(jié)代碼
        methods_obj=compile(code,"","exec")
        scope = {}
        '''
        exec函數(shù)族的作用是根據(jù)指定的文件名找到可執(zhí)行文件,并用它來取代調(diào)用進程的內(nèi)容;
        換句話說,就是在調(diào)用進程內(nèi)部執(zhí)行一個可執(zhí)行文件。這里的可執(zhí)行文件既可以是二進制文件,
        也可以是任何Linux下可執(zhí)行的腳本文件
        '''
        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
#函數(shù)名稱
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']
#傳參調(diào)用
c = add(2,3)
d = mul(3,3)
e = sqrt(5)
print(f"add(2,3)={c}")
print(f"mul(3,3)=vvxyksv9kd")
print(f"sqrt(5)={e}")

結(jié)果:

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

總結(jié)

compile() 函數(shù)的應用場景包括:

1、動態(tài)執(zhí)行代碼:可以將源代碼字符串編譯為代碼對象,然后使用exec()函數(shù)執(zhí)行。
2、動態(tài)求值表達式:將單個表達式編譯為代碼對象,然后使用eval()函數(shù)求值。
3、AST分析和修改:將源代碼字符串編譯為AST對象,然后使用ast模塊進行分析和修改操作,例如靜態(tài)代碼分析、代碼轉(zhuǎn)換等。
在使用某些代碼需要提煉出公共的代碼塊是可以使用,方便后續(xù)的使用和添加;

到此這篇關于關于compile() 函數(shù)簡單實用示例的文章就介紹到這了,更多相關compile() 函數(shù)實用示例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論