示例解读 Python 2 和 Python 3 之间的主要差异

开发四年只会写业务代码,分布式高并发都不会还做程序员?  hot3.png

每门编程语言在发布更新之后,主要版本之间都会发生很大的变化。 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化。

本教程主要介绍内容:

  • 表达式

  • Print 选项

  • Unequal 操作

  • Range

  • 自动迁移

  • 性能问题

  • 主要的内部事务更改

1、表达式

在 Python 2 中为获得计算表达式,你会键入:

X = raw_input ("enter some values)

 但在 Python 3 中,你会键入:

X = input ("enter some values")

因此,无论我们输入什么,值都会分配给 2 和 3 中的变量 x。当在 Python 2 中输入 2*6 时,结果将是 12,这是评估值。

但是,当在 Python 3 中运行相同的程序时,结果是字符串值。 在这种情况下,它看起来像字符串格式的 2*6。

那么,我们如何获得评估表达式呢? 现在,我们必须使用一个名为 eval 的表达式或函数。 当您在输入之前编写 eval 时,它会将表达式转换为计算值。

x= eval(input("enter some values")) = 12

具体表达式示例:

在 Python 2 中:

name = input("What is your name? ")print ("Hello, %s." %name)

然后输出:

ede41e7165a123cd51816e06e12f6fbadb8.jpg

在 Python 3 中:

name = input("What is your name? ")print ("Hello, %s." %name)

然后输出:

7c3cfbbb49cca4a9d1cb95ea690c59bfc15.jpg

我们可以清楚地看到,他们之间的差异很小。

2、Print 选项

在 Python 2 中,print 是一个不需要括号的语句。 在 Python 3 中,print 是一个函数,值需要用括号括起来。

Python 2

输入:

print "hello world"

会输出:

6fbbb412af00ba59280da33c958e50dc53e.jpg

Python 3

输入:

1 != 1.0print (False)

会输出:

4d194156250016b2e5303b7ae050f79d8b2.jpg

3、Unequal 操作

当我们在 Python 2 中使用 Unequal 运算符时,我们需要使用大于 > 或小于 < 符号。 但是,在 Python 3 中,有一个通用运算符。 感叹号 ! 和等号 = 用于表示值是否相等。

Python 2 -<> 运算符表示不相等
Python 3 -! 运算符表示不相等

Python 2

输入:

1 <> 1.0print "False"

会输出:

f2e5790276132b715467833b0a02e25e403.jpg

Python 3

输入:

1 != 1.0print (False)1 != 1.0print (False)

会输出:

68ab614325ba5df63766c49f037d2350779.jpg

4、Range

Range 用于生成数字列表,通常用于迭代 for 循环。

bdbd65da39fba1b027f09a4f2db383fd611.jpg

在这里你可以看到 X 等于 Range 10。当我们检查变量 X 时,它返回了列表类型。 这意味着在 Python 2 中,Range 是列表的类型。当我写 X 之后,得到一个对象列表,这里是:0 1 2 3 4 5 6 7 8 9。

ad4e0780699fc39149dab634a68247c0cab.jpg

现在让我们转到 Python 3,当我们写 X 等于 Range 5,这个值就被赋给变量 X;当我们检查变量 X 的类型时,它会返回一个 Range 对象本身。 这意味着在 Python 3 中,Range 是一个范围对象本身。

Python 2

输入:

print range(0,10,1)

会输出:

f631b850bf47db6506c75b528ad7f7e5c23.jpg

Python 3

输入:

print(list(range(10)))

会输出:

734c2a3d4f027aa9e2db3dd8b0184893c55.jpg

5、自动迁移

那么,我们如何自动执行脚本以将代码从 Python 2 移动到 3?

在这里,我们可以使用 Python 中的 Add 2 Numbers 进行测试。

Python 2

输入:

n1 = 1n2 = 2add = float(n1) + float(n2)print 'sum of {0} and {1} is {2}'.format(n1, n2, add)

会输出:

bbcde0afac986bd8100c2d539648ab9e77d.jpg

现在使用 2to3 的迁移,我们可以转换上面的代码。

输入:

n1 = 1n2 = 2add = float(n1) + float(n2)
print('sum of {0} and {1} is {2}'.format(n1, n2, add))

会输出:

e07d902b0207473c5d546edfcda93a68bff.jpg

所以在这里我们看到它可以在命令行上通过 2to3 转换为 Python 3 代码。

Python 提供了自己的工具,名为 2to3.py,它运行了一堆脚本来将你的 Python 2 代码转换为 3。虽然它并不完美,但它总体上做得非常出色。转换任何代码后,您可以手动修复任何问题。

6、性能问题

此升级中已修复了大多数性能问题! 在比较两个版本之间的基准时,差异几乎可以忽略不计。

7、一些主要的内部事务变更

Python 2

  • print 功能括号选填。

  • 使用 u 作为前缀字符串以生成 unicode 字符串。

  • 整数除法总是返回整数 -5/2=2。

  • Raw_input() 读取字符串。

  • input() 评估读取的数据。

  • generator .next()。

Python 3:

  • print 功能括号必填。

  • 默认情况下为字符串 unicode。

  • 整数除法可能导致浮动 -5/2=2.5。

  • Raw_input() 不可用。

  • 输入始终读取字符串。

  • Next (generator)。

  • Py2 to py3 实用程序。

  • Dictionary .keys() 和 .values() 返回的为视图不是列表。

  • 在非自然比较中不能再使用比较运算符。
    例如,None < None 将引发 TypeError 而不是返回 false。

  • 不推荐使用百分比(%)字符串格式化运算符,使用 .format() 函数或连接。

编译自:Key differences between Python 2 and 3: How to navigate change

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字后端——布局

由于I / O单元和模块的布放已经在布图规划时完成&#xff0c;因此布局的剩余任务主要是对标准单元的布局。布局方案在布图规划时就已经做了决定&#xff0c;要么选择展平式布局&#xff0c;要么就是层次化布局。 一、布局目标 布局的目标也即布局内容实施之后所要达到的预期值…

python基础 函数 (四)

一 函数基本 def func1():print("hello world")return 1, "hello", ("wo", "ai"), ["ni", "da"], {"you": "xi"} # return 可以返回任意# 结果&#xff1a; (1, hello, (wo, ai), [ni, da…

c#注释

c#的注释分为&#xff1a;这里不能不说一下什么是注释。 注释本身不会执行&#xff0c;只是说明性文字&#xff0c;只供程序员阅读。 注释又分为&#xff1a;单行注释&#xff0c;多行注释&#xff0c;文档注释。 单行注释&#xff1a;//开始 多行注释&#xff1a;/*开始&#…

嵌入式linux字符设备驱动

1. 我们需要先调用register_chrdev_region()或 alloc_chrdev_region()来向系统申请设备号int register_chrdev_region( dev_t first, unsigned int count, char *name ); //函数通过已知的设备号first来注册字符设备区域。 int alloc_chrdev_region( dev_t *dev, unsigned int…

数字后端——时钟树综合

在数字集成电路设计中&#xff0c;时钟信号是数据传输的基准&#xff0c;它对于同步数字系统的功能、性能和稳定性起决定性作用&#xff0c;所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必…

52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)

