当前位置: 首页 > 技术支持 > 服务器维护>> Python2(python20和30可以兼容吗)

Python2(python20和30可以兼容吗)

Python2(python20和30可以兼容吗)

目录:

  • 1、Python2 与 Python3的pip安装指定
  • 2、为什么python有两个不同的版本,并且语法规范什么的都不相通呢?
  • 3、python2.0与python3.0的区别。
  • 4、python2和python有什么区别
  • 5、pycharm2023.3.1python2语法错误
  • 6、python2和python3的区别

Python2 与 Python3的pip安装指定

当系统环境或虚拟环境中安装了python2和python3时,使用pip安装模块时可能会安装在python2的包目录下,于是就会出现在python3下调包出现报错。

除了使用pip2或pip3来指定,也可以使用python命令来指定,譬如:

python3 -m pip install some_module 。

参考:

How to override the pip command to Python3.x instead of Python2.7?

为什么python有两个不同的版本,并且语法规范什么的都不相通呢?

Python有两个主要版本——Python 2和Python 3。这两个版本有一些重要的区别,尽管它们都是Python语言。Python 2最初于2000年发布,Python 3最初于2008年发布。

Python 2和Python 3的主要区别在于Python 3改进了许多Python 2的语言特性,并且不兼容Python 2。这意味着,如果你在Python 2中编写的代码,在Python 3中可能无法正常运行。反之亦然。这就是为什么Python有两个版本的原因,因为Python 3是Python 2的改进版本,但它们之间存在不兼容性。

尽管Python 3改进了许多Python 2的特性,但它们之间的语法规范仍然不相同。例如,在Python 2中,在打印语句中,必须使用括号包围打印的内容,如下所示:

print "Hello, World!"

在Python 3中,打印语句不需要括号,如下所示:

print("Hello, World!")

因此,Python 3与Python 2之间的语法差异就是这个区别的一个例子。这些差异使得Python 2和Python 3之间的代码不兼容,因此出现了两个不同的版本。

python2.0与python3.0的区别。

Python2.0与Python3.0主要区别在于以下几个方面:

1、输出

Python2.0使用print关键字进行输出,比如:print “Hello”;

Python3.0使用print()函数,比如print("Hello")。

2、输入方面

Python2.0使用raw_input()函数,比如:name=raw_input("请输入你的名字:");

Python3.0使用input()函数,比如:name=input("请输入你的名字:")。

3、字符串的编码格式

Python2.0默认采用ASCII编码对输入的字符串进行编码;

而Python3.0默认采用Unicode编码对字符串进行编码。

4、格式化字符串的方式

Python2.0用%占位符进行标准化格式输出字符串,比如:“Hello,%s" % ("World");

Python3.0用format()函数,比如:”Hello,{}“.format("World")。

5、源文件的编码格式

Python2.0默认采用ASCII,因此使用中文时要在源文件开头加上一行注释:# -- coding: utf-8 --;

Python3.0默认采用utf-8。

python2和python有什么区别

很多初学者刚开始学python的时候,一定都遇到过这个问题,python的世界有2个版本,python2 和 python3 ,而且有些语法还不兼容.怎么办~~到底应该选择哪个版本来开发呢?好,今天我们就来聊聊这个话题.

1.Python2和Python3的历史背景

Python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎大名的java是在1995发行的, 红了几十年).

但是Python真正成名比java晚了很多年,其实也主要是应用领域的时代变迁.(猜测为啥,对了大数据的出现)

Python2是Python里面一个非常重要的版本,最早的版本是从2001的时候开始的,特别是从2006年开始py2.5的发布,python的功能逐渐强大起来,慢慢开始稳定下来,并且差不多1-2年左右递增一个版本,在08年左右开始慢慢的火起来了.

而Python3最早是从2008开始发布,但是py3.0的版本非常不稳定,所以社区更新的很快,差不多几个月就更新一次。所以一开始的时候并没有很多人用,只到2014春暖花开的时候python3.4 deliver了才开始慢慢稳定下来.

下面我们看一个数据,这是Python社区联和一些网站在2014做的一个调查,关于Python2/3,部分的结果如下:

1).97.51%用户还在写Python2的代码

2).60%的用户写Python3的代码

3).78.09%的用户更多地写Python2代码

4).77.09%的用户认可Python3

目前有一些Linux里的操作系统已经默认使用Python3:

1).Arch Linux (轻量级的Linux操作系统)

2).Ubuntu 16.04 (一个桌面应用为主的Linux操作系统)

3).Fedora(Redhat桌面版本的延续)

2.Python2和Python3的主要区别:

目前最新的数据是,Python有两个版本:一个是2.7.12版,一个是3.5.12版.

那么Python2运行的好好的,为啥突然要出个Python3呢,其实是为了解决Python2里面一些历史问题

第一个是字符串的问题:

Python 2 中文本和二进制数据是一个烂摊子,Python中的str 是代表二进制数据还是文本数据是有二义性,文字既能代表文本数据又能代表二进制数据这很麻烦,此类错误发生的时候,我们很难意识到。

第二个是对Unicode的支持

由于python是在1991年2月开源发布,这意味着它早于在1991年10月发布的第一版 Unicode 标准。在接下来几年中,晚于 Unicode 标准出现的语言都选择在支持 Unicode 编码的基础上实现自己的 str 类型,这让 Python 2 处于尴尬的境地。

目前是一个python2/3共存的时代,这两个版本是不兼容的。

python2现在只是做bug的修复,新硬件和操作系统兼容的相关维护工作。不会再有新的功能加入,python2只支持到2023年.

