簡體   English   中英

Mypy - 使用可選的 arguments 為 function 創建一個包裝器

[英]Mypy - creating a wrapper for function with optional arguments

使用 Mypy,除了調用所有變體並省略每個可選參數之外,還有一種實用的方法如何為帶有可選 arguments 的 function 編寫包裝器?

這是一個示例,我需要在兩個變體中調用該方法 - 使用和不使用stopindex參數:

def index_noex(sequence: typing.Sequence, item: typing.Any,
                startindex: int = 0, stopindex: typing.Optional[int] = None
                ) -> int:
    try:
        if stopindex is None:
            index = sequence.index(item, startindex)
        else:
            index = sequence.index(item, startindex, stopindex)
    except ValueError:
        index = -1
    return index

Sequence類型需要 int 作為開始和停止索引的原因是某些序列(如listtuple )的index實現明確禁止將開始或結束索引傳遞為None

鑒於缺少起始索引的語義是搜索從 0 開始,您可以在調用它時指定它,就像您現在正在做的那樣。

缺少結束索引意味着搜索將到達序列的末尾。 並且鑒於搜索將查找stopindex之前的所有元素,您需要將序列的長度作為默認值傳遞。

因此,以下代碼將起作用:

import typing
def index_noex(sequence: Sequence, item: Any,
               startindex: int = 0, stopindex: Optional[int] = None) -> int:
    try:
        if stopindex is None:
            stopindex = len(sequence)
        index = sequence.index(item, startindex, stopindex)
    except ValueError:
        index = -1
    return index

暫無
暫無

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

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