第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

嵌套字典上的參數(shù)太多或太少

嵌套字典上的參數(shù)太多或太少

弒天下 2023-07-11 17:11:00
dict我正在嘗試在具有多個將函數(shù)綁定到它們的字段的類型中添加類型提示。例如from typing import Dict, Callable, Any, Uniondef fn():  print("Hello World")def fn2(name):   print("goodbye world", name)d = {  "hello" : {    "world": fn  },  "goodbye": {    "world": fn2  }} # type: Dict[str, Dict[str, Union[Callable[[], None], Callable[[str], None]]]]d["hello"]["world"]()d["goodbye"]["world"]("john")我遇到的問題是每當(dāng)我嘗試運行mypy(v0.782)時它都會拋出錯誤:test2.py:17: error: Too few argumentstest2.py:18: error: Too many arguments顯然,從函數(shù)定義和類型提示中可以看出,我已經(jīng)傳遞了正確的參數(shù)。我顯然錯過了一些東西,導(dǎo)致它拋出錯誤。Union但是,以下內(nèi)容有效,所以我懷疑它與輸入類型提示有關(guān)。from typing import Dict, Callable, Any, Uniondef fn():    print("Hello World")d = {"hello": {"world": fn}}  # type: Dict[str, Dict[str, Callable[[], None]]]d["hello"]["world"]()
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

讓我提醒您,當(dāng)使用 時未考慮以下約束時,就會出現(xiàn)問題中描述的問題Union

僅當(dāng)操作對每個聯(lián)合項都有效時,它們才對聯(lián)合類型有效。這就是為什么通常需要使用isinstance()檢查來首先將聯(lián)合類型縮小為非聯(lián)合類型。這也意味著建議避免使用union類型作為函數(shù)返回類型,因為調(diào)用者可能必須isinstance()在對值進行任何有趣的操作之前使用。[1]

作為解決方法,我建議使用帶有可選參數(shù)的單個函數(shù)。我用來Protocol定義帶有可選參數(shù)的回調(diào)類型,該參數(shù)無法使用Callable[...]

from typing import Protocol, Optional, Dict



class Fn(Protocol):

    def __call__(self, name: Optional[str] = None) -> None:

        ...



def fn(name: Optional[str] = None) -> None:

    if name is None:

        print("Hello World")

    else:

        print("goodbye world", name)



d: Dict[str, Dict[str, Fn]] = {

    "hello": {

        "world": fn

    },

    "goodbye": {

        "world": fn

    }

}


d["hello"]["world"]()

d["goodbye"]["world"]("john")

[1] https://mypy.readthedocs.io/en/stable/kinds_of_types.html#union-types


查看完整回答
反對 回復(fù) 2023-07-11
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號