亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Python中鍵入提示通用數字類型?

如何在Python中鍵入提示通用數字類型?

qq_遁去的一_1 2022-08-25 16:23:05
如果以前有人問過這個問題,請原諒我,但我找不到任何相關的答案??紤]一個將數值類型作為輸入參數的函數:def foo(a):    return ((a+1)*2)**4;這適用于整數,浮點數和復數。是否有基本類型,以便我可以執行類型提示(實際存在的類型/基類),例如:def foo(a: numeric):    return ((a+1)*2)**4;此外,我需要在集合類型參數中使用它,例如:from typing import Collection;def foo(_in: Collection[numeric]):    return ((_in[0]+_in[1])*2)**4;
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

PEP 3141 為數字添加了抽象基類,因此您可以使用:


from numbers import Number


def foo(a: Number) -> Number:

    ...


查看完整回答
反對 回復 2022-08-25
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

模塊中沒有泛型數值類型,因此您必須使用以下命令創建這樣的類型:typingUnion


from typing import Union


numeric = Union[int, float, complex]


...

要添加對 Numpy 的數值類型集合的支持,請添加到該聯合。np.number


numeric = Union[int, float, complex, np.number]


查看完整回答
反對 回復 2022-08-25
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

當前接受的使用解決方案是相當破碎的,因為正如注釋中指出的那樣,對于像mypy和PyRight這樣的靜態類型檢查器來說,s不是s。這種情況已經討論了多年,但沒有明確的解決方案。NumberintNumber


從相關問題的詳細解釋中提取的另一種可能方法是:


from typing import SupportsFloat as Numeric

它具有以下行為:


from decimal import Decimal

from fractions import Fraction

from typing import SupportsFloat as Numeric


import numpy as np



def f(x: Numeric) -> None:

    pass



# Accepted by mypy/Pyright:

f(123)

f(np.uintc(55))

f(Fraction(-3, 2))

f(Decimal("-3.14"))

f(np.array([1, 2, 3]))  # Should an array be numeric?


# Results in type errors:

f(complex(2, 3))

f("asdf")

這樣做的優點是相當寬松的,除了 。如果您也想包含,只需執行complexcomplex


from typing import SupportsFloat, Union


Numeric = Union[SupportsFloat, complex]

或者等效于 Python ≥3.10 樣式:


from typing import SupportsFloat, TypeAlias


Numeric: TypeAlias = SupportsFloat | complex

也許不幸的是,NumPy數組在某種意義上被認為是數字,但這說明了“什么是數字?”這個問題的晦澀的哲學本質。SupportsFloat


查看完整回答
反對 回復 2022-08-25
  • 3 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號