python - 为什么该函数为 None 对象返回 False
问题描述
我有一个函数应该检查传入的对象是否被允许。
为什么此功能因无类型而失败。
def is_valid_object(obj):
allowed_types = [int, bool, None]
return type(obj) in allowed_types
为...卖力:
is_valid_object('i am string')
预期False
=> 回报False
is_valid_object(10)
预期True
=> 回报True
is_valid_object(False)
预期True
=> 回报True
为什么会失败:
is_valid_object(None)
预期True
=> 回报False
解决方案
None
不是类型,它是类型的单个值NoneType
。用于type(None)
访问该类型以将其放入允许的类型列表中:
allowed_types = [int, bool, type(None)]
在我看来,最好只用 显式测试None
单例obj is None
,因为这在意图上更加清晰:
allowed_types = [int, bool]
return obj is None or type(obj) in allowed_types
type(obj) in allowed_types
考虑使用isinstance()
元组第二个参数,而不是 using :
def is_valid_object(obj):
return obj is None or isinstance(obj, (int, bool))
可以简化为:
def is_valid_object(obj):
return obj is None or isinstance(obj, int)
因为bool
是 的子类int
。
演示:
>>> def is_valid_object(obj):
... return obj is None or isinstance(obj, int)
...
>>> is_valid_object(42)
True
>>> is_valid_object(False)
True
>>> is_valid_object(None)
True
>>> is_valid_object('Hello world!')
False
推荐阅读
- asp.net-web-api - 无法在 WEB API .net 框架项目中设置 swagger UI
- excel - 从文本文件 VBA 中提取数据,其中该行包含特定字符串
- c# - 任务异步编程同步运行
- python - 将文件的最后一行添加到文件的开头
- python - 根据性别统计姓名的数量并显示前 10 名
- flutter - 使用 BackdropFilter 会影响 Row Widget 中的其他 Widget - Flutter Web
- google-api - YouTube Data API:从特定频道获取观看次数最多的每日视频
- delphi - 如何编写使控件可见/启用的全局事件处理程序
- firebase - 同一个 Firebase Cloud Functions 帐户的多个开发文件夹
- javascript - 如何让机器人忽略大小写,而仅在句子包含某个单词或短语时才响应它?