相关疑难解决方法(0)

键入可能值列表的提示

我有一个可以采用固定值列表的函数:例如

def func(mode="a"):
   if mode not in ["a", "b"]:
      raise AttributeError("not ok")
Run Code Online (Sandbox Code Playgroud)

有没有办法输入提示它只能是这两个值之一?

python type-hinting

14
推荐指数
1
解决办法
1万
查看次数

什么是正确的类型提示提示只返回一组特定值的函数?

我有一个只能返回的函数a,b或者c它们都属于类型,T但是我想将它的一部分签名这个事实,因为它们在函数的上下文中具有特殊含义,我是如何做到的?

目前我用这个

def fun(...) -> "a or b or c":
    #briefly explain the meaning of a, b and c in its docstring
Run Code Online (Sandbox Code Playgroud)

那是正确的吗?

我知道我可以做到这一点

def fun(...) -> T:
    #briefly explain the meaning of a, b and c in its docstring
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我想在签名中表达该函数只返回那些特定的值

python literals type-hinting python-3.x

8
推荐指数
2
解决办法
2396
查看次数

Python typing: Dynamically Create Literal Alias from List of Valid Values

I have a function which validates its argument to accept only values from a given list of valid options. Typing-wise, I reflect this behavior using a Literal type alias, like so:

from typing import Literal


VALID_ARGUMENTS = ['foo', 'bar']

Argument = Literal['foo', 'bar']


def func(argument: 'Argument') -> None:
    if argument not in VALID_ARGUMENTS:
        raise ValueError(
            f'argument must be one of {VALID_ARGUMENTS}'
        )
    # ...
Run Code Online (Sandbox Code Playgroud)

这违反了 DRY 原则,因为我必须在我的 Literal 类型的定义中重写有效参数列表,即使它已经存储在变量 中VALID_ARGUMENTS给定变量如何Argument动态创建Literal 类型VALID_ARGUMENTS …

python python-typing

8
推荐指数
2
解决办法
1474
查看次数

将可迭代对象解包到下标/类型提示中?

假设我需要运行时和类型提示的值列表:

from typing import Literal

valid_values = ('foo', 'bar', 'baz')

def f(arg: Literal[???]):
    assert arg in valid_values
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式解压valid_valuesLiteral类型提示中,例如Literal[*valid_values](这是无效的语法)?重复这些值将不是最佳的。

python type-hinting python-3.x

5
推荐指数
0
解决办法
297
查看次数