91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么將Python編譯成C語言

發布時間:2022-01-25 10:44:25 來源:億速云 閱讀:792 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“怎么將Python編譯成C語言”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么將Python編譯成C語言”這篇文章吧。

前言:

文章里用的Python環境是Anaconda3 2019.7
這里測試的程序是找出所有1000以內的勾股數。
a∈[1, 1000],b∈[1, 1000], c∈[1, 1000]

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

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

創建一個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()

創建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

這時候還沒有編譯成C去運行,只是從pyx文件導入函數去使用。
執行結束以后,結果為881,耗時為57603毫秒,太慢了。

怎么將Python編譯成C語言

現在開始,我們編譯成C語言去運行,看一下效果。
修改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

創建setup.py (這一步其實可以不做,因為這只是把編譯結果寫入本地磁盤,給我們展示生成的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的終端執行以下命令:

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

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

怎么將Python編譯成C語言

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

怎么將Python編譯成C語言

如果用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;
    }
}

執行時間是130ms左右。

怎么將Python編譯成C語言

以上是“怎么將Python編譯成C語言”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

自贡市| 平果县| 曲水县| 丹棱县| 肇州县| 休宁县| 汉中市| 吉木萨尔县| 尚义县| 油尖旺区| 都安| 曲靖市| 德州市| 乌兰察布市| 平和县| 玉龙| 定远县| 察隅县| 辽宁省| 连州市| 武乡县| 龙口市| 德江县| 时尚| 辽中县| 建平县| 肥西县| 峡江县| 乐安县| 长海县| 东光县| 特克斯县| 二连浩特市| 杨浦区| 乌拉特前旗| 五台县| 延安市| 确山县| 凉城县| 岚皋县| 长兴县|