2024年最新【Python学习教程】Python编程基础_python编程 csdn,2024年最新jvm面试题目及答案

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不像编译型语言的源代码会被编译成可执行程序,Python 是直接运行源代码,因此对源代码加密比较困难。

开源是软件产业的大趋势,传统程序员需要转变观念。

学Python,不需要有编程基础!

“编程零基础,可以学习 Python 吗”,这是很多初学者经常问我的一个问题。当然,在计算机方面的基础越好,对学习任何一门新的编程语言越有利。但如果你在编程语言的学习上属于零基础,也不用担心,因为无论用哪门语言作为学习编程的入门语言,总是要有一个开始。

就我个人的观点,Python 作为学习编程的入门语言是再合适不过的。凡是在大学计算机专业学习过 C 语言的同学都感同身受,认为 C 语言不是很好的入门语言,很多曾经立志学习编程的读者,在学习了 C 语言之后,就决心不再学习编程。因此,是否学会 C 语言,好像成为了进入编程行业的筛选标准。

但是,如果将 Python 作为编程入门语言,就不会出现类似 C 语言的那些窘境问题。目前,逐渐有高校开始使用 Python 作为软件专业大学生(甚至也包含非软件专业)的入门编程语言。

本教程始终贯彻的思想就是,零基础也能学 Python,教程的目标就是和初学者一起,从零基础开始学习 Python。因此,编程零基础的你,无需犹豫,尽管放胆来学。

除此之外,很多初学者还面临这样一个问题,那就是教程已经学完啦,教程中的代码也都已经亲自编写并运行通过了,但还是不知道如何开发一个真正的应用程序,面对问题还是不知道如何下手解决。

如果你深有同感,只能说明你缺乏练习,代码编辑量太少。从编程零基础到专业程序员的过程,除了学习更多的基础知识,更要刻意地去培养自己的编程思维,这没有捷径,只有靠不断积累自己的代码量。

当然,增加代码量并不是要我们去盲目地编写代码,如果找不到增加代码量的方向,可以从阅读别人的代码开始。需要注意的是,在阅读他人编写的代码时,要边阅读边思考,多问几个为什么,例如代码为什么要这么写,有什么意图,有没有更简单的方法可以实现等等,必要情况下还可以给代码进行必要的注释。不仅如此,在完全理解他人代码的前提下,还可以试图对代码做修改,实现一些自己的想法。做到这些,才能说明你将别人的代码消化吸收了。

初学者在写代码或者调试代码的过程中,肯定会遇到很多问题,怎么办呢?最好的方法就是借助网络寻找答案,看看类似的问题别人是如何解决的,千万不要总是局限在自己的思维范围中。在这里,给大家推荐一个专门针对编程答疑解惑的网站 Stack OverFlow

Python能干什么,Python的应用领域

Python 作为一种功能强大的编程语言,因其简单易学而受到很多开发者的青睐。那么,Python 的应用领域有哪些呢?

Python 的应用领域非常广泛,几乎所有大中型互联网企业都在使用 Python 完成各种各样的任务,例如国外的 Google、Youtube、Dropbox,国内的百度、新浪、搜狐、腾讯、阿里、网易、淘宝、知乎、豆瓣、汽车之家、美团等等。

概括起来,Python 的应用领域主要有如下几个。

Web应用开发

Python 经常被用于 Web 开发,尽管目前 PHP、JS 依然是 Web 开发的主流语言,但 Python 上升势头更猛劲。尤其随着 Python 的 Web 开发框架逐渐成熟(比如 Django、flask、TurboGears、web2py 等等),程序员可以更轻松地开发和管理复杂的 Web 程序。

例如,通过 mod_wsgi 模块,Apache 可以运行用 Python 编写的 Web 程序。Python 定义了 WSGI 标准应用接口来协调 HTTP 服务器与基于 Python 的 Web 程序之间的通信。

举个最直观的例子,全球最大的搜索引擎 Google,在其网络搜索系统中就广泛使用 Python 语言。另外,我们经常访问的集电影、读书、音乐于一体的豆瓣网(如图 1 所示),也是使用 Python 实现的。

用Python实现的豆瓣网
图 1 用 Python 实现的豆瓣网

不仅如此,全球最大的视频网站 Youtube 以及 Dropbox(一款网络文件同步工具)也都是用 Python 开发的。

自动化运维

很多操作系统中,Python 是标准的系统组件,大多数 Linux 发行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在终端下直接运行 Python。

有一些 Linux 发行版的安装器使用 Python 语言编写,例如 Ubuntu 的 Ubiquity 安装器、Red Hat Linux 和 Fedora 的 Anaconda 安装器等等。

