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

關(guān)于Python中compile() 函數(shù)簡(jiǎn)單實(shí)用示例詳解

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

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

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

語(yǔ)法

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

參數(shù)

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

返回表達(dá)式執(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

編寫(xiě)調(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í)行文件,并用它來(lái)取代調(diào)用進(jìn)程的內(nèi)容;
        換句話說(shuō),就是在調(diào)用進(jìn)程內(nèi)部執(zhí)行一個(gè)可執(zhí)行文件。這里的可執(zhí)行文件既可以是二進(jìn)制文件,
        也可以是任何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)
#獲取返回對(duì)象
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ù)的應(yīng)用場(chǎng)景包括:

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

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

相關(guān)文章

  • Django+RestFramework API接口及接口文檔并返回json數(shù)據(jù)操作

    Django+RestFramework API接口及接口文檔并返回json數(shù)據(jù)操作

    這篇文章主要介紹了Django+RestFramework API接口及接口文檔并返回json數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python異步編程中asyncio.gather的并發(fā)控制詳解

    Python異步編程中asyncio.gather的并發(fā)控制詳解

    在Python異步編程生態(tài)中,asyncio.gather是并發(fā)任務(wù)調(diào)度的核心工具,本文將通過(guò)實(shí)際場(chǎng)景和代碼示例,展示如何結(jié)合信號(hào)量機(jī)制實(shí)現(xiàn)精準(zhǔn)并發(fā)控制,希望對(duì)大家有所幫助
    2025-03-03
  • jupyter notebook快速入門及使用詳解

    jupyter notebook快速入門及使用詳解

    這篇文章主要介紹了jupyter notebook快速入門及使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python保留格式匯總各部門excel內(nèi)容的實(shí)現(xiàn)思路

    python保留格式匯總各部門excel內(nèi)容的實(shí)現(xiàn)思路

    這篇文章主要介紹了python保留格式匯總各部門excel內(nèi)容,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python 類,property屬性(簡(jiǎn)化屬性的操作),@property,property()用法示例

    Python 類,property屬性(簡(jiǎn)化屬性的操作),@property,property()用法示例

    這篇文章主要介紹了Python 類,property屬性(簡(jiǎn)化屬性的操作),@property,property()用法,結(jié)合實(shí)例形式分析了Python類的定義、屬性、方法及相關(guān)使用技巧,需要的朋友可以參考下
    2019-10-10
  • Django Rest framework頻率原理與限制

    Django Rest framework頻率原理與限制

    這篇文章主要介紹了Django Rest framework頻率原理與限制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 在Python中使用Neo4j的方法

    在Python中使用Neo4j的方法

    今天小編就為大家分享一篇關(guān)于在Python中使用Neo4j的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器

    python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器

    這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python實(shí)現(xiàn)帶界面的井字棋小游戲

    python實(shí)現(xiàn)帶界面的井字棋小游戲

    這篇文章我們主要介紹的是python實(shí)現(xiàn)帶界面的井字棋小游戲,從安裝tkinter開(kāi)始,然后初始化窗口,定義按鈕即查找獲勝條件,想具體了解的小伙伴可以參考下文,附有詳細(xì)代碼
    2021-09-09
  • 詳解如何用OpenCV + Python 實(shí)現(xiàn)人臉識(shí)別

    詳解如何用OpenCV + Python 實(shí)現(xiàn)人臉識(shí)別

    這篇文章主要介紹了詳解如何用OpenCV + Python 實(shí)現(xiàn)人臉識(shí)別,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10

最新評(píng)論