Python中文
首页
教程
问答
标签
搜索
登录
注册
Python类型:从有效值列表动态创建文本别名
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个函数,它验证它的参数,只接受给定有效选项列表中的值。在键入方面,我使用<code>Literal</code>类型别名反映此行为,如下所示:</p> <pre class="lang-py prettyprint-override"><code>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}' ) # ... </code></pre> <p>这违反了DRY原则,因为我必须重写文本类型定义中的有效参数列表,即使它已经存储在变量<code>VALID_ARGUMENTS</code>中<strong>给定<code>VALID_ARGUMENTS</code>变量,如何动态创建<code>Argument</code>文本类型?</strong></p> <p>以下事项不起作用:</p> <pre class="lang-py prettyprint-override"><code>from typing import Literal, Union, NewType Argument = Literal[*VALID_ARGUMENTS] # SyntaxError: invalid syntax Argument = Literal[VALID_ARGUMENTS] # Parameters to generic types must be types Argument = Literal[Union[VALID_ARGUMENTS]] # TypeError: Union[arg, ...]: each arg must be a type. Got ['foo', 'bar']. Argument = NewType( 'Argument', Union[ Literal[valid_argument] for valid_argument in VALID_ARGUMENTS ] ) # Expected type 'Type[_T]', got 'list' instead </code></pre> <p>那么,如何做到这一点呢?或者根本就做不到</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>这里是解决这个问题的方法。但我不知道这是否是一个好的解决方案</p> <pre><code>VALID_ARGUMENTS = ['foo', 'bar'] Argument = Literal['1'] Argument.__args__ = tuple(VALID_ARGUMENTS) print(Argument) # typing.Literal['foo', 'bar'] </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
为什么我的神经网络模型的准确性不能在这个训练集上得到提高?
5 回答
为什么我的神经网络模型的权重变化不大?
8 回答
为什么我的神经网络的成本不断增加?
2 回答
为什么我的神经网络的输入pickle文件是19GB?
10 回答
为什么我的神经网络给属性错误?“非类型”对象没有属性“形状”
4 回答
为什么我的神经网络训练这么慢?
10 回答
为什么我的神经网络输出错误?
4 回答
为什么我的神经网络预测适用于MNIST手绘图像时是正确的,而适用于我自己的手绘图像时是不正确的?
4 回答
为什么我的神经网络验证精度比我的训练精度高,而且它们都是常数?
7 回答
为什么我的私人用户间聊天会显示在其他用户的聊天档案中?
9 回答
为什么我的积分的绝对误差估计值大于积分(使用scipy.integrate.nqad)?
10 回答
为什么我的积层回归器得分比它的组件差?
1 回答
为什么我的移动方法不起作用?
5 回答
为什么我的稀疏张量不能转换成张量
8 回答
为什么我的稀疏张量不能转换成张量?
1 回答
为什么我的程序“停止”了?
10 回答
为什么我的程序一直试图占用所有可用的CPU
4 回答
为什么我的程序不使用指定的代理
4 回答
为什么我的程序不工作(python帮助中的反向函数)?
6 回答
为什么我的程序不工作时,我使用多处理模块
5 回答