另外,Python 标准库中包含了多个可用来调用操作系统功能的库。例如,通过 pywin32 这个软件包,我们能访问 Windows 的 COM 服务以及其他 Windows API;使用 IronPython,我们能够直接调用 .Net Framework。

通常情况下,Python 编写的系统管理脚本,无论是可读性,还是性能、代码重用度以及扩展性方面,都优于普通的 shell 脚本。

人工智能领域

人工智能是项目非常火的一个研究方向,如果要评选当前最热、工资最高的 IT 职位,那么人工智能领域的工程师最有话语权。而 Python 在人工智能领域内的机器学习、神经网络、深度学习等方面,都是主流的编程语言。

可以这么说,基于大数据分析和深度学习发展而来的人工智能,其本质上已经无法离开 Python 的支持了,原因至少有以下几点:

  1. 目前世界上优秀的人工智能学习框架,比如 Google 的 TransorFlow(神经网络框架)、FaceBook 的 PyTorch(神经网络框架)以及开源社区的 Karas 神经网络库等,都是用 Python 实现的;
  2. 微软的 CNTK(认知工具包)也完全支持 Python,并且该公司开发的 VS Code,也已经把 Python 作为第一级语言进行支持。
  3. Python 擅长进行科学计算和数据分析,支持各种数学运算,可以绘制出更高质量的 2D 和 3D 图像。

VS Code 是微软推出的一款代码编辑工具(IDE),有关它的下载、安装和使用,后续章节会做详细介绍。

总之,AI 时代的来临,使得 Python 从众多编程语言中脱颖而出,Python 作为 AI 时代头牌语言的位置,基本无人可撼动!

网路爬虫

Python 语言很早就用来编写网络爬虫。Google 等搜索引擎公司大量地使用 Python 语言编写网络爬虫。

从技术层面上将,Python 提供有很多服务于编写网络爬虫的工具,例如 urllib、Selenium 和 BeautifulSoup 等,还提供了一个网络爬虫框架 Scrapy。

科学计算

自 1997 年,NASA 就大量使用 Python 进行各种复杂的科学运算。

并且,和其它解释型语言(如 shell、js、PHP)相比,Python 在数据分析、可视化方面有相当完善和优秀的库,例如 NumPy、SciPy、Matplotlib、pandas 等,这可以满足 Python 程序员编写科学计算程序。

游戏开发

很多游戏使用 C++ 编写图形显示等高性能模块,而使用 Python 或 Lua 编写游戏的逻辑。和 Python 相比,Lua 的功能更简单,体积更小;而 Python 则支持更多的特性和数据类型。

比如说,国际上指明的游戏 Sid Meier’s Civilization(文明,如图 2 所示)就是使用 Python 实现的。

img
图 2 Python 开发的游戏

除此之外,Python 可以直接调用 Open GL 实现 3D 绘制,这是高性能游戏引擎的技术基础。事实上,有很多 Python 语言实现的游戏引擎,例如 Pygame、Pyglet 以及 Cocos 2d 等。

以上也仅是介绍了 Python 应用领域的“冰山一角”,例如,还可以利用 Pygame 进行游戏编程;用 PIL 和其他的一些工具进行图像处理;用 PyRo 工具包进行机器人控制编程,等等。有兴趣的读者,可自行搜索资料进行详细了解。

怎样学习Python才能成为高手?

在学习过程中,很多小伙伴经常抱怨,计算机编程语言种类太多,根本学不过来,可能用了 Java 很多年,突然最近的项目需要用 Python,就感到不知所措,压力山大。

再举个例子,Facebook 的主流语言是 Hack(PHP 的进化版本),但对于刚刚入职的工程师而言,100 个里至少有 95 个之前根本没有用过 Hack 或者 PHP。不过,这些人上手都特别快,基本上只需要 1~2 周,日常编程就变得毫无压力。

那么,他们是怎么做到的呢?

编程语言都是相通的

首先,如果你具有一定的编程基础,接触一门新的编程语言时会发现,不同的编程语言之间其实是相通的,因为编程语言本就是人类控制计算机的一系列指令,即便是不同的编程语言,它们在语法规则方面也大同小异。

因此,在原有编程基础上再学习一门新的编程语言,并没有那么难。学习过程中,首先要做到的就是明确区别。例如,学习 Python 的条件和循环语句时,可以比对 C 语言或者 C++ 语言的语法是怎样的;学习 Python 中的字符串相加时,可以对比 Java 语言中字符串相加的语法。

