使用six库将Python2的项目完全转移到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中都无法运行。因此不是急于追求兼容性的话并不需要使用这个库。
安装:
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的兼容语法请访问其官网
而github上提供的是对SIX库本身的更新与建议。如果你在使用SIX的过程中遇到了问题,不妨在github中提出issue。
使用six库将Python2的项目完全转移到python3的更多相关文章
- six库 解决python2的项目如何能够完全迁移到python3
six库 解决python2的项目如何能够完全迁移到python3 SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工 ...
- 如何统计TFS代码库中的团队项目所占用的磁盘空间
在一个开发团队较多的研发中心,当开发人员的代码数据积累到一定程度,TFS系统的磁盘空间的使用率会逐渐成为系统管理员关注的问题.你可能会关注代码库中每个团队项目,甚至每个目录占用的的磁盘空间.不幸的,即 ...
- 如何将icon图标库引入自己的项目中
---恢复内容开始--- 今天是18年的国庆,趁着国庆的这股开心劲儿,开开心心的写点东西: 第一篇:关于如何将icon图标库引入自己的项目(此方法Taro,微信小程序,支付宝小程序等均适用,不会存在不 ...
- Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...
- python2中的unicode()函数在python3中会报错:
python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...
- 在Eclipse中导入SVN库里的Maven项目
长期使用Intellij 对于Eclipse的东西都生疏了... 做了个小教程说明Eclipse下导入Maven工程的步骤以备不时之需 1. 安装maven插件 a) 下载maven http://m ...
- 轻量级iOS蓝牙库:LGBluetooth(项目中用过的)
LGBluetooth 是个简单的,基于块的,轻量级 CoreBluetooth 库: iOS 6引入了Core Bluetooth,让低功耗蓝牙设备之间的通信变得简单.但如果CoreBluetoot ...
- svn版本库包含多个项目 ; git svn clone; 某一个子项目,有多个分支;
情况描述: 公司的svn版本库,包含了多个项目,每个项目对应于1个文件夹 假设版本库名字为Main,其下的项目用 A项目,对应文件夹A B项目,对应文件夹B 通过git svn clone获取了svn ...
- jQuery的JS库在本地运行项目时提示无法加载
最近公司有个项目在我本地运行时引用本地的jquery.js,浏览器提示无法加载 <script src="/js/newperson/jquery-1.11.3.min.js" ...
随机推荐
- day03-Mybatis中一对一、一对多、多对多查询
一对一查询 一对一的表结构: my_account表: my_user表: 一对一是互相的,A可以找到B,B也可以找到A,方法是一样的,这里就只写一个方向的 通过my_count表找到my_user表 ...
- 机器学习基础系列--先验概率 后验概率 似然函数 最大似然估计(MLE) 最大后验概率(MAE) 以及贝叶斯公式的理解
目录 机器学习基础 1. 概率和统计 2. 先验概率(由历史求因) 3. 后验概率(知果求因) 4. 似然函数(由因求果) 5. 有趣的野史--贝叶斯和似然之争-最大似然概率(MLE)-最大后验概率( ...
- 笔记-javascript
笔记-javascript 1. 简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部 ...
- 学习笔记(13)- decaNLP训练WikiSQL
将自然语言转为sql语句,达到对话查询报表的效果. 参考资料 参考1 https://mp.weixin.qq.com/s/i7WAFjQHK1NGVACR8x3v0A 语义解析.SQL查询生成与语义 ...
- BKP寄存器
STM32的BKP: 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据.他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电.当系统在待机模式下被唤醒,或系统复位或 ...
- 安装哪个python版本比较好
四.电脑是32位选择第一个,64为选择第二个
- YUV颜色编码格式
YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色,而色度又定义了颜色的两个方面:色调和饱和度. 其中: Y 表示明亮度(Luminance.Luma) U 和 V 表示色度(Chromin ...
- 微信小程序表单弹窗实例
开发中有时候会碰到需要一个表单弹窗来处理数据的提交处理,然后这次发布的这套源码就是解决这个问题! <!--button--> <view class="btn" ...
- 5.Nginx
1.Nginx 安装 (1) 安装gcc (yum install gcc) 备注:可以输入gcc -v 查询版本信息,看系统是否自带安装 (2) 安装pcre (yum install pcre-d ...
- Tomcat的部署、虚拟主机及优化
Tomcat的部署.虚拟主机及优化 文章目录 Tomcat的部署.虚拟主机及优化 前言 1.Tomcat的名称由来 2.Apache Tomcat 5-7版本差异 2.1Apache Tomcat5. ...