Python 的 for 和 while 循環是靈活并且高級的,語法自然、讀起來像偽代碼。而 Cython 也支持 for 和 while,無需修改。但由于循環通常占據程序運行時的大部分時間,因此我們可以通過一些優化,確保 Cython 能夠將 Python 循環轉換為高效的 C 循環。
n=100
foriinrange(n):
...
上面是一個標準的 Python for 循環,如果這個 i 和 n 是靜態類型,那么 Cython 就能生成更快的 C 代碼。
cdef Py_ssize_t i, n = 100
for i in range(n):
...
# 這段代碼和下面的C代碼是等效的
"""
for (i=0; i
所以當通過 range 進行循環時,我們應該將 range 里面的參數以及循環變量換成 C 的整型。如果不顯式地進行靜態聲明的話,Cython 就會采用最保守的策略:
cdef Py_ssize_t n = 100
for i in range(n):
print(i + 2 ** 100)
在循環的時候,如果我們使用了變量 i,那么在和一個數字相加的時候,由于 Cython 無法確定是否會發生溢出,因此會保守的選擇 Python 的整型。
如果我們能保證表達式中一定不會發生溢出,那么可以顯式地將 i 也聲明為 C 的整數類型。
當然不光是整型,其它的 Python 類型也可以提前聲明,舉個例子:
cdef list lst = [
{"name": "satori", "age": 17},
{"name": "koishi", "age": 16},
{"name": "marisa", "age": 15},
]
# lst 里面都是字典,在遍歷之前可以提前聲明好
cdef dict item
for item in lst:
print(f"{item['name']}, {item['age']}")
"""
satori, 17
koishi, 16
marisa, 15
"""
# 通過 cdef dict item 提前聲明循環變量的類型
# 然后遍歷以及操作的時候,速度會快很多
# 因為我們實現了基于類型的優化
以上是 for 循環,至于 while 循環也是同理,說白了還是規定好類型,實現基于類型的優化。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
循環
+關注
關注
0文章
92瀏覽量
16659 -
C代碼
+關注
關注
1文章
90瀏覽量
15182 -
python
+關注
關注
57文章
4876瀏覽量
90022
發布評論請先 登錄
相關推薦
熱點推薦
功率循環基礎篇(二) —— 功率循環壽命曲線解讀
功率循環壽命曲線是評估功率半導體器件(如 ?IGBT?模塊)在溫度交變應力下長期可靠性的核心工具。該曲線通常以 結溫波動幅度?ΔTj 為橫坐標,以器件達到指定失效判據前所經歷的 循環次數?Nf 為
1688 商品詳情 API 調用與數據解析 Python 實戰
你想要的是 1688 商品詳情 API 的 Python 調用與數據解析實戰方案,核心是完成 API 憑證配置、接口請求(含簽名)、響應數據解析、異常處理 的全流程落地,我會提供可直接運行的代碼,并
沒有專利的opencv-python 版本
所有 官方發布的 opencv-python 核心版本(無 contrib 擴展)都無專利風險——專利問題僅存在于 opencv-contrib-python 擴展模塊中的少數算法(如早期 SIFT
發表于 12-13 12:37
第4章 C語言基礎以及流水燈的實現(4.5 4.6)
4.5while循環語句 在單片機C語言編程的時候,每個程序都會固定的加一句while(1),這條語句就可以起到死循環的作用。對于while
labview初學,請教一下 循環嵌套的使用
實現功能:一個while循環用于讀取200smart plc的一個點位變化,通過這個點位變化,往表格里面插入當是日期和時間數據,點位變化(從0到1或者從1到0)就插入一次數據,不知道如何實現,還請各位高手幫幫忙。*附件:學習.zip
發表于 10-23 17:48
淘寶商品詳情接口(item_get)企業級全解析:參數配置、簽名機制與 Python 代碼實戰
本文詳解淘寶開放平臺taobao.item_get接口對接全流程,涵蓋參數配置、MD5簽名生成、Python企業級代碼實現及高頻問題排查,提供可落地的實戰方案,助你高效穩定獲取商品數據。
人工智能行業如何使用for循環語句進行循環
人工智能行業可以使用以下是關于for循環在不同編程語言中的基本用法說明: Python中的for循環: 主要用于遍歷序列(列表、元組、字符串等) 典型結構:for item in sequence
termux調試python猜數字游戲
用termux做一個猜數字游戲
下面是在Termux中創建猜數字游戲的步驟及完整實現方案,結合Python實現(最適配Termux環境):
? 一、環境準備(Termux基礎配置)
1.
發表于 08-29 17:15
termux如何搭建python游戲
((800, 600))
pygame.display.set_caption(\"Termux Python Game\")
running = True
while
發表于 08-29 07:06
在Python中字符串逆序有幾種方式,代碼是什么
對于一個給定的字符串,逆序輸出,這個任務對于python來說是一種很簡單的操作,畢竟強大的列表和字符串處理的一些列函數足以應付這些問題 了,今天總結了一下python中對于字符串的逆序輸出的幾種常用
python app不能運行怎么解決?
;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
發表于 08-06 06:27
基礎篇3:掌握Python中的條件語句與循環
在Python編程語言中,條件語句和循環是構成復雜邏輯和數據處理的基石。本篇基礎教程將幫助您深入了解Python中的條件語句和循環結構,讓您能夠更好地控制程序流程。
條件語句
條件語句
發表于 07-03 16:13
一個串口上位機,采用生產消費結構,但是消費循環運行跟不上生產循環,到時最終輸出支持不了高頻率傳輸。如何優化
報文拆分是生產者,和校驗與是消費者。兩個vi放入并行循環。生產者vi主體結構是一個while循環加條件判斷停止循環,消費者vi結構是一個for循環
發表于 06-11 09:26
?如何在虛擬環境中使用 Python,提升你的開發體驗~
RaspberryPiOS預裝了Python,你需要使用其虛擬環境來安裝包。今天出版的最新一期《TheMagPi》雜志刊登了我們文檔負責人NateContino撰寫的一篇實用教程,幫助你入門
零基礎入門:如何在樹莓派上編寫和運行Python程序?
在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是Python程序?
詳解Python的for和while循環
評論