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

凯夫

我已经用python 2.7.x编写了一些代码,试图与python 3.x兼容。我已经解决了将代码转换为在两种版本下都可以使用的大多数问题,但是希望获得有关int / long类型的建议。

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

因此,在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,不需要很长的内置类,也不需要与常规do_int_stuff不同的do_long_stuff。内置的类类型变量'long'不再定义,因此此代码将失败,并出现NameError。

一个简单的解决方案是在v3下将'long'定义为None或其他废话类型,同时了解type(var)!= long对于任何var。v2.x下定义的长内置类类型将保持不变。

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

无是使用的最佳价值吗?就我而言,设置'long = int'不是我想要的。

马丁·彼得斯(Martijn Pieters)

首先,您永远不要使用type(obj) == type_obj; 始终使用isinstance()功能很少需要忽略子类,如果确实需要忽略子类,则可以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):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式在python中转换统一版本

来自分类Dev

为什么类型/类统一主要在python中

来自分类Dev

如何在集线器中删除对旧统一版本的引用,以便重新安装该版本

来自分类Dev

是否可以在 iTunes for app 中更改下一版本的设备类型?

来自分类Dev

防止类型统一

来自分类Dev

防止类型统一

来自分类Dev

类型中要统一的类型变量

来自分类Dev

类型中要统一的类型变量

来自分类Dev

如何统一这些类型?

来自分类Dev

统一记录类型

来自分类Dev

Android:我的应用程序的第一个版本支持2.3,现在我计划在下一版本中仅支持4+

来自分类Dev

统一宏中的通用类型

来自分类Dev

在OpenGL中设置统一

来自分类Dev

OpenTK中的布尔统一

来自分类Dev

自从迁移到Xamarin.IOS中的统一版本以来出现错误

来自分类Dev

核心数据迁移:在下一版本中,我应如何将数据类型从bool更改为int

来自分类Dev

核心数据迁移:在下一版本中,我应如何将数据类型从bool更改为int

来自分类Dev

更新nuget包以支持xamarin统一

来自分类Dev

更新nuget包以支持xamarin统一

来自分类Dev

多参数类型类的类型统一

来自分类Dev

降低Python3版本

来自分类Dev

在python(使用bs4)中跨多个非统一表返回数据迭代一次吗?

来自分类Dev

TextView中的统一文本换行

来自分类Dev

开放对象类型过早统一

来自分类Dev

递归数据类型的统一

来自分类Dev

Isabelle类型统一/推断错误

来自分类Dev

注册类型时出现统一异常

来自分类Dev

开放对象类型过早统一

来自分类Dev

下一版本中的Qt许可证