蟒蛇2和蟒蛇3可以共存吗(蟒蛇2和python3的区别,转换和共存)

原创 程序编程代写  2021-09-21 23:21:46  阅读 12 次 评论 0 条
摘要:

python2和python3可以共存吗?可以直接安装,然后在运行脚本的时候,可以选择对应的程序进行选择,是使用python2执行还是使用python3python2和python3的区别,转换与共存python2和pyth

python2和python3可以共存吗?

可以直接安装,然后在运行脚本的时候,可以选择对应的程序进行选择,是使用python2执行还是使用python3

python2和python3的区别,转换与共存

python2和python3的区别

1。表现

py3.0运行 pystone 基准测试比 Py2 快。5 慢 30%。Guido 认为 py3.0 有巨大的优化空间,可以在字符串和塑性操作中取得非常好的优化结果。

py3.1性能优于Py2.5 慢了 15%,还有很大的提升空间。

2。编码

Py3。X 源代码文件默认使用 utf-8 编码,这使得以下代码合法: >>> China =‘china’ >>>print(China) china

3。语法

1) 删除 <>, use all!=

在 蟒蛇 2 中,为了获得任意对象的字符串表示,有一种特殊的语法将对象包装在反引号中(例如`x`)。在 蟒蛇 3 中,这种能力仍然存在,但你不能再使用反引号来获得这个字符串表示。您需要使用全局函数 repr()。

笔记

蟒蛇 2

蟒蛇 3

`x` repr(x)