现在Python正在朝着3版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以目前有许多第三方库还暂时无法在3.x上使用。

不过可以畅想一下,也许再过几年情况就会好很多,毕竟全世界有很多优秀的程序员正在把一些库从Py2往Py3上迁移.

3.选择还是要根据自己的需求

若是公司的开发,要满足工作的需求,尤其是依赖的软件只能运行在Python2下,首选Python2.比如你的开发需要依赖大量的第三方的库(因为学Python非常大的一个原因就是因为它有成千上万的第三方包),像大量的数据分析,科学计算,还是选Python2吧.

如果你是自己学习,研究的话,愿意拥抱变化,那么建议学Python3,因为它是未来的方向.

结论:

编程其实主要是对编程思想的理解和经验的积累,千万不要因为纠结学Py2还是Py3而浪费大量时间。

Py2和Py3里面的思想基本是相通的,招式是类似的.当你熟悉Python到一定的程序的时候,会Py2的人学Py3只需要很短的时间。

所以不要再纠结细枝末节的语法差异,而耽误了宝贵的学习时间。

好了Python2和Python3的恩怨情仇就讲到这里啦(它们还要相爱相杀一段时间),希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

最后说一下,原创不易,希望大家能够给点支持,欢迎转发,留言,也是对我的一点鼓励和动力.

pycharm2023.3.1python2语法错误

Python2语法错误的常见原因有:

1. 将Python3语法用于Python2环境,例如使用print()函数而不是print语句。

2. 使用不正确的字符串格式,例如在Python2中使用u前缀的Unicode字符串。

3. 使用不正确的数据类型,例如在Python2中使用long而不是int。

4. 使用不正确的操作符,例如在Python2中使用“//”而不是“/”来表示整除。

5. 将变量名写错或者将变量名写成关键字。

python2和python3的区别

你应该是刚接触Python吧,建议直接学Python3.x

下面是Python2.x与3.x版本区别:

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。

为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。

许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。

为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。

新的Python程式建议使用Python 3.0版本的语法。

除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。

大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

Python 3.0的变化主要在以下几个方面:

1.print 函数

print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"

print ("fish") #注意print后面有个空格

print("fish") #print()不能带有任何其它参数

然而,Python 2.6实际已经支持新的print()语法:

from __future__ import print_function

print("fish", "panda", sep=', ')

2.Unicode(这是一个极其好的改进)

Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。

现在, 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。

由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:

 中国 = 'china' 

print(中国) 

china

Python 2.x

 str = "我爱北京天安门"

 str

'xe6x88x91xe7x88xb1xe5x8cx97xe4xbaxacxe5xa4xa9xe5xaex89xe9x97xa8'

 str = u"我爱北京天安门"

 str

u'u6211u7231u5317u4eacu5929u5b89u95e8'

Python 3.x

 str = "我爱北京"

 str

'我爱北京'

3.除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//

首先来说/除法:

在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。

在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。

Python 2.x:

 1 / 2

 1.0 / 2.0

0.5

Python 3.x:

 1/2

0.5

注意的是并不是舍弃小数部分,而是执行floor操作,如果要截取小数部分,那么需要使用math模块的trunc函数

python 3.x:

 import math

 math.trunc(1 / 2)

 math.trunc(-1 / 2)

4.异常

在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。

捕获异常的语法由 except exc, var 改为 except exc as var。

使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。

1. 在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。

2. 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。

在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。

5.xrange

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。

这个表现十分像生成器(比如。"惰性求值")。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。

由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。

import timeit

n = 10000

def test_range(n):

    return for i in range(n):

        pass

def test_xrange(n):

    for i in xrange(n):

        pass

Python 2

print 'Python', python_version()

print 'ntiming range()' 

%timeit test_range(n)

print 'nntiming xrange()' 

%timeit test_xrange(n)

Python 2.7.6

timing range()

1000 loops, best of 3: 433 µs per loop

timing xrange()

1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())

print('ntiming range()')

%timeit test_range(n)

Python 3.4.1

timing range()

1000 loops, best of 3: 520 µs per loop

print(xrange(10))

---------------------------------------------------------------------------

NameError                       Traceback (most recent call last)

ipython-input-5-5d8f9b79ea70 in module()

---- 1 print(xrange(10))

NameError: name 'xrange' is not defined

6.八进制字面量表示

八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。

新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。

在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。

python 2.x

 0o1000

512

 01000

512

python 3.x

 01000

  File "stdin", line 1

    01000

      ^

SyntaxError: invalid token

 0o1000

512

7.不等运算符

Python 2.x中不等于有两种写法 != 和

Python 3.x中去掉了, 只有!=一种写法,还好,我从来没有使用的习惯

8.去掉了repr表达式``

Python 2.x 中反引号``相当于repr函数的作用

Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

def sendMail(from_: str, to: str, title: str, body: str) - bool:

    pass

9.多个模块被改名(根据PEP8)

StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。

取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。

10.数据类型

1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

 b = b'china' 

 type(b) 

type 'bytes'

str对象和bytes对象可以使用.encode() (str - bytes) or .decode() (bytes - str)方法相互转化。

 s = b.decode() 

 s 

'china' 

 b1 = s.encode() 

 b1 

b'china'

3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。

【Python2】的内容来源于互联网,若引用不当,请发邮件456(@)456.cn联系删除


服务器购买/咨询热线:1563700917115617636856

本文链接:http://43.134.181.216/jishuzhichiyuweihu/11887.html
tags:LinuxVPSIP网站HTTPHTTPSPythonUbuntuASCIIUnicode 标准
腾讯云服务器特惠

  • 关注微信
是否收录:

猜你喜欢

微信公众号