最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何將Python編譯成C語言

 更新時(shí)間:2022年01月25日 08:42:41   作者:Xeon_CC?  
這篇文章主要介紹了如何將Python編譯成C語言,我們都知道python比c慢,下面小編就來個(gè)大家分享如何將Python編譯成C語言,需要的小伙伴可以參考一下

前言:

文章里用的Python環(huán)境是Anaconda3 2019.7
這里測(cè)試的程序是找出所有1000以內(nèi)的勾股數(shù)。
a∈[1, 1000],b∈[1, 1000], c∈[1, 1000]

a² + b² = c² 有多少種解?

如果用普通的python去寫,代碼如下:

創(chuàng)建一個(gè)main.py

# encoding=utf-8
# cython: language_level=3
import time
import pyximport

pyximport.install()
import pyth_triples


def main():
? ? start = time.time()
? ? result = pyth_triples.count_triples(1000)
? ? duration = time.time() - start
? ? print(result, duration * 1000, "ms")


if __name__ == '__main__':
? ? main()

創(chuàng)建pyth_triples.py

# encoding=utf-8
# cython: language_level=3
def count_triples(limit):
? ? result = 0

? ? for a in range(1, limit + 1):
? ? ? ? for b in range(a + 1, limit + 1):
? ? ? ? ? ? for c in range(b + 1, limit + 1):
? ? ? ? ? ? ? ? if c ** 2 > a ** 2 + b ** 2:
? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? ? ? if c ** 2 == (a ** 2 + b ** 2):
? ? ? ? ? ? ? ? ? ? result += 1
? ? return result

這時(shí)候還沒有編譯成C去運(yùn)行,只是從pyx文件導(dǎo)入函數(shù)去使用。
執(zhí)行結(jié)束以后,結(jié)果為881,耗時(shí)為57603毫秒,太慢了。

現(xiàn)在開始,我們編譯成C語言去運(yùn)行,看一下效果。
修改pyth_triples.pyx文件,定義的變量都改為cdef int xxx = 0

# encoding=utf-8
# cython: language_level=3
def count_triples(limit):
? ? cdef int result = 0
? ? cdef int a = 0
? ? cdef int b = 0
? ? cdef int c = 0
? ? for a in range(1, limit + 1):
? ? ? ? for b in range(a + 1, limit + 1):
? ? ? ? ? ? for c in range(b + 1, limit + 1):
? ? ? ? ? ? ? ? if c ** 2 > a ** 2 + b ** 2:
? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? ? ? if c ** 2 == (a ** 2 + b ** 2):
? ? ? ? ? ? ? ? ? ? result += 1
? ? return result

創(chuàng)建setup.py (這一步其實(shí)可以不做,因?yàn)檫@只是把編譯結(jié)果寫入本地磁盤,給我們展示生成的C語言代碼長什么樣)

# encoding=utf-8
# cython: language_level=3
from distutils.core import setup

from Cython.Build import cythonize

# set PYTHONHOME=D:\Anaconda3
# conda activate
# python setup.py build_ext --inplace
setup(
? ? ext_modules=cythonize("pyth_triples.pyx")
)

依次在pycharm的終端執(zhí)行以下命令:

set PYTHONHOME=D:\Anaconda3
conda activate
python setup.py build_ext --inplace

這將生成.c文件和一些不知道什么文件

執(zhí)行main.py以后,結(jié)果不變,實(shí)行時(shí)間由原來的57603毫秒減少到35毫秒左右,相差1600多倍。

如果用Java去跑這套代碼

Java代碼:

public class TriplesTest {
? ? public static void main(String[] args) {
? ? ? ? long startTime = System.currentTimeMillis();
? ? ? ? System.out.println(count_triples(1000));
? ? ? ? long endTime = System.currentTimeMillis();
? ? ? ? System.out.println("run time:" + (endTime - startTime) + "ms");
? ? }

? ? public static int count_triples(int limit) {
? ? ? ? int result = 0;
? ? ? ? for (int a = 1; a <= limit; a++) {
? ? ? ? ? ? for (int b = a + 1; b <= limit; b++) {
? ? ? ? ? ? ? ? for (int c = b + 1; c <= limit; c++) {
? ? ? ? ? ? ? ? ? ? if (Math.pow(c, 2) > Math.pow(a, 2) + Math.pow(b, 2)) {
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if (Math.pow(c, 2) == Math.pow(a, 2) + Math.pow(b, 2)) {
? ? ? ? ? ? ? ? ? ? ? ? result += 1;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return result;
? ? }
}

執(zhí)行時(shí)間是130ms左右。

到此這篇關(guān)于如何將Python編譯成C語言的文章就介紹到這了,更多相關(guān)將Python編譯成C語言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對(duì)pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解

    對(duì)pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解

    下面小編就為大家分享一篇對(duì)pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python登錄QQ郵箱發(fā)送郵件的實(shí)現(xiàn)示例

    Python登錄QQ郵箱發(fā)送郵件的實(shí)現(xiàn)示例

    本文主要介紹了Python登錄QQ郵箱發(fā)送郵件的實(shí)現(xiàn)示例,主要就是三步,登錄郵件、寫郵件內(nèi)容、發(fā)送,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-08-08
  • 記一次pyinstaller打包pygame項(xiàng)目為exe的過程(帶圖片)

    記一次pyinstaller打包pygame項(xiàng)目為exe的過程(帶圖片)

    這篇文章主要介紹了記一次pyinstaller打包pygame項(xiàng)目為exe的過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Selenium 安裝和簡單使用的實(shí)現(xiàn)

    Selenium 安裝和簡單使用的實(shí)現(xiàn)

    這篇文章主要介紹了Selenium 安裝和簡單使用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • pycharm配置QtDesigner的超詳細(xì)方法

    pycharm配置QtDesigner的超詳細(xì)方法

    這篇文章主要介紹了pycharm配置QtDesigner的超詳細(xì)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python中的xlrd模塊使用整理

    Python中的xlrd模塊使用整理

    今天給大家?guī)淼奈恼率顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著xlrd模塊的使用展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)

    python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)

    這篇文章主要介紹了python讀寫數(shù)據(jù)讀寫csv文件(pandas用法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用 Python 和 LabelMe 實(shí)現(xiàn)圖片驗(yàn)證碼的自動(dòng)標(biāo)注功能

    使用 Python 和 LabelMe 實(shí)現(xiàn)圖片驗(yàn)證碼的自動(dòng)標(biāo)注功能

    文章介紹了如何使用Python和LabelMe自動(dòng)標(biāo)注圖片驗(yàn)證碼,主要步驟包括圖像預(yù)處理、OCR識(shí)別和生成標(biāo)注文件,通過結(jié)合PaddleOCR,可以快速實(shí)現(xiàn)驗(yàn)證碼字符的自動(dòng)標(biāo)注,大幅提升工作效率,感興趣的朋友一起看看吧
    2024-12-12
  • 深入理解Pytorch中的torch. matmul()

    深入理解Pytorch中的torch. matmul()

    這篇文章主要介紹了Pytorch中的torch. matmul()的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Python識(shí)別二維碼的兩種方法詳解

    Python識(shí)別二維碼的兩種方法詳解

    在學(xué)習(xí)Python處理二維碼的過程中,我們看到的大多是“用python生成酷炫二維碼”、“用Python制作動(dòng)圖二維碼”之類的文章。而關(guān)于使用Python批量識(shí)別二維碼的教程,并不多見。本文就為大家總結(jié)了Python識(shí)別二維碼的兩種方法,感興趣的可以學(xué)習(xí)一下
    2022-06-06

最新評(píng)論

陆川县| 天峻县| 敦化市| 马山县| 阳城县| 汕尾市| 星子县| 包头市| 太保市| 喀喇沁旗| 吉水县| 大城县| 田林县| 常山县| 石楼县| 南溪县| 青海省| 确山县| 韶山市| 天峨县| 西充县| 赣榆县| 临泽县| 阿尔山市| 山阳县| 马尔康县| 福建省| 鹤庆县| 韩城市| 霍林郭勒市| 青田县| 广州市| 无为县| 忻城县| 巍山| 离岛区| 都江堰市| 额尔古纳市| 甘泉县| 鹤庆县| 报价|