簡體   English   中英

使用類型提示時如何向函數添加默認參數?

[英]How do I add default parameters to functions when using type hinting?

如果我有這樣的功能:

def foo(name, opts={}):
  pass

我想給參數添加類型提示,我該怎么做? 我假設的方式給了我一個語法錯誤:

def foo(name: str, opts={}: dict) -> str:
  pass

以下不會引發語法錯誤,但它似乎不是處理這種情況的直觀方法:

def foo(name: str, opts: dict={}) -> str:
  pass

我在typing文檔或 Google 搜索中找不到任何內容。

編輯:我不知道 Python 中的默認參數是如何工作的,但是為了這個問題,我將保留上面的示例。 一般來說,最好執行以下操作:

def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass

你的第二種方法是正確的。

def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

這輸出

{'opts': <class 'dict'>}

的確,它沒有在PEP 484 中列出,但類型提示是函數注釋的應用,在 PEP 3107 中有記錄。語法部分清楚地表明關鍵字參數以這種方式與函數注釋一起使用。

我強烈建議不要使用可變關鍵字參數。 更多信息在這里

如果您使用打字(在 Python 3.5 中引入),您可以使用typing.Optional ,其中Optional[X]等效於Union[X, None] 它用於表示允許顯式值None 打字。可選

def foo(arg: Optional[int] = None) -> None:
    ...

我最近看到了這個單行:

def foo(name: str, opts: dict=None) -> str:
    opts = {} if not opts else opts
    pass

暫無
暫無

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

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