簡體   English   中英

Python 靜態類型變量

[英]Python Static Typing Variables

Python 是動態類型的,因此它可以存儲不同的類型。 這使得代碼更容易編寫,但也更慢。

我知道像 Cython 這樣的東西存在。 但是,是否可以僅使用允許我們使用靜態類型變量的 Python(內置函數或某些庫)來使代碼運行得更快?

Python 是動態類型的,因此它可以存儲不同的類型。 這使得代碼更容易編寫,但也更慢。

您似乎認為 Python由於其動態特性而運行緩慢。 我會說這掩蓋了一個基本的誤解:速度和性能不是語言的特性,而是它的實現。 是的,語言的屬性可能會使編寫高性能實現變得更容易或更難 - 但這僅對實現該語言的人重要。

例如,存在幾個非常快速的 JavaScript 實現。 簡而言之,一些非常聰明的人付出了很多努力來榨取它的每一點性能——盡管由於語言的特性及其高度動態的性質,這樣做非常困難。 因此,許多人現在認為它是一種“快速”語言。

那么,為什么 Python 很慢? 可能是因為您正在使用它的參考實現 CPython,它確實是一個相當緩慢和直接的解釋器。 另一方面,PyPy 提供了一個現代的即時編譯器,使原始的、重復的 Python 代碼運行更快。

哦,即使是“快速”語言的實現現在也執行許多技巧,無論是否提前執行編譯。 C 編譯器或 JVM 為使代碼快速運行所做的工作沒有什么直接的。

(Lua 可能是一個不同的情況,但我對此知之甚少。)

NumPy 包是靜態類型的 [1]。 此外,NumPy 支持的數據類型比 Python 2 多

[1]:Chin, L, Dutta, T. NumPy Essentials(Kindle Location 360)。 包出版。 Kindle版。

根據此博客,您可以在許多情況下通過更具體地了解您的類及其數據成員並使用支持 JIT 的實現(如 PyPy)來提高速度。 因此,根據博客作者的說法,您可以更好地指定您的類,例如:

class Rectangle(object):
    __slots__ = ('x', 'y', 'width', 'height')

    def __init__(self, x, y, width, height):
        self.x, self.y, self.width, self.height = x, y, width, height

這會使代碼運行得稍微快一些,因為取決於 python 實現,解釋器可能會使用這些信息來使用更好的底層數據結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM