Python中如何不使用循环检查函数所有传入参数是否为列表类型
检查任意数量参数是否全为列表的实现方案
直接用all()搭配生成器表达式即可实现需求,不需要手动编写显式循环,all()内部会完成遍历判断逻辑。
两种校验场景的实现
1. 允许列表子类实例通过校验(绝大多数场景推荐)
用isinstance()做类型判断,会兼容list的子类实例:
def func(*args): # 只要有一个参数不是列表/列表子类就抛出类型错误 if not all(isinstance(arg, list) for arg in args): raise TypeError("所有传入参数必须为列表类型") # 后续业务逻辑
2. 严格要求必须为原生list类型,不接受子类
用type()做严格类型匹配:
def func(*args): if not all(type(arg) is list for arg in args): raise TypeError("所有传入参数必须为原生list类型") # 后续业务逻辑
等价的any()实现写法
如果你更习惯用any(),也可以反过来判断是否存在非列表参数,逻辑和上面完全等价:
if any(not isinstance(arg, list) for arg in args): raise TypeError("所有传入参数必须为列表类型")
测试示例
- 合法调用:
func([1,2], ["a","b"], []),不会抛出异常 - 非法调用:
func([1,2], 3, "test"),会触发TypeError
内容的提问来源于stack exchange,提问作者ess3nt1al
相关产品推荐
相关产品推荐