MySQL创建用户以及授权 默认用户是root用户&#xff0c;不可能所有人员都用root用户&#xff0c;创建用户防止误删除&#xff0c;因为mysql里边有多个库每个库里有很多表&#xff0c;所以需要给单独的用户做一些授权我只需要它对某一个数据库有权限&#xff0c;或者说对某个数据…

线程池的种类,区别和使用场景

newCachedThreadPool&#xff1a; 底层&#xff1a;返回ThreadPoolExecutor实例&#xff0c;corePoolSize为0&#xff1b;maximumPoolSize为Integer.MAX_VALUE&#xff1b;keepAliveTime为60L&#xff1b;unit为TimeUnit.SECONDS&#xff1b;workQueue为SynchronousQueue(同步队…

20145225 《信息安全系统设计基础》第14周学习总结

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一&#xff0c;它是对主存的一个抽象 三个重要能力&#xff1a; 它将主存看成是一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xf…

数字后端——布线

布线是继布局和时钟树综合之后的重要物理实施任务&#xff0c;其内容是将分布在芯片核内的模块、标准单元和输入输出接口单元( I /O pad&#xff09;按逻辑关系进行互连&#xff0c;其要求是百分之百地完成它们之间的所有逻辑信号的互连&#xff0c;并为满足各种约束条件进行优…

