在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Python/ python 泛型注釋的不理解?

python 泛型注釋的不理解?

本人python新手, 在翻閱pep484, 以及mypy文檔的時(shí)候有遇到了一點(diǎn)不懂的地方, 如下:

# 文檔實(shí)例如下:
from typing import TypeVar, Generic

T = TypeVar('T')

class Stack(Generic[T]):
    def __init__(self) -> None:
        # Create an empty list with items of type T
        self.items: List[T] = []

    def push(self, item: T) -> None:
        self.items.append(item)

    def pop(self) -> T:
        return self.items.pop()

    def empty(self) -> bool:
        return not self.items

然后文檔下面有這樣一段話:

The Stack class can be used to represent a stack of any type: Stack[int], Stack[Tuple[int, str]], etc

然后給出了一段實(shí)例用法:

# Construct an empty Stack[int] instance
stack = Stack[int]()
stack.push(2)
stack.pop()
stack.push('x') # Type error

我個(gè)人的理解是:

  • T表示任意類型
  • Stack[int]表示Stack只能存儲(chǔ)int類型, 所以下面?zhèn)魅肓艘粋€(gè)字符串就報(bào)錯(cuò)

疑惑是:

  • 不知道上面的理解對(duì)不對(duì)
  • 如果我在一開始就確定好堆里面的數(shù)據(jù)類型就行了為什么要?jiǎng)?chuàng)造一個(gè)泛型?
  • 泛型在python中有沒有什么使用場(chǎng)景, 本人沒有接觸過java之類的語(yǔ)言, 因此覺得就看看例子感覺特別抽象, 也不知道在上面場(chǎng)景下如何使用.

本人剛剛接觸python, 若有理解錯(cuò)誤的地方還請(qǐng)多多包涵, 望有前輩能夠解惑!

回答
編輯回答
硬扛
  • 對(duì)
  • 如果不用泛型,那我們就需要IntStack/StrStack。如果只是基本類型還好,麻煩的是以后我們還得要TupleIntStrStack/TupleIntIntStrStrStack/MyLittleClassStack/MyLargeClassStack,每個(gè)都得重新聲明,太麻煩
  • 泛型主要用于容器,比方說棧,隊(duì)列,我現(xiàn)在最常用的容器是concurrent.futures.Future
  • 泛型在強(qiáng)類型語(yǔ)言(Java)里用的還是非常廣泛的,但mypy的使用率實(shí)在低下,所以看起來泛型沒什么使用場(chǎng)景。如果強(qiáng)制每個(gè)程序(尤其是庫(kù))都要有類型標(biāo)識(shí),例子就多了。
2018年5月20日 00:34