除了能够明确区分各编程语言的不同点,还要能将它们联系起来灵活运用。比如说,Python 语言的优势是擅长数据分析,因此它广泛应用于人工智能(AI)、机器学习等领域(例如机器学习用到的 TensorFlow 框架就是用 Python 写的),但是涉及到底层的矩阵运算等操作时,就需要依赖 C++ 语言,因为它的速度快,运行效率更高。

事实上,很多公司都是根据不同的需求选择不同的编程语言进行开发。毕竟,哪怕只是几十到几百毫秒的速度差距,对用户体验来说都是决定性的。

Python对初学者很友好

如果 Python 是你接触的第一门编程语言,那也不必担心。我们知道,虽然同为人机交互的桥梁,但 Python 比 C++、Java 等,语言更简洁,也更接近英语,对初学者很友好,这也是 Python 语言的一个显著特点。

对于初学者来说,要做的就是专注于 Python 这一门语言,明确学习的重点,把握好学习节奏,由浅入深循序渐进地学习。根据本人多年的学习工作经验,把编程语言的学习分为以下 3 步,无论你是否有编程基础,都可以对照着来做。

1) 多实践,积累代码量

任何一门编程语言,其囊括的知识面都是非常广泛的,从基本的变量赋值、条件循环、到文件操作、并发编程等,千万不要等到把所有知识点都学完了才开始练习,因为到那时你会发现,前面好不容易记住的知识都忘记了。

学习编程,是十分讲究实战的,没有捷径可走,越早练习,练得越多越勤,学习效果就越好。

2) 时刻注意代码规范

学习编程语言,在追求快和高效的同时,每一种编程语言都有必要的编码规范,一定不能忽略。

要想成为一名优秀的程序员,从起步阶段就要刻意地去培养自己的编程规范。例如,在刚开始编写代码时,不要将原本多行的代码全部写到一行,也不要随便用 a、b、c 等字母作为变量的名称。

3) 开发经验是必不可少的

要想真正熟练地掌握 Python(或者其它编程语言),拥有大中型产品的开发经验是必不可少的,它会让你站得更高,望得更远。

例如,我们几乎每天都会用搜索引擎,但你了解一个搜索引擎的服务器端实现吗?这是一个典型的面向对象设计,需要定义一系列相关的类和函数,还要从产品需求、代码复杂度、效率以及可读性等多个方面综合考量,同时在上线后还要进行各种优化等。

本教程中无法让你完成一个上亿用户级产品的实践,但设置有一些小项目,可以帮你掌握必要的开发知识。最后,这里为你准备了一章 Python 学习的知识图谱,涵盖了 Python 的核心知识,其中的大部分内容本教程都会做详细讲解。

img
Python知识体系框架(点击查看高清大图

Python版本区别,Python 3和Python 2区别详解

Python 2.x 版本相比,Python 3.x 版本在语句输出、编码、运算和异常等方面做出了一些调整,本节就对这些调整一一做一下简单介绍。

本节适合有 Python 基础的学员阅读,初学者可先跳过本节,整体学完 Python 之后,再回过头来阅读。

Python 3.x print函数代替了print语句

在 Python2.x 中,输出数据使用的是 Print 语句,例如:

print “3,4”
3,4
或者
print(3,4)
(3,4)

但是在 Python 3.x 中,print 语句没有了,取而代之的是 print 函数,例如:

print(3,4)
3 4

如果还像 Python 2.x 中那样使用 print 语句,Python 编译器就会报错,例如:

print “3,4”
File “”, line 1
print “3,4”
^
SyntaxError: Missing parentheses in call to ‘print’

Python 3.x 默认使用 UTF-8 编码

相比 Python 2.x 默认采用的 ASCII 编码,Python 3.x 默认使用 UTF-8 编码,可以很好地支持中文或其它非英文字符。

例如,输出一句中文,使用 Python 2.x 和 Python 3.x 的区别如下:

#Python 2.x

str =“C语言中文网”
str
‘C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91’

#Python 3.x

str =“C语言中文网”
str
‘C语言中文网’

不仅如此,在 Python 3.x 中,下面的代码也是合法的:

中国=“China”
print(中国)
China

Python 3.x 除法运算

和其他语言相比,Python 的除法运算要高端很多,它的除法运算包含 2 个运算符,分别是 / 和 //,这 2 个运算符在 Python 2.x 和 Python 3.x 的使用方法如下:

/ 运算符

在 Python 2.x 中,使用运算符 / 进行除法运算的方式和 Java、C 语言类似,整数相除的结果仍是一个整数,浮点数除法会保留小数点部分,例如:

1/2
0
1.0/2
0.5

但是在 Python 3.x 中使用 / 运算符,整数之间做除法运算,结果也会是浮点数。例如:

1/2
0.5

运算符 //

使用运算符 // 进行的除法运算叫做 floor 除法,也就是输出不大于结果值的一个最大的整数(向下取整)。此运算符的用法在 Python 2.x 和Python 3.x 中是一样的,举个例子:

#Python 2.x

-1//2
-1

#Python 3.x

-1//2
-1

Python 3.x 异常

在 Python 3.x 版本中,异常处理改变的地方主要在以下几个方面:

  1. 在 Python 2.x 版本中,所有类型的对象都是直接被抛出的,但是在 Python 3.x 版本中,只有继承 BaseException 的对象才可以被抛出。
  2. 在 Python 2.x 版本中,捕获异常的语法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 关键字,捕获异常的语法变更为 “except Exception as var:”。
  3. 在 Python 3.x 版本中,处理异常用 “raise Exception(args)”代替了“raise Exception,args”。
  4. Python 3.x 版本中,取消了异常类的序列行为和 .message 属性。

有关 Python 2.x 版本和 Python 3.x 版本处理异常的示例代码如下所示:

#Python 2.x

try:
… raise TypeError,“类型错误”
… except TypeError,err:
… print err.message

类型错误

#Python 3.x

try:
… raise TypeError(“类型错误”)
… except TypeError as err:
… print(err)

类型错误

Python 3.x 八进制字面量表示

在 Python 3.x 中,表示八进制字面量的方式只有一种,并且必须写成“0o1000”这样的方式,原来“01000”的方式不能使用了。举个例子:

#Python 2.x

0o1000
512
01000
512

#Python 3.x

01000
File “”, line 1
01000
^
SyntaxError: invalid token
0o1000
512

Python 3.x 不等于运算符

Python 2.x 中的不等于运算符有 2 种写法,分别为 != 和 <>,但在 Python 3.x 中去掉了 <>,只有 != 这一种写法,例如:

#Python 2.x

1!=2
True
1<>2
True

#Python 3.x

1!=2
True
1<>2
File “”, line 1
1<>2
^
SyntaxError: invalid syntax

Python 3.x 数据类型

Python 3.x 中对数据类型也做了改动,比如说:

  • Python 3.x 去除了 long 类型,现在只有一种整形 int,但它的行为就像是 Python 2.x 版本中的 long。
  • Python 3.x 新增了 bytes 类型,对应 Python 2.x 版本的八位串,定义 bytes 字面量的方法如下所示:

b=b’China’
type(b)
<type ‘bytes’>

字符串对象和 bytes 对象可以使用 .encode() 或者 .decode()方法相互转化,例如:

s=b.decode()
s
‘China’
b1=s.encode()
b1
b’China’

  • Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函数都被废弃。同时去掉的还有 dict.has_key(),改为用 in 替代。

本节所介绍的只是 Python 3.x 的一部分改动,由于篇幅有限,这里不再具体指出,教程中涉及到时再给大家详细介绍。

Python 2.x和Python 3.x,初学者应如何选择?

Python 自发布以来,主要有 3 个版本,分别是:

  1. 1994 年发布的 Python 1.0 版本(已过时);
  2. 2000 年发布的 Python 2.0 版本,截止到 2019 年 3 月份,已经更新到 2.7.16;
  3. 2008 年发布的 Python 3.0 版本,截止到 2019 年 3 月份,已经更新到 3.7.3;

3 个版本中,Python 3.0 是一次重大的升级,为了避免引入历史包袱,Python 3.0 没有考虑与 Python 2.x 的兼容,这也就导致很长时间以来,Python 2.x 的用户不愿意升级到 Python 3.0。

除此之外,造成目前这种状况的另一个原因是,将现有应用从 Python 2.x 迁移到 Python 3.x 是一项不小的挑战。虽然有 2to3(后续会介绍)之类的工具可以进行代码的自动转换,但无法保证转换后的代码 100% 正确。而且,如果不做人工修改的话,转换后的代码性能可能还不如转换前。因此,将现有的复杂代码库迁移到 Python 3.x 上可能需要付出巨大的精力和成本,某些公司无法负担这些成本。

目前,根据统计显示,使用 Python 2.x 的开发者仍占 63.7%,而Python 3.x 的用户占 36.3%,由此可见,使用 Python 2.x 的用户还是占多数。在 2014 年,Python 创始人宣布,将 Python 2.7 支持时间延长到 2020 。

那么,初学者应该选择什么版本呢?本教程建议大家选择 Python 3.x 版本,理由有以下几点:

  • 使用 Python 3.x 已经是大势所趋

目前,虽然使用 Python 2.x 的开发者居多,但使用 Python 3.x 的开发者正在迅速增加,如图 1 所示:

Python 3.x 是大势所趋
图 1 Python 3.x 是大势所趋

另外,根据 PEP-404 这份文档,Python 2.x 版本将不会再发布 2.8 版本,且未来非常重要的项目(如 Django、Flask 和 Numpy)可能都将放弃对 2.x 的支持,仅支持 Python 3.x。因此,从长远来看,学习 Python 3.x 只有好处。

本教程也是以 Python 3.x 来介绍 Python 编程,因此,为了同步,强烈建议初学者选择 Python 3.x。

  • Python 3.x在 Python 2.x 的基础上做了功能升级
    Python 3.x 对 Python 2.x 的标准库进行了一定程序的重新拆分和整合,比 Python 2.x 更容易理解,特别是在字符编码方面。Python 2.x 中对于中文字符串的支持性能不够好,需要编写单独的代码对中文进行处理,否则不能正确显示中文,而 Python 3.x 已经将该问题成功解决了。
  • Python 3.x 和 Python 2.x 思想基本是共通的
    Python 3.x 和 Python 2.x 思想基本上是共通的,只有少量的语法差别,学会的 Python 3.x,只要稍微花点时间学习 Python 2.x 的语法,即可灵活运用这两个不同版本了。

注意,选择 Python 3.x 也不是没有弊端,很多扩展库的发行总是会滞后于 Python 的发行版本,甚至目前还有很多库不支持 Python 3.x。

因此,在选择 Python 时,一定要先考虑清楚自己的学习目的,比如说,打算做哪方面的开发,此方向需要用法哪些扩展库,以及这些扩展库支持的最高 Python 版本等,明确这些问题后,再选择适合自己的版本。

关于 Python 3.x 和 Python 2.x 具体的区别,可阅读《Python 3 和 Python 2 区别》一节。

Python 2to3:自动将Python 2.x代码转换成Python3.x代码

本节内容针对已有 Python 基础的学员,初学者可直接跳过本节内容,继续往下学习。

由于 Python 2.x 和 Python 3.x 的差别较大,因此 Python 2.x 的多数代码无法直接在 Python 3.x 环境中运行。而由于兼容性的原因,我们在网络上查找的资源多数是Python 2.x 的代码,如果想要在 Python 3.x 环境下运行,就需要修改源代码。

针对这一问题,Python 官方提供了一个将 Python 2.x 代码自动转换为 Python 3.x 代码的小工具,它就是 2to3.py,通过该工具可以将大部分 Python 2.x 代码转换为 Python 3.x 代码。

接下来,就给大家详细介绍一下,如何使用 2to3.py 将 Python 2.x 代码转换成 Python 3.x 代码。

假设我们现在有 Python 2.x 的代码,要将其转换成 Python 3.x 代码,需要按照一下几个步骤进行操作:

  1. 找到 2to3.py 文件,该文件保存在 Python 安装路径下的 “Tools\scripts” 目录中。比如说,我们将 Python 安装在了“G:\Python\Python36”目录中,那么 2to3.py 文件则保存在 “G:\Python\Python36\Tools\scripts ”目录中,如图 1 所示:

Python 2.x 转 Python 3.x 的工具
图 1 Python 2.x 转 Python 3.x 的工具
2. 将 2to3.py 文件复制到要转换代码所在的目录中。
3. 打开命令行窗口,并进入要转换代码文件所在的目录。例如,该文件保存在“E:\change”目录下,则在命令行窗口中可输入如下命令:

C:\users\Demo>E:
E:>cd change
E:\change>
4. 调用 2to3.py 工具转化代码。例如,要转化的文件名称为 demo.py 文件,可以使用下面的代码:

Python 2to3.py -w demo.py

执行此行代码之后,将会在 “E:\change” 目录下创建一个 demo.py 文件的备份文件,名称为 demo.py.bak,同时,原 demo.py 文件的内容被转换为 Python 3.x 对应的代码。

注意,在使用 2to3.py 转换 python 2.x 代码前,尽量不要把要转换的代码保存在 C 盘中,因此如果保存在 C 盘,可能会因权限问题导致转换不能正常完成。

Python PEP文档:及时追踪Python最新变化

通过前面章节对 Python 语言的介绍,到目前为止,Python 已经历经了 3 个版本的迭代,读者不禁要问,Python 为什么要不断的升级呢?作为程序猿的我们,怎样才能及时了解 Python 的最新变化呢?

首先解决第一个问题,Python 不断升级的原因很简单,因为用户有了更高的需求。人们之所以设计新的编程语言,是因为他们发现现有的语言已经无法以最佳方式来解决问题。此外,Python 的使用范围越来越广,人们发现它有许多可以改进的地方,应该做出这样的改进。

Python 的很多改进都是有特定应用领域的需求驱动的,其中最重要的领域是 Web 开发,这一领域需要 Python 改进对并发的处理。

还有一些是由于 Python 的历史原因导致的,随着使用 Python 的不断深入,发现了 Python 的一些不合理之处。比如,有些是标准库模块结构混乱或冗余,有些是程序设计缺陷。

那么,怎样才能及时追踪 Python 的更新动态呢?这就需要借助 Python PEP 文档。

Python PEP文档

要知道,虽然各种各样的 Python 语句修改方案会以邮件列表的形式进行讨论,但 Python 社区有一种应对变化的固定方法,即只有发布了名为 PEP 的新文档,新的变化才会生效。

PEP(Python Enhancement Proposal),全称是 Python 改进方案。它是提交 Python 变化的书面文档,也是社区对这一变化进行讨论的出发点。值得一提得是,PEP 文档的整个目的,格式以及工作流程的标准格式,都包含 PEP 1 文档中。

PEP 文档对 Python 十分重要,它主要有以下 3 个用途:

  1. 通知:汇总 Python 核心开发者重要的信息,并通过 Python 发布日程;
  2. 标准化:提供代码风格、文档或者其他指导意见;
  3. 设计:对提交的功能进行说明。

所有提交过的 PEP 都被汇总在 PEP 0 文档中。

需要注意的是,如果读者对 Python 语言的未来发展方向感兴趣,但苦于没有时间追踪 Python 邮件列表中的讨论,那么 PEP 0 是信息来源的不错选择,它会告诉你哪些文档已被接受但尚未实施,哪些文档仍在审议中。

不仅如此,PEP 还有其他的用途,比如说,人们常常会问以下类似的问题:

  • A 功能为什么要以这样的方式运行?
  • Python 为什么没有 B 功能?

多数情况下,关于该功能的某个 PEP 文档已经给出了上述问题的详细回答。

另外,还有关于 Python 语言功能的 PEP 文档并没有通过,这些文档可作为历史资料来参考。

Python底层是用什么语言实现的?

确切地说,本教程介绍的是用 C 语言编写实现的 Python,又称为 CPython。平时我们所讨论的 Python,指的其实就是 CPython。

随着编程语言的不断发展,Python 的实现方式也发生了变化,除了用 C 语言实现外,Python 还有其他的实现方式。例如,用 Java 语言实现的 Python 称为 JPython,用 .net 实现的 Python 称为 IronPython 等等。

Python 的这些实现方式虽然诞生比 CPython 晚,但一直在努力地跟上主流,并在不同的生产环境中不断地使用并推广 Python。

Python 的实现方式有很多种,Python 官网上介绍了 20 多种语言变体、方言或 C 语言之外的 Python 解释器实现。其中一些只是实现了语言核心语法、功能和内置扩展的一个子集,但至少有几个与 CPython 几乎完全兼容。更重要的是,在这些不同的实现方式中,虽然有些只是玩具项目或实验,但大部分都是为了解决某些实际问题而创建的,这些问题要么使用 CPython 无法解决,要么需要开发人员花费巨大的精力,这里举几个例子:

  • 在嵌入式系统中运行 Python 代码。
  • 与运行框架(如 Java 或 .NET)或其他语言做代码集成。
  • 在 Web 浏览器中运行 Python 代码。

由于受到篇幅的限制,本节仅给大家介绍几种 Python 开发人员最常用的几种 Python 实现方式。

Stackless Python

Stackless Python 自称 Python 增强版。之所以名为 Stackless(无栈),是因为它没有依赖 C 语言的调用栈,实际上就是对 CPython 做了一些修改,添加了一些新的功能。

在新添加的功能中,最重要就是由解释器管理的微线程,用来替代依赖系统内核上下文切换和任务调度的普通线程,既轻量化又节约资源。

Stackless Python 最新可用的版本是 2.7.9 和 3.3.5,分别实现的是 Python 2.7 和 3.3。在 Stackless Python 中,所有的额外功能都是内置 stackless 模块内的框架。

Stackless Python 并不是最有名的 Python 实现,但很值得一提,因为它引入的思想对编程语言社区有很大的影响。例如,将 Stackless Python 中的内核切换功能提取出来并作为一个独立包发布,名为 greenlet,是许多有用的库和框架的基础。

此外,Stackless Python 的大部分功能都在 PyPy 中重新实现,PyPy 是另一个 Python 实现,我们将稍后介绍。

JPython

Jython 是 Python 语言的 Java 实现。它将代码编译为 Java 字节代码,开发人员在 Python 模块中可以无缝使用 Java 类。

Jython 允许人们在复杂应用系统(例如 J2EE)中使用 Python 作为顶层脚本语言,它还将 Java 应用引入到 Python 中,一个很好的例子就是,在 Python 程序中可以使用 Apache Jackrabbit(这是一个基于 JCR 的文档仓库 API)。

Jython 最新可用的版本是 Jython 2.7,对应的是 Python 2.7 版。它宣称几乎实现了 Python 所有的核心标准库,并使用相同的回归测试套件。Jython 3.x 版正在开发中。

Jython 与 CPython 实现的主要区别如下所示:

  • 真正的 Java 垃圾回收,而不是引用计数。
  • 没有全局解释器锁(GlobakInterpreter Lock,GIL),在多线程应用中可以充分利用多个内核。

这一语言实现的主要缺点是缺少对 C/Python 扩展 API 的支持,因此用 C 语言编写的 Python 扩展在 Jython 中无法运行。这种情况未来可能会发生改变,因为 Jython 3.x 计划支持 C/Python 扩展 API。

某些 Python Web 框架(例如 Pylons)被认为是促进 Jython 的开发,使其可用于 Java 世界。

IronPython

IronPython 将 Python 引入 .NET 框架中,这个项目受到微软的支持,因为 IronPython 的主要开发人员都在微软工作。可以这么说,IronPython 是推广语言的一种重要实现。

除了 Java,.NET社区是最大的开发者社区之一。

值得一提的是,微软提供了一套免费开发工具,名为 PTVS(Python Tools for Visual Studio,用于Visual Studio 的 Python 工具),可以将 Visual Studio 转换为成熟的 Python IDE。这是作为 Visual Studio 的插件发布的,在 GitHub 可以找到其开源代码。

IronPython 最新的稳定版本是 2.7.5,与 Python 2.7 兼容。与 Jython 类似,Python 3.x 的实现也在开发中,但还没有可用的稳定版本。

虽然 .NET 主要在微软 Windows 系统上运行,但是 IronPython 也可以在 Mac OS X 和 Linux 系统上运行,这一点要感谢 Mono,一个跨平台的开源 .NET 实现。

与 CPython 相比,IronPython 的主要区别或优点如下:

  • 与 Jython 类似,没有全局解释器锁(Global Interpreter Lock,GIL),在多线程应用中可以充分利用多个内核。
  • 用 C# 和其他 .NET 语言编写的代码可以轻松集成到 IronPython 中,反之亦然。
  • 通过 Silverlight,在所有主流 Web 浏览器中都可以运行。

说到弱点,IronPython 也与 Jython 非常类似,因为它也不支持 C/Python 扩展 API。对于想要使用主要基于 C 扩展的 Python 包(例如 NumPy)的开发人员来说,这一点很重要。

有一个叫作 ironclad 的项目,其目的是在 IronPython 中无缝使用这些扩展,其最新支持的版本是2.6,开发已经停止。

PyPy

PyPy 可能是最令人兴奋的 Python 实现,因为其目标就是将 Python 重写为 Python。在 PyPy 中,Python 解释器本身是用 Python 编写的。

在 Python 的 CPython 实现中,有一个 C 代码层来实现具体细节。但在 PyPy 实现中,这个 C 代码层用 Python 完全重写。这样,你可以在代码运行期间改变解释器的行为,并实现 CPython 难以实现的代码模式。

目前 PyPy 的目的是与 Python 2.7 完全兼容,而 PyPy3 则与 Python 3.2.5 版兼容。

以前对 PyPy 感兴趣主要是理论上的原因,只有喜欢深入钻研语言细节的人才会对它感兴趣。PyPy 通常不用于生产环境,但这些年来这种状况己经发生改变,PyPy 通常比 CPython 实现要快得多。基于这一特性,使得越来越多的开发人员决定在生产环境中切换到 PyPy。

PyPy 与 CPython 实现的主要区别在于以下几个方面:

  • 使用垃圾回收,而不是引用计数。
  • 集成跟踪 JIT 编译器,可以显著提高性能。
  • 借鉴 Stackless Python 在应用层的无栈特性。

与几乎所有其他的 Python 实现类似,PyPy 也缺乏对 C/Python 扩展 API 的完全官方支持。但它至少通过 CPyExt 子系统为 C 扩展提供了某种程度的支持,虽然文档不完整,功能也尚未完善。此外,社区正在努力将 NumPy 迁移到 PyPy 中,因为这是最需要的功能。

了解Jupyter Notebook,你已然超越了90%的Python程序员

在 2019年 8 月份 TOIBE 编程语言社区公布的编程语言排行榜中,Python 已经超过了 C++,稳居排行榜第 3 名(如图 1 所示)。

TOIBE编程社区排行榜
图 1 TOIBE 编程社区排行榜

我们应该知道,Python 之所有在 14 年后“崛起”,得益于机器学习和数学统计应用的兴起。至于 Python 适合数学统计和机器学习的原因,很多读者可能并不会想到,Jupyter Notebook 功不可没。可以好不夸张地说,作为一名 Python 工程师,如果不会使用 Jupyter Notebook,可能会真的太落伍了。

本节,就带领大家学习一下 Jupyter Notebook。

什么是Jupyter Notebook

说了这么多,到底什么是 Jupyter Notebook 呢?按照 Jupyter 创始人的说法,起初他是想做一个综合 Ju(Julia)、Py(Python)和 R 三种科学运行语言的计算工具平台,所以将其命名为 Jupyter。

Jupyter 发展到现在,已经成为了一个几乎支持所有语言,能够把软件代码、计算输出、解释文档、多媒体资源整合在一起的多功能科学运行平台。Jupyter Notebook 的工作界面如图 2 所示。

Jupyter Notebook界面
图 2 Jupyter Notebook界面(点此查看高清大图

如图 2 所示,只要直接输入代码并运行,它就会直接在代码下面显示输出结果。那么,Jupyter Notebook 对 Python 的影响真的有那么大吗?

Jupyter Notebook的影响力

衡量一个技术的影响力,或者说想利用自己的技术影响世界时,必定绕不开技术对教育界的影响力。

以微软的 Word 文本处理系统为例,从纯技术角度来讲,它的单机设计理念早已过时,但以 Google Doc 为代表的在线文档系统,并没有想象中实现对 Word 的降维打击。最直接的原因归咎于用户习惯,多数用户已经习惯使用 Word 来编辑、修改文档啦,之所以会这样,是因为我们从小学、中学,一直到大学期间,都在学习使用 Word。而且到了工作中,老员工还会带着新员工继续使用 Word。

从 2017 年开始,已经有大量的北美顶尖计算机课程开始使用 Jupyter Notebook 作为教学工具,而在这之前,一直使用的都是 Python 命令行的形式。不仅如此,Jupyter Notebook 在工业界的影响力更大。

例如,在 Facebook 中,几乎所有的中小型程序(比如内部的线下分析软件,机器学习模块的训练等)都是借助与Jupyter Notebook完成。同时,在硅谷其他的一线大厂中,也全部使用 Jupyter Notebook(他们用的是改进定制型的Jupyter Notebook,名称 Google Colab)。

了解了以上这些,相信你已经认可了 Jupyter Notebook 的江湖地位。

但需要注意的是,不是说那个技术流行,就盲目跟从。对于技术的选择,要学习独立的思考,切勿人云亦云。以 Facebook 为例,之所以它选择 Jupyter Notebook 等技术,很大程序上因为它有几百个产品线,几万个工程师,而如果是几个人的团队,使用同样的技术反倒成了拖累。

Jupyter Notebook的优势

这里给大家总结了几点 Jupyter Notebook 的优势:

1) 整合了所有资源

在软件开发过程中,频繁地进行上下文切换,会影响生产效率。举个例子,假设你需要切换窗口去看一些文档,再切换窗口去用另一个工具画图,不断地切换窗口就会成为影响效率的因素。

而 Jupyter Notebook 则不同,它会将所有和软件编写的资源全部放在一个地方,无需切换窗口就可以轻松找到。

2) 交互性编程体验

在机器学习和数据统计领域,Python 编程的实验性特别强,比如为了测试 100 种不同的方法,有时就需要将一小块代码重写 100 遍,在这种情况下,如果使用传统的 Python 开发流程,每一次测试都要将所有代码重新跑一遍,会花费开发者很多时间。

Jupyter Notebook 引进了 Cell 的概念。每次测试可以只跑一小块的代码,并且在代码下方立刻就能看到运行结果。

如此强的交互性,满足了 Python 程序员可以专注于问题本身,不会被频繁的工具链拖累,也不用在命令行之间来回切换,所有工作都能在 Jupyter Notebook 上完成。

3) 轻松运行他人编写的代码

同样是在机器学习和数学统计领域,我们可能会借鉴他人分享的代码,但当我们拷贝过来想要运行时,却需要使用 pip 安装一大堆依赖的库,足以让人抓狂。而 Jupyter Notebook 就可以解决这个问题。

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值