gpt4 book ai didi

python - 统一python 2/3版本支持类型

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:16 25 4
gpt4 key购买 nike

我有一些用 python 2.7.x 编写的代码,我试图使其与 python 3.x 兼容。我已经解决了将代码转换为在两个版本下工作的大部分问题,但需要有关处理 int/long 类型的建议。

许多统一 int 和 long 类型的工作发生在更早的 (2.4.x) 版本中,并且在 V3 中完全消除了这种区别('1L' 格式不再有效)。同时,修改了类型模块以删除对已内置类型的引用,并删除了多余的“long”内置类型。

所以在 V2.x 下我仍然需要支持这样的代码:

if type(var) == int or type(var) == long :
do_stuff

if type(var) == int :
do_int_stuff
elif type(var) == long :
do_long_stuff

但是在 V3 中没有内置的 long 类,也不需要与普通 do_int_stuff 不同的 do_long_stuff。不再定义内置类类型变量“long”,因此此代码将失败并出现 NameError。

一个简单的解决方案是在 v3 下将“long”定义为 None 或其他一些无意义的类型,理解 type(var) != long 对于任何 var。在 v2.x 下定义的 long 内置类类型将保持不变。

if sys.version_info.major == 3 :
long = None

None 是否是最好的使用值(value)?在我的例子中,设置“long = int”不是我想要使用的。

最佳答案

首先,你不应该使用type(obj) == type_obj;使用 isinstance() function , 总是。您很少需要忽略子类,如果确实需要忽略子类,您可以使用 type(obj) is type_obj 代替。

isinstance() 可以接受类型的元组:

isinstance(obj, (int, long))

然后允许您使用变量:

try:
integer_types = (int, long)
except NameError:
integer_types = int

if isinstance(obj, integer_types):

请注意,我在这里根据 NameError 替换了 integer_types 定义,而不是在版本测试中。现在您的代码与 Python 2 和 3 以及任何其他没有 long 类型的假设 Python 构建兼容。

关于python - 统一python 2/3版本支持类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28436812/

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