动态加载和静态加载及其编译步骤

在类unix操作系统中&#xff0c;驱动加载方式一般分为&#xff1a;动态加载和静态加载&#xff0c;下面分别对其详细论述。 一、动态加载 动态加载是将驱动模块加载到内核中&#xff0c;而不能放入/lib/modules/下。 在2.4内核中&#xff0c;加载驱动命令为&#xff1a;ins…

streamsets 集成 minio s3测试

具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考&#xff1a; https://www.cnblogs.com/rongfengliang/p/9197315.html 创建bucket &#xff08;crate 集成使用&#xff09; 测试的csv 文件从https://www.s…

sqlite性能优化

1、数据库性能上 1.1 批量事务插入&#xff0c;提升数据插入的性能 由于sqlite默认每次插入都是事务&#xff0c;需要对文件进行读写&#xff0c;那么减少事务次数就能简书磁盘读写次数从而获得性能提升。 1.2 单条sql优于多条sql 实测发现&#xff0c;对于几十条sql插入当你替…

【codecombat】 试玩全攻略 第十四关 已知敌人

第十四关 已知敌人 在这一关里&#xff0c;我们的英雄获得了一副可以看见敌人的眼镜&#xff0c;所以他很强势的学会了“发现敌人”的技能。 hero.findNearestEnemy()命令&#xff0c;单词多了&#xff0c;首字母都要大写了&#xff0c;不然分不出来。玩过wow的小伙伴用过 宏命…

数字后端——信号完整性分析

随着光刻和集成电路制造工艺的不断进步&#xff0c;以及芯片的特征尺寸从深亚微米到纳米的迅速采用&#xff0c;人们一方面因为芯片的功能极大提高而受益&#xff0c;另一方面&#xff0c;当逻辑门的沟道长度减小时&#xff0c;门的开关时间会减小&#xff0c;这意味着输出驱动…

新浪前端面试

1、什么是Html语义化&#xff1f; 语义化 div > section&#xff0c;div > nav(语言自己能解释)&#xff0c; input/(关闭符号) br/相对于样式标记&#xff0c;如 i&#xff08;样式&#xff09;/ em&#xff08;语义&#xff09;&#xff1b;b&#xff08;样式&#xff…

poj3278 【BFS】

Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 97240 Accepted: 30519Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a num…

表单高级

● 表单高级 ○ 表单字段集<fieldset></fieldset> ■ 功能&#xff1a;相当于一个方框&#xff0c;在字段集中可以包含文本和其他元素。该元素用于对表单中的元素进行分组并在文档中区别标出文本。fieldset元素可以嵌套&#xff0c;在其内部可以在设置多个fieldset…

CMOS图像传感器——TDI CIS

一、面阵与线阵图像传感器 人们在日常生活中见到的相机大多基于普通的面阵图像传感器,这种相机多用来拍摄静止的物体。即使用它们來拍摄运动的物体,也仅仅是缩短了相邻两次拍摄的时间间隔,无需对所拍摄图像进行额外操作,对物体的运动方向和速度也没有限定条件。 除此之外,…

gpio_request 原形代码

其原型为 int gpio_request(unsigned gpio, const char *label) 先说说其参数&#xff0c;gpio则为你要申请的哪一个管脚&#xff0c;label则是为其取一个名字。其具体实现如下&#xff1a; [cpp] view plaincopyprint?int gpio_request(unsigned gpio, const char *label) …

【noip模拟】德充符

时间限制&#xff1a;2s 内存限制&#xff1a;512MB 【题目描述】 申徒嘉和郑子产都是伯昏无人的学生&#xff0c;子产因为申徒嘉是残疾人&#xff0c;非常看不起他&#xff0c;于是想要刁难他。 子产给了申徒嘉 n个数 a1,a2...an。 现在他要求申徒嘉重新排列这些数&#xff0c…