`‘PapayaWhip’ + `2` repr(‘PapayaWhip’+ repr(2))

注意:x 可以是任何东西——类、函数、模块、基本数据类型等。repr() 函数可以使用任何类型的参数。

2) 删除 `` 并为所有使用 repr()

3) 添加 as 和 with 关键字,以及 True、False、None

4)整数除法返回一个浮点数。要获得整数结果,请使用 //

由于人们经常忽略 蟒蛇 3 中整数除法的变化(写错不会触发 Syntax Err要么),因此在 蟒蛇 2 中移植代码或执行 蟒蛇 3 代码时需要特别注意这一变化。。

所以,我仍然会尝试在 蟒蛇 3 脚本中使用 float(3)/2 或 3/2.0 而不是 3/2 以避免代码在 蟒蛇 2 环境中可能导致的错误(或者相反,在 蟒蛇 2 脚本中使用 from __future__ import Division 来使用 蟒蛇 3 除法)。

蟒蛇 2

打印 ‘3 / 2 =’, 3/2 打印 ‘3 // 2 =’, 3 // 2 打印 ‘3 / 2.0 =’, 3/2.0 打印 ‘3 // 2.0 =’, 3 // 2.0 3/2 = 1 3 // 2 = 1 3/2.0 = 1.5 3 // 2.0 = 1.0

默认情况下,如果两个操作数都是整数,蟒蛇 2 会自动执行整数计算。

蟒蛇 3

打印(‘3 / 2 =’, 3 / 2) 打印(‘3 // 2 =’, 3 // 2) 打印(‘3 / 2.0 =’, 3/2.0) 打印(‘3 // 2.0 =’, 3 // 2.0) 3/2 = 1.5 3 // 2 = 1 3/2.0 = 1.5 3 // 2.0 = 1.0

注意:需要注意的是,“双破折号”(//)运算符将始终执行可整除,无论操作数的类型如何,这就是为什么 5.0//2.0 是 2.0。在蟒蛇 3中,/操作符做浮点除法,而//是做整数除法(即商没有余数,比如10 // 3,结果是3,余数会被截断,而( -7) // 3的结果是-3。该算法与许多其他编程语言不同。需要注意的是,它们的算术运算将取0方向的值。。在 蟒蛇 2 中,/ 是可整除的,这与 Python 3 中的 // 运算符相同。。

5) 添加非本地语句。使用 noclocal x 直接分配外围(非全局)变量

6) 打印

去掉print语句,添加print()函数,实现同样的功能。同样是可执行程序c语句,改成了exec()函数

在 Python 2 中,print 是一个语句。不管你想输出什么,只要把它们放在print关键字之后。

在 Python 3 中,print() 是一个函数。就像其他函数一样,print() 要求您将要输出的内容作为参数传递给它。

例如:2。X:打印“答案是”,2*2 3。X: print(“答案是”, 2*2) 2。X: print x, # 使用逗号结束换行符 3。X: print(x, end=“ ”) # 用空格替换行

在 Python 2 中,如果使用逗号 (,) 作为打印语句的结尾,它会将输出结果用空格分隔,然后输出尾随空格而不是回车。在 Python 3 中,通过将 end=‘ ’ 作为关键字参数传递给 print() 可以实现相同的效果。参数end的默认值为‘ ’,所以通过重新赋值end参数的值,可以取消末尾的回车。2。X: print # 打印新的第 3 行。X: print() # 打印新的第 2 行。X:打印>>系统。标准错误,“致命错误”3。X:打印(“致命错误”,文件=系统。标准错误)

在 Python 2 中,您可以使用 >>pipe_name 语法将输出重定向到管道,例如 系统。标准错误。在 Python 3 中,您可以通过将管道作为关键字参数文件的值传递给 print() 来完成相同的功能。参数文件的默认值为std。stdout,因此重新分配其值将使 print() 输出到另一个管道。2。X: print (x, y) # 输出 repr((x, y)) 3。X: print((x, y)) # 不同于 print(x, y)!

执行语句

exec() 函数将包含任意 Python 代码的字符串作为参数,然后像语句或表达式一样执行它。exec() 与 eval() 类似,但 exec() 更强大也更棘手。eval()函数只能执行单个表达式,而exec()可以执行多条语句,import(导入),函数声明——其实也可以用整个Python程序的字符串表示。

笔记

Python 2

Python 3

执行代码字符串执行(代码字符串)

exec codeString in a_global_namespace exec(codeString, a_global_namespace)

exec codeString in a_global_namespace, a_local_namespace exec(codeString, a_global_namespace, a_local_namespace)

最简单的形式,因为exec()现在是一个函数,而不是一个语句,2to3会将代码以字符串的形式括在括号中。

Python 2中的exec语句可以指定命名空间,代码会在这个由全局对象组成的私有空间中执行。Python 3 也有这个特性; 你只需要将此命名空间作为第二个参数传递给 exec() 函数。

更神奇的是,Python 2 中的 exec 语句还可以指定本地命名空间(比如在函数中声明的变量)。在 Python 3 中,exec() 函数也有这样的函数。

execfile 语句

就像前面的exec语句一样,Python 2中的execfile语句也可以像执行Python代码一样使用字符串。区别在于exec使用字符串,而execfile使用文件。在 Python 3 中,execfile 语句已被删除。如果你真的想执行文件中的Python代码(但你不想导入它),你可以打开文件,读取它的内容,然后调用compile()全局函数强制Python解释器编译代码,然后调用 New exec() 函数。

笔记

Python 2

Python 3

execfile(‘a_filename’) exec(compile(open(‘a_filename’)。read(),‘a_filename’,‘exec’))

7) 输入函数改了,raw_input 被删除,替换为 input:Python 2 有两个全局函数可以在命令行请求用户输入。第一个叫做 input(),它等待用户输入一个 Python 表达式(然后返回结果)。第二个称为 raw_input(),它返回用户输入的任何内容。这让初学者感到困惑,被广泛认为是 Python 语言的“疣”(wart)。Python 3 通过将 raw_input() 重命名为 input() 来切断这块肉,所以现在 input() 像大家最初预期的那样工作。2。X:guess = int(raw_input(‘Enter an integer:’)) # 读取键盘输入的方法3。X:guess = int(input(‘输入一个整数:’))

注意:如果你真的想请求用户输入一个Python表达式并计算结果,你可以调用input()函数并将返回值传递给eval()。

I/O 方法 xreadlines()

在 Python 2 中,文件对象有一个 xreadlines() 方法,它返回一个迭代器,一次读取文件一行。这在 for 循环中特别有用。实际上,Python 2 的后续版本在文件对象本身中添加了这样的函数。

在 Python 3 中,xreadlines() 方法不再可用。2to3可以解决简单的情况,但有些边缘情况需要人工干预。

笔记

Python 2

Python 3

对于 a_file 中的行。xreadlines(): 对于 a_file 中的行:

对于 a_file 中的行。xreadlines(5): 没有变化(损坏)

如果您之前不带参数调用 xreadlines(),2to3 会将其转换为文件对象本身。在 Python 3 中,这个转换后的代码可以做和以前一样的工作:一次读取文件一行,然后执行 for 循环的主体。

如果你以前用一个参数(每次读取的行数)调用xreadlines(),2to3无法帮你完成从Python 2到Python 3的转换,你的代码会这样失败:AttributeError:‘_io。TextIOWrapper’ 对象没有属性 ‘xreadlines’。您可以手动将 xreadlines() 更改为 readlines() 以使代码在 Python 3 下工作。。(readline() 方法在 Python 3 中返回一个迭代器,因此它与 Python 2 中的 xreadlines() 一样高效。)

8) 改变了顺序运算符的行为,例如 x

9) 去除元组参数解包。不能 def(a, (b, c)): pass 定义了这样的函数

10) 新式八进制字变量,相应修改了oct()函数。2。X的方式如下: >>> 0666 438 >>> oct(438) ‘0666’

3。X 像这样:>>> 0666 SyntaxError: invalid token (, 第 1 行) >>> 0o666 438 >>> oct(438) ‘0o666’

11) 添加二进制文字和 bin() 函数 >>> bin(438) ‘0b110110110’ >>> _438 = ‘0b110110110’ >>> _438 ‘0b110110110’

12) 扩展的可迭代解包。在 Py3。在X中,a, b, *rest = seq和*rest, a = seq都是合法的,只需要两点:rest是一个列表对象,seq是可迭代的。

13)新的super(),不能再给super()传参数了,>>> class C(object): def __init__(self, a): print(‘C’, a) >>> class D( C ): def __init(self, a): super()。__init__(a) # 不带参数调用 super() >>> D(8) C 8 <__main__.D object at 0x00D7ED90>

14) 支持类装饰器。用法和函数装饰器一样: >>> def foo(cls_a): def print_func(self): print(‘Hello, world!’) cls_a。print = print_func return cls_a >>> @foo class C(object): pass >>> C()。print() 你好,世界!

类装饰器可以用来给王子玩麝香猫的大把戏。有关更多信息,请参阅 PEP 3129

4。字符串和字节串

Python 2 有两种类型的字符串:Unicode 字符串和非 Unicode 字符串。Python 2有一个基于ASCII的str()类型,可以通过单独的unicode()函数转换成unicode类型,但是没有byte类型。

在 Python 3 中,终于有了 Unicode (utf-8) 字符串和两个字节类:bytes 和 bytearrays。Python 3 只有一种类型:Unicode 字符串。只有一种类型的str,但是后面跟着2。unicode的x版本几乎一样。

笔记

Python 2

Python 3

u‘PapayaWhip’‘PapayaWhip’

ur‘PapayaWhipfoo’ r‘PapayaWhipfoo’

Python 2 中的 Unicode 字符串在 Python 3 中是普通字符串,因为字符串在 Python 3 中始终是 Unicode 形式。

Unicode 原始字符串(使用此字符串,Python 不会自动转义反斜杠“”)也替换为普通字符串,因为在 Python 3 中,所有原始字符串都是 Unicode 编码的。

全局函数 unicode()

Python 2 有两个全局函数将对象强制转换为字符串:unicode() 将对象转换为 Unicode 字符串,str() 将对象转换为非 Unicode 字符串。

Python 3 只有一种字符串类型,Unicode 字符串,所以 str() 函数可以完成所有功能。(Python 3 中不再存在 unicode() 函数。)

笔记

Python 2

Python 3

unicode(任何东西)str(任何东西)

5。数据类型

1) Python 2 对于非浮点数有 int 和 long 类型。int类型的最大值不能超过sys。最大值,这个最大值是平台相关的。长整数可以通过在数字末尾附加一个 L 来定义。显然,它比 int 类型具有更大的数字范围。

在 Python 3 中,只有一种整数类型 int。在大多数情况下,它与 Python 2 中的长整数类型非常相似。。

注意:检查一个变量是否是整数,获取它的数据类型,并与一个int类型(不是long)进行比较。您也可以使用 isinstance() 函数来检查数据类型; 再次使用 int 而不是 long 来检查整数类型。

sys。maxint

由于 long 和 integer 类型是集成的,因此 sys。maxint 常量不再准确。但是因为这个值对于检测特定平台的能力很有用,所以它被 Python 3 保留并重命名为 sys。最大尺寸。

笔记

Python 2

Python 3

从 sys 导入 maxint 从 sys 导入 maxsize

python 2 python 3 共存 cmd pip install 模块,如何让python3导入

想学Python3,但暂时离不开Python2。如何让它们在 Windows 上共存? 目前国内网站经常要求大家放一个python。修改exe的名字(嗯,我也说了,这里更正一下),这样两个可执行文件的名字就可以区分了,但是这样做有一个很大的隐患,就是对应的pip名称已更改的python 不可用。 官方的解决方法是什么? 其实Python社区早在几年前就给出了官方的解决方案,只是国内一直没有注意到。 我们正在安装 Python3 (>=3.3)当Python安装包实际在系统中安装了一个launcher py时。exe,默认放在文件夹C:Windows。这个启动器可以让我们指定是使用Python2还是Python3来运行代码(当然前提是你已经成功安装了Python2和Python3)。 如果您有一个名为 hello 的 Python 文件。py,然后你可以像这样用Python2运行它 py -2 你好。py 同样,如果你想用Python3运行它,就像这样 py -3 你好。py 删除参数-2/-3 每次运行都加参数-2/-3比较麻烦,所以py。exe启动器允许你在代码中添加指令,指示这个文件应该由python2解释还是由python3运行。解释的方法是在代码文件的最开始添加一行 #! python2 or #! python3 分别表示代码文件使用Python2或Python3解释运行。这样,您的命令可以简化为 你好。py 使用点子 当windows上同时存在Python2和Python3时,它们对应的pip称为pip。exe,所以不能直接使用pip install命令安装包。相反,使用启动器 py。exe指定pip的版本。命令如下: py -2 -m pip install XXXX -2 仍然表示使用Python2,-m pip 表示运行pip模块,即运行pip命令。如果是为Python3安装软件,那么命令类似 py -3 -m pip install XXXX #! python2 和#coding: utf-8 先写的? Python2 用户还有另一个困惑。Python2需要在代码文件顶部添加一行指令才能在代码中使用中文。如果指定你使用的Python版本还需要在文件顶部添加一行,该行应该放在第一行 #! python2需要放在第一行,编码指令可以放在第二行。所以文件的开头应该类似于: #! python2 # 编码:utf-8 有了这些技巧,Python2和Python3就可以愉快的玩起来了~

win7下安装python打包工具pip的方法如下: 1。安装pip前请确认win系统已经安装python和easy_install工具。如果系统安装成功,easy_install在c:python27scripts目录下,截图如下: 2。进入命令行,然后将目录切换到python安装目录下的script文件夹,运行easy_inatall pip 3。pip安装成功后,在cmd下执行pip,会有如下提示。 防范措施 安装pip之前,系统必须已经安装好python和easy_install,并设置好环境变量。

python2和python3可以同时安装吗

1。下载并安装 Python 2.7。9 和 Python 3.4。1。2。查找 Python 2.7。9的安装目录C:\Python27,放python。exe 和 pythonw。exe 重命名为 python27。exe 和 pythonw27。exe。3。查找 Python 3.4。1 安装目录 C:\Python34

本文地址:http://www.mjgy888.com/post/16460.html
版权声明:本文为原创文章,版权归 程序编程代写 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?