我已经用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'不是我想要的。
首先,您永远不要使用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] 删除。
我来说两句