Python 3 与 Python 2 的主要区别

在这里插入图片描述

文章目录

    • 1. 语法与关键字
      • `print` 函数
      • 整数除法
    • 2. 字符串处理
      • 默认字符串类型
      • 字符串格式化
    • 3. 输入函数
    • 4. 迭代器和生成器
      • `range` 函数
      • `map`, `filter`, `zip`
    • 5. 标准库变化
      • `urllib` 模块
      • `configparser` 模块
    • 6. 异常处理
    • 7. 移除的功能
    • 8. 其他重要改进
      • 数据库操作
      • 多线程与并发
      • 类型注解
    • 9. 总结

Python 是一门强大且广泛使用的编程语言。从 Python 2 到 Python 3 的过渡引入了许多重要的变化,使得 Python 3 成为现代开发的首选版本。本文将总结 Python 3 与 Python 2 的主要区别,并参考官方文档对关键点进行分析。


1. 语法与关键字

print 函数

在 Python 2 中,print 是一个语句,而在 Python 3 中,它被改为函数。

Python 2:

print "Hello, World!"

Python 3:

print("Hello, World!")

整数除法

在 Python 2 中,整数除法会进行向下取整,而 Python 3 中则返回浮点数。

Python 2:

print 5 / 2  # 输出 2

Python 3:

print(5 / 2)  # 输出 2.5

如果希望在 Python 3 中获得整数除法的结果,可以使用 //

