Python 3.10+用match case检测各类整数(含Numpy整数)的方法
在Python 3.10及以上版本中判断对象是否为整数(含numpy整数类型)
问题描述
使用Python 3.10新增的match-case语法判断对象类型时,仅用int()只能匹配Python内置的整数,无法识别numpy的int8、int32、int64等整数类型,导致这类对象被误判为非整数。
原测试代码
import numpy as np def func(token): match token: case int(): print('integer') case str(): print('string') print('failed') func('a') >>> string func(1) >>> integer func(np.int64(1)) >>> failed # 预期应返回integer
解决方法
在match-case的case分支中,将所有需要识别的整数类型(包括Python原生int和numpy的各类有符号、无符号整数)用|运算符连接,即可覆盖所有整数类型的匹配需求。如果需要单独处理某一特定numpy整数类型,需将对应case分支放在通用整数匹配分支之前,否则会被通用分支优先匹配。
改进后的代码
import numpy as np def func(token): match token: # 优先匹配单独的np.int64类型 case np.int64(): return 'integer64' # 匹配所有整数类型 case int() | np.int8() | np.int32() | np.uint8() | np.uint32() | np.uint64(): return 'integer' case str(): return 'string' return 'failed'
注:原示例中单独处理
np.int64()的分支位于通用整数匹配分支之后,实际无法被触发,调整顺序后才能生效。
内容的提问来源于stack exchange,提问作者Soerendip
相关产品推荐
相关产品推荐

