成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

嫌Python太慢了?讓Cython帶你飆車吧

開發 后端
多數情況下,開發時間比性能更重要。Python有一個很棒的社區,其中有很多很好的庫,很多需求在那都能得到滿足。話雖如此,如果想讓Python代碼更快該怎么做呢?來試試Cython吧!

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)

很多人僅在性能方面將Python與C進行了比較,沒有在快速開發方面比較,就開始抱怨Python太慢了。Python的優點在于,其開發時間非常短,你不必處理指針、內存管理等問題。

多數情況下,開發時間比性能更重要。Python有一個很棒的社區,其中有很多很好的庫,很多需求在那都能得到滿足。

話雖如此,如果想讓Python代碼更快該怎么做呢?來試試Cython吧!

Cython: Python的C擴展

如果你同時喜歡Python的簡單語法以及C的高性能,那么Cython就是你想要的。你可以使用Cython為Python編寫C擴展,其代碼將轉換為優化的C / C ++代碼。它可以提供高性能,且能在Python項目中使用。

 

[[329476]]

 

 

圖源:morioh

 

安裝Cython

這需要C編譯器,你可以根據自己的操作系統安裝一個C編譯器,然后需要使用如下命令安裝Cython:

  1. pipinstall Cython 

從靜態類型聲明中獲益

可以將靜態類型聲明添加到變量和函數,它將提供更好的性能。你可以將所有C類型如int,float,double等用于聲明。

在Cython中聲明變量

  1. cdef int i =10 

這句命令的基本意思是聲明一個變量i,它是一個整數。

在Cython中聲明函數

  1. cdef intsquare(int x): 
  2.     return x ** 2 

該命令基本上意味著square函數采用整數x作為參數并返回整數值x ** 2,即x的平方。導入模塊時,cdef聲明的函數對Python代碼不可見。為了使其可見需要改用cpdef。

在Python中計算階乘

編寫一個Python函數來計算給定整數的階乘:

  1. effactorial(n): 
  2.                        if  n >=1: 
  3.                            return n *factorial(n -1) 
  4.                        return1 

使用Cython讓Python更快

 

[[329477]]

 

 

圖源:unsplash

 

首先,要創建一個pyx文件。

cpdef longfastfactorial:此函數將返回一個long值,因此我們通過在函數名fastfactorial之前放置long來聲明它的類型為long。

long n:我們預期n為long值。

  1. cpdef long fastfactorial(long n): 
  2.                                 if  n >=1: 
  3.                                     return n * fastfactorial(n-1) 
  4.                                 return1 

接著,我們需要創建一個setup.py文件來將Cython轉換為C。

  1. from distutils.core import setup 
  2.                      fromCython.Buildimport cythonize 
  3.                      setup(ext_modules =cythonize('fastfac.pyx')) 

編譯代碼

為執行編譯,需要運行以下命令:

  1. python3setup.py build_ext –inplace 

--inplace:此選項會在你的工作目錄中創建一個共享對象文件。

對比

讓我們比較一下二者:

  1. from fastfac import fastfactorial 
  2.                    from fac import factorial 
  3.                    from timeit import timeit 
  4.                    
  5.                    print(timeit('fastfactorial(20)', globalsglobals=globals(), number=10000))  #output: 0.002164322999306023 
  6.                    print(timeit('factorial(20)', globalsglobals=globals(), number=10000))  #output: 0.18900858898996376 

結果驚人,Cython快將近88倍!

 

 

[[329478]]

 

 

圖源:unsplash

 

只需稍加潤色,就可使Python代碼的運行速度大幅提高。本文還僅僅只是一個示例,你可以對其進行進一步優化,效果可能會更好!

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2024-07-23 08:21:19

2023-12-07 19:13:48

Pythonprint

2025-02-05 08:54:36

rimrafNode.js工具

2017-08-31 13:50:53

Python編程語言

2018-02-25 09:12:15

PythonC語言代碼

2015-08-04 10:34:13

Windows 10升級

2022-06-17 11:10:43

PandasPolarsPython

2023-09-02 20:13:01

代碼網速

2022-01-06 08:34:32

數據庫Spark查詢

2012-12-11 09:48:55

廣域網網絡優化網絡加速

2009-02-10 09:34:00

2020-07-23 14:15:42

Cython的Python代碼

2019-09-02 08:58:27

Python編譯器編程語言

2020-01-08 10:47:51

硬盤內存網絡

2019-05-16 14:50:32

CythonPython編程語言

2024-10-08 10:24:41

Python編程語言

2011-03-31 09:26:15

MySQL擴展性精簡

2009-11-17 14:13:41

PythonGoogle

2016-10-10 08:38:40

Windows 10備份格式化

2017-01-03 15:46:13

AndroidAndroid7.0
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美一区二区三区免费观看 | 在线观看黄色电影 | 99精品视频在线 | 国产精品美女久久久av超清 | 日韩资源| 国产乱码精品一区二区三区中文 | 国产成人免费视频网站高清观看视频 | 欧美在线| 天天干 夜夜操 | 精产国产伦理一二三区 | 午夜电影在线播放 | 欧美精品v | 久久最新 | 天堂色综合| 国产精品九九视频 | 欧美综合在线视频 | 精品一区二区三区在线视频 | 五月网婷婷 | 一区二区日韩 | 中文字幕在线观看第一页 | 国产在线二区 | 久久男人 | 日日淫 | 毛片.com| 国产亚洲精品综合一区 | 欧美日韩理论 | 日韩久久久久 | 国产精品久久久久久久免费大片 | www.中文字幕av | 欧美日韩亚洲一区 | 久草视频网站 | 中文字幕一区在线观看视频 | 欧美精品在线一区 | 中文字幕在线精品 | 日本一区二区高清视频 | 91国语清晰打电话对白 | 国产精品无码永久免费888 | 久久久久亚洲精品国产 | 97精品久久 | 午夜精品福利视频 | 成人一区二区三区在线观看 |