【Python3 教程】

Python3,在开发阶段被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候就没有考虑向下兼容。许多针对早期Python版本设计的程序都无法在Python 3.0上正常运行。为了照顾现有程序,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移。基于早期Python版本而能正常运行于Python 2.6并无警告的程序可以通过一个2 to 3的转换工具无缝迁移到Python 3.0。

开始阅读

概要

python历史

Python的创始人吉多·范罗苏姆,在1982年至1995年间,参与了荷兰数学和计算机科学研究学会多个项目的工作[38]。1989年的圣诞节期间,他决心开发一个新的脚本解释编程,作为ABC语言的继承者,并且用它替代Unix shell和C语言来进行系统管理[20],担负与Amoeba操作系统[39]之间的交互操作并进行异常处理[12]。他是BBC电视剧《Monty Python的飞行马戏团》的爱好者,所以选取了Python作为这个编程语言的名字[40]。范罗苏姆作为Python的主要开发者,独自担负这个项目的发展决策者职责,直到2018年7月12日,他宣布从终身仁慈独裁者(BDFL)的职位上“永久休假”[41][42]。他在2019年1月至11月参与了第一届五人掌控委员会继续领导项目发展[43][44]

在1991年2月,范罗苏姆在alt.sources上发布了最初代码(标记为版本0.9.0)[1],这时就已经存在了带继承的类、异常处理、函数和核心类型listdictstr等。在这个最初发行中就有了从Modula-3引进的模块系统[45],和异常处理机制[12]。在1994年1月,Python达到了版本1.0[46],其主要新特征是由Amrit Prem提供的函数式编程工具lambda、map、filter和reduce[47]。受Modula-3启发,Python 1.1介入了缺省参数值,Python 1.3介入了关键字参数。Python 1.4介入了对复数的内建支持,还包含了采取名字修饰的一种基本形式的数据隐藏[48]

在2000年10月,Python 2.0发布,它介入了列表推导式,这是从函数式编程语言Haskell中引进的;它支持了Unicode,还向垃圾回收系统增加了环检测算法[49]。Python 2.1支持了静态嵌套作用域[50]。Python 2.2进行了重大革新,将Python的类型(用C语言写成)和类(用Python写成)统一入一个层级,使得Python的对象模型成为纯粹而一致的对象模型[51];还介入了迭代器[52],受CLU和Icon启发的生成器[53],和描述器协议[54]。Python 2.3介入了从Dylan引进的方法解析次序[18]。Python 2.4介入了集合类型,和函数修饰器[55]。Python 2.5介入了with语句[56],并在官方实现中介入了抽象语法树[57]

在2008年12月,Python 3.0发布,它对语言做了较大修订而不能完全后向兼容[58]。Python 3发行包括了2to3实用工具,它(至少部分的)自动将Python 2代码转换成Python 3代码[59]。Python 3.4介入了异步I/O模块[60]。Python 3.5介入了类型提示[61],和采用async/await语法的协程[62]。Python 3.8介入了赋值表达式[63][64]。Python 3.9介入了内建的泛化别名类型[65],并在官方实现中介入了新的语法解析器[66]。Python 3.10介入了结构式模式匹配[67],和内建的联合类型[68]。Python 3.11对官方实现进行了优化提速[69]

Python 2.7的产品寿命结束日期最初设定为2015年,由于大量现存代码不能移植到Python 3,而延期支持至2020年[70]。随着Python 2的产品寿命结束,2022年3月14日发布的macOS 12.3已经彻底移除了Python 2[71]。当前只有Python 3的稳定版本3.10、3.11和预览版本3.12正在被完全支持,但仍提供对3.7、3.8和3.9版本的安全性修正[72]

在2022年12月,活跃的Python核心开发者,选举Pablo Galindo Salgado、Gregory P. Smith、Emily Morehouse、Brett Cannon和Thomas Wouters,为2023年度“掌控委员会”的五位成员来领导这个项目[73]

Python的设计理念是“优雅”、“明确”、“简单”,它的一些重要准被合称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面举出其中首要:

  • 优美优于丑陋。明了优于隐晦。
  • 简单优于复杂。复杂优于凌乱。
  • 扁平优于嵌套。稀疏优于稠密。
  • 可读性很重要。

重要的数据科学用第三方软件库有:

  • NumPy:Python的基础性的科学计算软件库,提供了矩阵、线性代数、傅立叶变换等的解决方案。
  • SciPy:用Python实现了MATLAB所有功能的软件库,使用NumPy的多维阵列作为基本数据结构。
  • CuPy:NumPy/SciPy兼容的GPU加速的阵列库[193],它可在NVIDIA CUDA或AMD ROCm平台上充当其直截了当的替代者,来运行现存的NumPy/SciPy代码。
  • pandas:用于数据分析和数据操纵的软件库,建造在NumPy基础上,提供了类似于R语言中同名对象的加标签数据结构“数据帧”[194],和统计函数等。

重要的人工智能机器学习框架有:

  • scikit-learn:基于NumPy、SciPy、Joblib[202]和threadpoolctl[203]的机器学习软件库,实现许多知名的机器学习算法,其绘图功能依赖于matplotlib。
  • TensorFlow:Google开发的一个端到端开源机器学习平台,它提供了Python API[204],其中实现了Keras API[205]。Keras现在是在TensorFlow 2上创建的深度学习高层API。SciKeras是对Keras模块的scikit-learn兼容的包装器[206]
  • PyTorch:Meta在Torch基础上开发的开源的Python软件包,提供了具有强大的GPU加速的张量计算,和创建在基于tape的自动梯度系统上的深度神经网络。skorch是包装了PyTorch的scikit-learn兼容的神经网络库[207]
  • JAX:Google开发的拥有可组合的函数变换的开源机器学习框架[208],结合了修改版本的针对NumPy的自动梯度库Autograd[209],和TensorFlow中的加速线性代数库XLA[210],它使用XLA来在GPU和TPU上编译和运行NumPy程序。JAX除了用于开发新的人工神经网络软件库比如Flax[211],还用于概率编程库比如NumPyro[212],和物理引擎比如Brax[213]
  • Ray:对人工智能及Python应用的运行规模进行伸缩的统一框架[214]。它构成自一个核心的分布式运行时系统,和加速机器学习工作负载的软件库工具箱(Ray AIR)。它支持TensorFlow或PyTorch,可集成于Dask、Apache Spark和Mars[215],可以部署在Kubernetes集群和云端VM之上。

其他种类的库

  • pegen:Python的PEG解析器生成器[216]
  • SymPy:支持数学符号运算如微积分等的软件库,用于提供计算机代数系统。
  • SQLAlchemy:针对关系型数据库的对象关系映射(ORM)工具。
  • Pillow:是基于Python的图像处理库[217],它支持广泛的图形文件格式,分叉于已终止的PIL。
  • PyOpenGL:到OpenGL 1.1-4.4和有关API的最常用跨平台Python绑定[218]
  • ModernGL:在OpenGL 3.3+核心上的Python包装器[219],它简化了简单图形应用如科学模拟、游戏和用户界面的创建。
  • VisPy:高性能交互式2D/3D数据可视化库[220],它通过OpenGL库利用现代GPU的计算能力来显示非常大的数据集。
  • PyCUDA和PyOpenCL:不同于Nvidia尽可能匹配C API的cuda-python[221],PyCUDA提供对CUDA并行计算API的Python风格访问[222];PyOpenCL提供对OpenCL并行计算API的Python风格访问[223]
  • Kompute:通用Vulkan计算框架,针对C++和Python[224]
  • Kornia:基于PyTorch的可微分计算机视觉库[225]
  • pygame:开发视频游戏的Python软件库,基于了SDL库[226]
  • pyglet:Python编写的面向对象的游戏和多媒体库,利用了FFmpeg库。
  • pypdf:能够分割、合并、修剪和转变PDF文件的Python库[227]。创建PDF文件可以采用reportlab[228]
  • python-docx:创建和修改Microsoft Word的docx文档的Python库[229]
  • pythonnet:针对.NET的程序包[230],它可以近乎无缝的集成.NET通用语言运行库(CLR)。
  • Fabric:经由SSH远程执行shell命令的高层库[231],它产生有用的Python对象作为回馈。
  • Prefect:现代工作流程编排框架[232],它易于建造、调度和监控健壮的数据流水线。
  • PyInstaller:将Python应用和它的依赖项捆绑成一个单一的包[233],从而不需要安装Python解释器或任何模块就可以运行应用。