微软交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 160|回复: 2

开源项目精选:SIX——Python2和3的兼容性库

[复制链接]

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-1-1 17:09:38 | 显示全部楼层 |阅读模式
本文经开源工场授权发表于知乎专栏,原文链接 开源项目精选:SIX——Python2和3的兼容性库 - 开源工场

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中都无法运行。因此不是急于追求兼容性的话并不需要使用这个库。
安装:
https://github.com/benjaminp/six/releases
解压后双击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的兼容语法请访问其官网
http://six.readthedocs.io/
而github上提供的是对SIX库本身的更新与建议。如果你在使用SIX的过程中遇到了问题,不妨在github中提出issue。

本文由 Aurora@开源工场 以 CC-BY-SA 4.0 协议创作发布,转载请注明开源工场作品及来源网址。
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-1-1 17:09:44 | 显示全部楼层
老铁...你这文章复制了两遍。
回复

使用道具 举报

1

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-1-1 17:10:31 | 显示全部楼层
手抖了,谢谢指正
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|微软交流社区

GMT+8, 2025-4-4 23:22 , Processed in 0.242418 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表