print(5 // 2)  # 输出 2

2. 字符串处理

默认字符串类型

  • Python 2 默认使用 ASCII 编码,字符串为 str 类型。
  • Python 3 默认使用 Unicode 编码,字符串为 str 类型。

Python 2:

s = "你好"  # ASCII 可能导致编码错误

Python 3:

s = "你好"  # 默认支持 Unicode,无需额外处理

如果在 Python 3 中处理二进制数据,可以使用 bytes 类型:

b = b"binary data"

字符串格式化

Python 3 引入了更强大的格式化方法 str.format() 和 f-string。

Python 2:

print("%s is %d years old" % ("Alice", 30))

Python 3:

print("{} is {} years old".format("Alice", 30))
# 或使用 f-string
name, age = "Alice", 30
print(f"{name} is {age} years old")

3. 输入函数

在 Python 2 中,input() 将输入解析为代码,而 raw_input() 返回字符串。

Python 2:

name = raw_input("Enter your name: ")  # 返回字符串

Python 3:

name = input("Enter your name: ")  # 默认返回字符串

4. 迭代器和生成器

range 函数

在 Python 2 中,range() 返回列表;在 Python 3 中,range() 返回一个生成器对象,更节省内存。

Python 2:

print(range(5))  # 输出 [0, 1, 2, 3, 4]

Python 3:

print(range(5))  # 输出 range(0, 5)
print(list(range(5)))  # 转为列表 [0, 1, 2, 3, 4]

map, filter, zip

在 Python 2 中,这些函数返回列表,而在 Python 3 中返回迭代器。

Python 2:

print(map(str, [1, 2, 3]))  # 输出 ['1', '2', '3']

Python 3:

print(list(map(str, [1, 2, 3])))  # 需要显式转换为列表

5. 标准库变化

urllib 模块

  • 在 Python 2 中,urlliburllib2 是分开的模块。
  • 在 Python 3 中,功能被整合到了 urllib.requesturllib.error 中。

Python 2:

import urllib2
response = urllib2.urlopen("http://example.com")

Python 3:

import urllib.request
response = urllib.request.urlopen("http://example.com")

configparser 模块

在 Python 3 中,ConfigParser 被重命名为 configparser,并改进了功能。


6. 异常处理

Python 3 中,异常必须使用 as 关键字绑定到变量。

Python 2:

try:x = 1 / 0
except ZeroDivisionError, e:print e

Python 3:

try:x = 1 / 0
except ZeroDivisionError as e:print(e)

7. 移除的功能

  • print 语句:被 print() 函数取代。
  • long 类型:Python 3 将所有整数合并为 int 类型。
  • xrange:被 range 取代。
  • <> 比较运算符:在 Python 3 中必须使用 !=

8. 其他重要改进

数据库操作

Python 3 中的数据库模块如 sqlite3 默认支持 Unicode,更适合现代开发需求。

多线程与并发

Python 3 引入了 concurrent.futures 模块,简化了多线程和多进程编程。

类型注解

Python 3 支持类型注解,使代码更具可读性和可维护性。

示例:

def greet(name: str) -> str:return f"Hello, {name}"

9. 总结

从 Python 2 到 Python 3 的变化是显著的,尤其是对语法一致性、性能优化和现代化开发需求的支持。虽然 Python 2 已经在 2020 年停止支持,但了解它与 Python 3 的差异仍有助于维护旧代码或迁移项目。对于新开发,推荐使用 Python 3 的最新版本,以充分利用其特性和改进。

参考资料:

  • Python 官方文档

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

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

相关文章

关于IDE的相关知识之二【插件推荐】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件推荐的相关内容&#xff01…

如何获取稳定高效的动态代理?

在数据采集的领域&#xff0c;动态代理IP是我们探索网络世界的小助手&#xff0c;它不仅帮助我们高效地收集信息&#xff0c;还能在保护数据安全方面发挥重要作用。但如何在众多选择中找到最适合的那个——即稳定且高效的动态代理也是一大难题。 明确你的需求 首先&#xff0…

基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

原生js封装ajax请求以及css实现提示效果和禁止点击效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0,user-scalableno"><title>本地模式网络切换</title>&l…

Pytorch的自动求导模块

文章目录 torch.autograd.backward()基本用法非标量张量的反向传播保留计算图指定输入张量高阶梯度计算 与 y.backward() 的区别torch.autograd.grad()基本用法非标量张量的梯度高阶梯度计算多输入、多输出的梯度计算未使用的输入张量保留计算图 与 backward() 的区别 torch.au…

Mac OS

本文来自智谱清言 ------ Mac OS&#xff08;现称为macOS&#xff09;是苹果公司开发和销售的操作系统&#xff0c;自1984年推出以来&#xff0c;它已经经历了多次重大的演变和发展。 起源&#xff1a;Mac OS 1.0的诞生 - 1984年&#xff0c;苹果发布了Macintosh计算机&#…

spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验

文章目录 一、JSR 303后台数据校验1.1 什么是 JSR303&#xff1f;1.2 为什么使用 JSR 303&#xff1f; 二、Spring Boot 中使用数据校验2.1 基本注解校验2.1.1 使用步骤2.1.2 举例Valid注解全局统一异常处理 2.2 分组校验2.2.1 使用步骤2.2.2 举例Validated注解Validated和Vali…

ubuntu常用快捷键和变量记录

alias b‘cd …/’ alias bb‘cd …/…/’ alias bbb‘cd …/…/…/’ alias bbbb‘cd …/…/…/…/’ alias bbbbb‘cd …/…/…/…/…/’ alias bbbbbb‘cd …/…/…/…/…/…/’ alias apkinfo‘aapt dump badging’ alias npp‘notepad-plus-plus’ export ANDROID_HOME/h…

AWS S3文件存储工具类

pom依赖 <!--aws-s3--> <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.12.95</version></dependency>S3Utils import cn.hutool.core.util.ZipUtil; import com.a…

【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】

文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1&#xff1a;检测单个信号的 Stuck-at Fault示例 2&#xff1a;针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…

2024 高通边缘智能创新应用大赛智能边缘计算赛道冠军方案解读

2024 高通边缘智能创新应用大赛聚焦不同细分领域的边缘智能创新应用落地&#xff0c;共设立三大热门领域赛道——工业智能质检赛道、智能边缘计算赛道和智能机器人赛道。本文为智能边缘计算赛道冠军项目《端侧大模型智能翻译机》的开发思路与成果分享。 赛题要求 聚焦边缘智能…

【Python运维】用Python和Ansible实现高效的自动化服务器配置管理

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着云计算和大规模数据中心的兴起,自动化配置管理已经成为现代IT运维中不可或缺的一部分。通过自动化,企业可以大幅提高效率,降低人为错…

微信小程序获取后端数据

在小程序中获取后端接口数据 通常可以使用 wx.request 方法&#xff0c;以下是一个基本示例&#xff1a; // pages/index/index.js Page({data: {// 用于存储后端返回的数据resultData: [] },onLoad() {this.fetchData();},fetchData() {wx.request({url: https://your-backe…

应用架构模式-总体思路

采用引导式设计方法&#xff1a;以企业级架构为指导&#xff0c;形成较为齐全的规范指引。在实践中总结重要设计形成决策要点&#xff0c;一个决策要点对应一个设计模式。自底向上总结采用该设计模式的必备条件&#xff0c;将之转化通过简单需求分析就能得到的业务特点&#xf…

【数据结构】双向循环链表的使用

双向循环链表的使用 1.双向循环链表节点设计2.初始化双向循环链表-->定义结构体变量 创建头节点&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff09;图示 3.双向循环链表节点头插&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff…

【Java设计模式-3】门面模式——简化复杂系统的魔法

在软件开发的世界里&#xff0c;我们常常会遇到复杂的系统&#xff0c;这些系统由多个子系统或模块组成&#xff0c;各个部分之间的交互错综复杂。如果直接让外部系统与这些复杂的子系统进行交互&#xff0c;不仅会让外部系统的代码变得复杂难懂&#xff0c;还会增加系统之间的…

Linux一些问题

修改YUM源 Centos7将yum源更换为国内源保姆级教程_centos使用中科大源-CSDN博客 直接安装包&#xff0c;走链接也行 Index of /7.9.2009/os/x86_64/Packages 直接复制里面的安装包链接&#xff0c;在命令行直接 yum install https://vault.centos.org/7.9.2009/os/x86_64/Pa…

微信小程序 覆盖组件cover-view

wxml 覆盖组件 <video src"../image/1.mp4" controls"{{false}}" event-model"bubble"> <cover-view class"controls"> <cover-view class"play" bind:tap"play"> <cover-image class"…

HTML——57. type和name属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…

uniapp本地加载腾讯X5浏览器内核插件

概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块&#xff0c;可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核&#xff0c;提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染&#xff1f; 所有plus…