gpt4 book ai didi

python - 如何注释可以转换为 bool 值的参数?

转载 作者:行者123 更新时间:2023-12-03 22:04:51 24 4
gpt4 key购买 nike

我开始在 python 3.6 中进入类型提示(又名注释),我无法弄清楚这个特性的一些动态方面。

我写了下面的一段代码,我想添加注释,但不知道如何添加,即使在查看了有关类型提示的文档之后也是如此。

这是函数:

def validate_expression(expression: ?):
try:
assert expression
except AssertionError as e:
...
expression 需要是断言可以处理的任何内容(假设 bool(expression) 对其有效的任何表达式)。

我应该写什么来代替问号?

更新:

我知道大多数 python 表达式都可以转换为 bool 值,但是我编写此代码的上下文是合理期望表达式不可断言的上下文。

在我的案例中的相关示例是 pandas.DataFrame 。运行 bool(pandas.DataFrame()) 引发错误,我有充分的理由期望有人可能会尝试将数据帧传递给验证函数。

更新 2:
按照 Chepner 的评论和回答,我现在明白了:
1. 在绝大多数情况下,任何 python 表达式都会有效地转换为 Boolean,这要么被 typing.Any 覆盖,要么根本不添加注释。
2. 在我感兴趣的边缘情况下,即 bool(pandas.DataFrame()) # --> ValueError ,注释无济于事,因为这是一个运行时错误。
3.如果还有另一个与静态类型提示相关的边缘情况,我不知道。
4. 鉴于相关示例的稀有性/不存在性,没有开箱即用的类型一般只描述转换为 bool 值的能力的质量(类似于 typing.Iterable ),就我而言不值得为解决这种极端情况而向后弯腰(尽管听到相关示例和弯曲解决方案会很有趣!)

最佳答案

任何值都可以在 bool 上下文中使用。除非后代类提供替代定义,否则 object 的实例被视为真值;任何被认为是错误的(如空列表、空 str、空字典、False 本身等)都会这样做,因为它已被专门定义为如此。

因此,您可以使用的唯一类型提示是 typing.Any :

from typing import Any


def validate_expression(expression: Any):
try:
assert expression
except AssertionError as e:
...

这实际上几乎不值得明确说明。

关于python - 如何注释可以转换为 bool 值的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57712347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com