如何使用类型建议来指定参数只能从选项列表中获取值
how to use type suggestions to specify an argument can only take values from a list of options
假设一个 Python 函数有一个参数 option
,它只能取特定值,比如 option_a
或 option_b
。如何将其指定为类型注释?这是一种行不通的方法:
def f(x, option: Union['option_a', 'option_b'] = 'option_a'):
if option == 'option_a':
print('option is option_a')
elif option == 'option_b':
print('option is option_b')
else:
raise ValueError(f'invalid option: {option}')
它不起作用,因为 Union['option_a', 'option_b']
实际上会寻找 类 option_a
和 option_b
而不是将它们解释为文字。
为此,您可以结合使用 Union 和 Literal:
def foo(s: Union[Literal['a'],Literal['b']]):
print(s)
foo('a') # good
foo('b') # good
foo('c') # error
假设一个 Python 函数有一个参数 option
,它只能取特定值,比如 option_a
或 option_b
。如何将其指定为类型注释?这是一种行不通的方法:
def f(x, option: Union['option_a', 'option_b'] = 'option_a'):
if option == 'option_a':
print('option is option_a')
elif option == 'option_b':
print('option is option_b')
else:
raise ValueError(f'invalid option: {option}')
它不起作用,因为 Union['option_a', 'option_b']
实际上会寻找 类 option_a
和 option_b
而不是将它们解释为文字。
为此,您可以结合使用 Union 和 Literal:
def foo(s: Union[Literal['a'],Literal['b']]):
print(s)
foo('a') # good
foo('b') # good
foo('c') # error