起因 在用python2解释器运行python3代码的时候,出现了bug。debug后发现是因为python3中的/ 原本表示 精确除法,却被python2解释器解释成了 地板除,最终导致了错误。...因此我上网查阅了相关资料,并总结如下表: 总结 version / // py2 整数除法时为地板除,浮点数除法时为精确除 地板除 py3 精确除法 地板除 Test x = y = 10 x /=
问题 Python2已经停止维护,但由于历史原因,我们不得不在接下来的几年中,习惯两种语言依然共存的状况。 如果能习惯性地写出同时兼容py2与py3的代码,就可以减少很多不必要的踩坑。...前言 博主研一时用py2,研二后改用py2。 现在工作了,每次都要在本地写适配py3的代码,放到只能适配py2的服务器上去跑。对于如何写出兼容py2与py3的代码,积累了一点踩坑心得。...中是精确除法;在py2中只有浮点除时才为精确除,否则为地板除。...(又称“内建函数”,包括reduce、filter、map等等)在py2下返回的是list,在py3下返回的却是一个函数对象。...文件路径直接在当前工作目录下时:py2和py3都可以通过如下方式来导入相同目录下的库文件:import util 文件路径不直接在当前工作目录下时:py3导入相同目录下的库文件就不能再那么写了,而是要改一下
5、py2中有Unicode数据类型,py3中没有,字符串都是Unicode格式的str数据类型。6、py2中bytes可以是二进制,也可以是str,py3中bytes只是十六进制表示的二进制。...(直接运算会显示long型,因为2**31会先运算,是long型)8、用户输入不同,py3中只有input()输出都是str和py2中的raw_input()一样,而py2中也有input(),输入字符串要带引号...,数字输出相应的数字类型9、Py2以前没有布尔型,0表示False,用1表示True;Python3 把 True 和 False 定义成关键字,它们的值还是 1 和 0,可以和数字运算。...11、py2的除法中不是浮点数则只返回商,py3除法返回值正常。12、py3运行程序可以识别相同目录下普通文件夹中的模块,py2只能识别文件夹标识后的包中的模块。...仅py3中有类的mro函数方法,输出继承父类的顺序列表。
中的unicode字符输出到文件或者传输到网络上,需要先把unicode字符转换为str类型,py2的encode方法就是编码unicode字符到指定字符类型,因为py2默认编码方式为unicode,所以当使用...encode方式时,传入的参数就是目标编码格式,比如utf-8或者gbk等,当py2把一个字符存入到文件的时候,首先会判断字符的类型,如果是str,则直接存入文件,如果是Unicode类型,则先要转换为...而decode是把str转换为unicode字符,刚说了py2的默认格式是unicode,所以decode的时候,需要传入的参数名字就是字符的现在的编码的编码方式,比如utf-8或者gbk,当传入的参数名字不是现在编码方式的时候...除法问题 在py2中两个整数除法的得到的是0,要得到浮点数,则除数或者被除数有一个是浮点数,而在py3中,整数相除可以得到浮点数。但是如果要在py3中整数相除也得到0的话,就要使用//,而不是/。...I/O方法,xreadlines() 在py2中,一个文件对象有xreadlines()方法,返回一个迭代器,每次只读取一行数据,可以使用for循环输出结果。在py3中删除了这个方法。
前言 有赞的数据库管控平台是基于Python 2(py2)开发的,目前已经升级到python3(py3) 版本,主程序基于python 3.6.x。写本文是梳理一下 两个版本之间的语法,函数等差异。...py3 与py2 大多数不兼容的地方主要是:移除二义性和错误修正。可以理解为py3 总体上更加严格和准确。...编码 py2 中的默认编码是ASCII 码,py3 默认编码是 Unicode(utf-8),带来的一个好处是我们不需要在文件头部写 # coding=utf-8 了。...py3 中如果没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常. py2 In [23]: fl= "/Users/yangyi/t" In [24]: f=open...,结果是浮点型 ;%表示取余,// 结果取整。
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E...-)记数法] %g(%G) 浮点数不显无意义的零”0″ %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 e.g. 0123 %x(%X) 十六进制整数0f(0F) e.g...3.格式字符串(格式) [标志][输出最少宽度][.精度][长度]类型 “%-md” :左对齐,若m比实际少时,按实际输出。...e.g. “%3.1f” 输入3852.99 输出3853.0 长度:为h短整形量,l为长整形量 printf的格式控制的完整格式: % – 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明...用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
个人感觉的差异有: 1、py3默认就是unicode,终于在写程序时可以不用再考虑中文支持的问题。 py3中字符串不再分str和unicode两种类型,统统都是unicode类型。...py2则是ascii,处理中文要考虑编码,罗哩罗嗦,麻烦的要命!...2、除法“/”在py3中返回浮点数。...算式3/4在py3中结果是0.75,在py2.7中是0,因为后者是看作整数除法,要得到结果必须将一个整数改为浮点类型: 3/4.0,3.0/4,3.0/4.0,任选一种都可以求出0.75。...3、输入输出的变化 【3.1】为print解决输出的一致性问题,py3中将之改为函数调用格式: print "hello" 无法通过,必须被修改为 print("hello") 【3.2】
一、常量 Python中的数字常量支持多种格式,我们常见的常量是整型和浮点型。...py2版本中的分数运算 ? py3版本中的分数运算 小伙伴是不是感觉到有点儿懵逼?...在py2中整数除法运算的结果仍然为整数,是取整,而不是四舍五入噢。当参与运算的数中有一个为浮点数的时候,Python会自动将另一个数字隐性的转换为浮点数,因此在第二个运算中得到的结果为浮点数。...在py3中,除法的意义就和我们平时见到的除法是一致的了,而不是取整。换句话说,除法的除数和被除数在py3中都先做了浮点数转换,然后相除,最终得到的商是浮点数。...希望小伙伴们都好好掌握,在分数运算部分尤其要注意掌握py2和py3版本中的不同,这个知识点在面试题中经常会碰到,其实这个部分也算是两个版本的区别之一。
一、常量 Python中的数字常量支持多种格式,我们常见的常量是整型和浮点型。...py2版本中的分数运算 py3版本中的分数运算 小伙伴是不是感觉到有点儿懵逼?...在py2中整数除法运算的结果仍然为整数,是取整,而不是四舍五入噢。当参与运算的数中有一个为浮点数的时候,Python会自动将另一个数字隐性的转换为浮点数,因此在第二个运算中得到的结果为浮点数。...在py3中,除法的意义就和我们平时见到的除法是一致的了,而不是取整。换句话说,除法的除数和被除数在py3中都先做了浮点数转换,然后相除,最终得到的商是浮点数。 ...希望小伙伴们都好好掌握,在分数运算部分尤其要注意掌握py2和py3版本中的不同,这个知识点在面试题中经常会碰到,其实这个部分也算是两个版本的区别之一。
(具体时间上有不同说法,1月1号、4月、8月……但这个差别意义不大了) 从我开始做 Python 编程教学的工作开始,就始终在解答读者一个问题:我到底学 py2 还是 py3?...虽然结论已经很明确,但我还是想客观地说一句:对于学习者来说,学 py2 还是 py3,真的没有太大差别。...之所以这会成为一个问题,主要原因在于: 在新手刚学习时就会接触到的输入输出 input 和 print 上,py3 就相较 py2 做了改动,以至于让很多没注意版本的学习者一上来就踩了大坑,进而以为两个版本有巨大差异...py3 的确不兼容 py2,而 Python 牵涉的第三方库又众多,这让很多程序员头疼,于是在网上大肆吐槽调侃版本间的问题,让不知内情的人望而生畏。...哪怕在停止更新 py2 的 2020 年,你照着一本 py2 的教程,安装上 2.7 的 Python,一样可以学会 Python 的使用。在之后转用 py3 进行开发,也只是分分钟的事情。
整数与浮点数在内存中的存储机制 在计算机科学中,整数和浮点数是我们经常处理的两种数据类型。它们在内存中的存储方式决定了它们可以表示的范围、精度以及如何进行数学运算。...整数在内存中的存储 整数在内存中的存储通常使用二进制补码形式。二进制补码是一种表示整数的方法,它使得加法和减法操作变得简单,因为这两种操作在二进制补码形式下可以共享相同的电路。...浮点数在内存中的存储 浮点数的存储要复杂得多,因为它们需要表示小数点和指数的变化。在计算机中,浮点数通常遵循IEEE 754标准,这是一种广泛接受的浮点数表示方法。...IEEE 754标准下的浮点数由三部分组成:符号位、指数位和尾数位。 符号位:和整数一样,用于表示浮点数的正负。 指数位:用于表示浮点数的大小。它实际上表示的是二进制小数点应该移动的位置。...尾数位:也称为尾数或有效数字,用于表示浮点数的精确值。这是小数点后的二进制表示。 IEEE 754标准定义了单精度(float)和双精度(double)两种浮点数格式。
最新在对接某瓜支付签名时偶尔会出现签名失败的问题,于是进行整体复盘,先看看对方的sdk中最重要的一段代码:JavaString data = createLinkString((JSONObject)JSONObject.toJSON...是的,很完美,但是在处理浮点型时会有问题,举个FastJson栗子:JavaHashMap body = new HashMap();body.put("price...:{"price":0.1}震惊吧,0.10输出0.1,反观JackSon一切正常,国人的东西还是太浮躁了。...那么怎么解决呢,其实只需要把浮点数转换为字符串类型即可:JavaHashMap body = new HashMap();body.put("price", "0.10...");String json = com.alibaba.fastjson.JSON.toJSONString(body);System.out.printf(json)输出信息:{"price":"0.10
写py2、py3兼容的代码 用到一段时间python,之前也重点复习了一次python3。但工作中运行环境是python2.7,于是要求写出py2、py3都兼容的代码。...下面将涉及到的几点技巧列举出来以备忘。 print函数 py3中print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。...,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。...这里倒没有异议了,本来就常见原来py2那种奇葩写法很奇怪,只使用py3的写法就可以了。...标准库及函数名称变更 py3重新组织了一些标准库及一些函数,为了保证在py2、py3下代码都工作正常,这里使用six模块提供的兼容功能。
1背景 py2官方已不在维护, 所以将项目升级到py3, 但是项目也不是一行两行的事, 并且项目还在使用, 所以必须要兼容py2, 升级到py3 所以就有了以下常见问题, 比如, py2的内置函数...py3已不使用, py2的内置模块py3已经改名............输出 # py2 输出 (, ) 2....'> # # py2 输出 # # # py2 输出 # <module 'copy_reg' from '/Library/Frameworks/Python.framework
1.默认解释器编码: py2,ascii py3,unicode 2.输入: py2,raw_ input py3,input 3.输出: py2, print "内容” py3..., print('内容') 4.整数长度 py2,int + long py3, int 5.整除 py2, 5/2=2 py3, 5/2=2.5 6.内涵 Python2:1.臃肿,源码的重复量很多...7.输出中文的区别 python2:要输出中文 需加 # -*- encoding:utf-8 -*- Python3 : 直接搞 8.指定字节 python2在编译安装时,可以通过参数--...init__ 区别:py2 : 必须有__init__ py3:不是必须的了 11.不相等操作符""被Python3废弃,统一使用"!...Py2项目如何迁移成py3? 使用python3 中自带的2to3脚本在终端中输入一下命令
版本与python3.6版本 环境变量的设置 三、编码 1.初识编码: ASCII 只能编写英文,只能用1字节=8位来表示,共有2**8=256种 Unicode ——万国码...utf-8 是Unicode的压缩,把多余的0省掉,最少使用1字节=8位,占位是8的倍数。...3.py2&py3的区别: py2: 默认解释器编码是ASCII 指定py2使用utf-8需要在代码头部加入一行代码:#--coding:utf-8-- py3:默认解释器编码是utf-8...四、输出 print('输出内容') py2与py3的区别:py2——print+空格+'你好' py3——print...需要使用单引号、双引号或三引号 2.数字类型或整型 3.布尔类型:true/false """ """ 3引号支持换行 六、变量 1.创建一个变量,给变量赋一个值,变量与值用
python2和python3 的一些差异: * print函数变了,python3中的print函数必须要加括号 * xrange函数合并到了range中,2到5的序列可以直接用range(2, 5)...表示 * py2中输入使用raw_input()函数,py3中使用input()函数 * py2里中文编码易出错,从csv文件中读取的文本和hdfs中以json格式存储的中文文本有时匹配不上;据说在py3...beijing’] [‘北京’, ‘beijing’] 两个环境都使用了utf-8编码,足见python3对中文编码的支持更好 * py2中的‘/’符号默认返回的是整数结果, py3中的’/’符号返回的是有理数结果...4.列表是有序的对象集合,字典是无序的对象集合;在一个字典中,键(key)必须是唯一的。 5. 数字用 ** 来表示幂次操作。 5 ** 2 #5的平方 笔记二 1....定义类的时候常常看见’self’关键字,这个关键字代表的是类的实例,代表当前对象的地址。
由于经常会遇到一些需要进行兼容的问题,因此觉得需要一篇博客来记录一下。 说明:本篇文章的 py2 特指 python 2.7+ 版本,py3 特指 python 3.5+ 及以上版本。...判断 python 版本的方法 被改名模块 print base64 判断 python 版本的方法 既然是为了让代码兼容 py2 和 py3,那么很多时候必须先知道当前执行脚本的 python 版本是什么...\n") raise 2、通过 sys.version_info 获取版信息 import sys PY2 = sys.version_info[0] == 2 PY3 = sys.version_info...world') #py3 >>> print("hello", "world") hello world 这样就很明显了,python2 是把括号的内容当做一个元祖输出的。...解决二者兼容的方法是在代码中引入一个模块,这样两个版本都可以使用带有括号的 print,并且输出也是一致的。
原因是 py2 入队的任务, 如果用的是 msgpack 作序列化, worker 是py3 的话, 解出来函数参数名都会变成 bytes, celery 内部对参数 unpack (**kwargs)...list 的时候不能删除 item), 需要用 list(d.keys()) 获得 key 的拷贝. division py2 里的除法默认是 floor division, py3 里是 true...division, from __future__ import division 可以将py2 里的除法变成 py3 的行为....e: pass print(e) py2 里可以用 e.message, py3 里没有了, 需要访问message, 直接用 str(e), 在py2/3 中都 work....hash 实现输出的是一个固定数值, python3 中的 hash 算法改了, 并且默认开启random seed, 每次进程重启都会被重置, 所以每次重启进程 hash 的输出结果都不一样.
有人可能就有疑问了,我在 Python2 中明明也看到当函数使用: # py2 print("hello") # 等价 print ("hello") #py3 print("hello") 然而...从输出结果来看是一样的,但本质上,前者是把 ("hello")当作一个整体,而后者 print()是个函数,接收字符串作为参数。...# py2 >>> print("hello", "world") ('hello', 'world') # py3 >>> print("hello", "world") hello world 这个例子更明显了...,在 py2 中,print语句后面接的是一个元组对象,而在 py3 中,print 函数可以接收多个位置参数。...# py2 >>> sys.getdefaultencoding() 'ascii' # py3 >>> sys.getdefaultencoding() 'utf-8' 网上不少文章说通过修改默认编码格式来解决
领取专属 10元无门槛券
手把手带您无忧上云