• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

six兼容库

Python admin 来源:知乎 9个月前 (12-21) 624次浏览 0个评论 扫描二维码

tensorflow 最近开源了 TF-RANKING,看代码的时候发现反复使用了 six 库,说实话一直在用 python3,基本上没有考虑过兼容性的问题,顺便学习一下,需要学习的东西还很多,加油吧!本文转载而来。

SIX 是用于 python2 与 python3 兼容的库。

它存在的目的是为了拥有无需修改即可在 Python 2 和 Python 3 上同时工作的代码。话虽这么说,但是这并不代表在 Python 3 中引用该库就可以轻松地跑 Python 2 的代码。

实际上,SIX 是重定义了在 python2 和 3 中有差异的函数,例如 dict 的获取全部键值函数:在 Python2 中是

.iterkeys()

在 Python3 中是

.keys()

而在 SIX 中是

six.iterkeys(dict)(当然对应版本的原函数也能够使用)

也就是说,离开了 SIX 库的话你写的代码不论在 Python2 还是 Python3 中都无法运行。因此不是急于追求兼容性的话并不需要使用这个库。

安装:

github.com/benjaminp/si

解压后双击 steup.py 即可。

使用

import six

之后按照 SIX 提供的语法书写即可写出 pyhton2/3 上兼容的代码。

six.PY2/ six.PY3 :检查编译器版本是否为 python2/3

以下是 SIX 提供的兼容语法:

常量定义:

six.class_types

可能的类类型。在 Python 2 中,这包含旧类和新类。在 Python 3 中,这只是新类。

six.integer_types

可能的整数类型。在 Python 2 中,这是 long 或 int,在 Python 3 中同 int。

six.string_types

文本数据的可能类型。这是 Python 2 终点 basestring()和 Python 3 中的 str。

six.text_type

用于表示(Unicode)文本数据的类型。这是 unicode()在 Python 2 和 Python 3 中的 str(Pyhon3 对文本数据进行了整合,默认为 Unicode 文本数据)。

six.binary_type

代表二进制数据的类型。这是 Python 2 中的 str 和 Python 3 中的 bytes。

six.MAXSIZE

像 list 或 dict 这样的容器的最大尺寸。这相当于 Python
2.6 及更高版本(包括 3.x)的 sys.maxsize。请注意,这与 sys.maxint Python 2 非常相似,但并不相同
。sys.maxint 在 Python 3 中没有直接的等价物, 因为它的整数类型的长度仅受限于内存大小。

内置函数定义

1、six.get_unbound_function(meth)

获取非绑定方法的 meth。在 Python 3,不存在非绑定方法,所以这个功能只是返回 meth 不变。用法示例:

from six import get_unbound_function

class X(object):

def method(self):

pass

method_function = get_unbound_function(X.method)six.get_method_function(meth)

2、six.get_method_self(meth)

获取 self 绑定的方法的 meth。

3、six.get_function_closure(func)

等效于 Python 2.6+中的 func.__closure__ 和 Python 2.5 中的 func.func_closure

4、six.get_function_code(func)

获取与 func 关联的代码对象。等效于 Python 2.6+中的 func.__code__ 和 Python 2.5 中的 func.func_code。

5、six.get_function_defaults(func)

获取与 func 关联的默认元组。等效于 Python 2.6+中的 func.__defaults__ 和 Python 2.5 中的 func.func_defaults。

6、six.get_function_globals(func)

获取全局函数。等效于 Python 2.6+中的 func.__globals__ 和 Python 2.5 中的 func.func_globals。

7、six.next(it) six.advance_iterator(it)

获取迭代器 it 的下一个项目。如果迭代器到达末尾,则会引发 StopIteration。等效于 Python
中的 it.next()2 和 Python 3 中的 next(it).Python 2.6 及更高版本具有内置 next 函数,因此只有需要兼容 Python
2.5 版本及以下时才需要该函数。

8、six.callable(obj )

检查是否可以调用 obj。callable 标记已经在 Python 3.2 中有返回,所以只有在支持 Python 3.0 或 3.1 时才需要使用 six 的版本。

9、six.iterkeys(字典,** kwargs )

返回字典键上的迭代器。等效于 Python 2 中的 dictionary.iterkeys()和 Python 3 中的 dictionary.keys()。 kwargs 被传递给底层方法。

10、six.itervalues(字典,** kwargs )

返回字典值的迭代器。等效于 Python 2 中的 dictionary.itervalues()和 Python 3 中的 dictionary.values()。kwargs 被传递给底层方法。

11、six.iteritems(字典,** kwargs )

返回字典项目的迭代器。等效于 Python 2 中的 dictionary.iteritems()和 Python 3 中的 dictionary.items()。 kwargs 被传递给底层方法。

12、six.iterlists(字典,** kwargs )

调用 Python 2 中的 dictionary.iterlists() 或 Python
3 中的 dictionary.lists()。原版的 Python 映射类型没有这种等效; 此方法旨在能够使用像 Werkzeug’s 这样的多值词典。
kwargs 被传递给底层方法。

13、six.viewkeys(字典)

通过字典的键返回视图。等效于 Python 2.7 中的 dict.viewkeys()和 Python 3 中的 dict.keys()。

14、six.viewvalues(字典)

通过字典的值返回视图。等效于 Python 2.7 中的 dict.viewvalues()和 Python 3 中的 dict.values()。

15、six.viewitems(字典)

返回字典项目的视图。等效于 Python 2.7 中的 dict.viewitems()和 Python 3 中的 dict.items()。

16、six.create_bound_method(func,obj )

返回一个方法对象包装 func 并绑定到 obj。在 Python 2 和 Python 3 上,这将返回一个 types.MethodType 对象。这个包装器函数存在的原因是,在 Python 2 中,MethodType 构造函数需要传递 obj 的类。

17、six.create_unbound_method(func,cls )

返回一个未绑定的方法对象包装函数。在 Python 2 中,这将返回一个 types.MethodType 对象。在 Python 3 中,未绑定的方法不存在,并且此包装将简单地返回 func。

18、class six.Iterator

一个用于制作小型迭代器的类。其目的是将其划分子类并提供一种 __next__ 方法。在 Python 2 中,Iterator
有一个方法:next。它只代表 __next__。或许可以仅仅为 __next__ 取别名 next。但是这会对重定义了
__next__ 的子类造成严重影响。Iterator 在 Python 3 中是空的。(实际上,它只是被命名为 object。)

关于 SIX 的函数就介绍到这里。想要了解更多 SIX 的兼容语法请访问其官网

six.readthedocs.io/

而 github 上提供的是对 SIX 库本身的更新与建议。如果你在使用 SIX 的过程中遇到了问题,不妨在 github 中提出 issue。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明six 兼容库
喜欢 (1)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!