感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
JavaScript:
前端开发:JavaScript 是 Web 前端开发的核心语言,用于构建交互式用户界面和动态网页。后端开发:Node.js 让 JavaScript 也能用于服务器端开发,它有着强大的异步编程能力和丰富的第三方模块。游戏开发:JavaScript 在游戏开发中也有一席之地,尤其是通过框架如 Phaser.js 和 Three.js 实现的 Web 游戏。
Java:
企业级应用开发:Java 是构建大型企业级应用程序的首选语言,它的强类型和面向对象特性使得在大型项目中保持代码的可维护性和可扩展性。Android 开发:Android 应用程序的主要编程语言是 Java,开发者可以利用 Java 的强大功能构建丰富的移动应用。大数据和云计算:Java 在大数据处理和云计算领域得到广泛应用,如 Apache Hadoop 和 Apache Spark 等项目就是基于 Java 构建的。
C/C++:
系统级编程:C/C++ 是系统级编程的主要选择,包括操作系统、嵌入式系统和驱动程序开发等领域。游戏开发:大型游戏引擎如 Unity 和 Unreal Engine 使用 C/C++ 作为主要的开发语言,因为它们对性能的要求非常高。高性能计算:C/C++ 被广泛应用于需要高性能的科学计算和工程应用,如数值模拟、仿真和计算机视觉等领域。
C#:
游戏开发:Unity 引擎的主要开发语言是 C#,因此在游戏开发领域有广泛应用。Windows 应用程序开发:C# 是
.NET
框架的首选语言,用于开发 Windows 应用程序、桌面应用程序和服务器端应用程序。Web 开发:通过 ASP.NET,C# 也可用于 Web 开发,尤其是针对 Microsoft 技术栈的企业应用。
Swift:
iOS 和 macOS 应用程序开发:Swift 是苹果公司推出的编程语言,用于开发 iOS 和 macOS 应用程序,它结合了功能强大和易用性。应用程序性能优化:Swift 提供了更安全和更快的运行时性能,使得开发者能够构建高性能的应用程序。
Ruby:
Web 开发:Ruby on Rails 是一种流行的 Web 框架,Ruby 语言的简洁和优雅性使其成为快速构建 Web 应用程序的理想选择。
快速原型开发:Ruby 的简洁性和高级特性使其成为快速原型开发的有力工具。
Go:
并发编程:Go 语言原生支持并发编程,提供了轻量级线程(goroutines)和通信机制(channels),适用于构建高并发系统。
微服务开发:Go 语言的简洁性和性能使其成为构建微服务架构的理想选择,例如,Docker 和 Kubernetes 就是使用 Go 语言编写的
可以将不同的编程语言比喻成各国语言,为了表达同一个意思,可能使用不同的语句。例如,表达 "美女"
:
汉语:美女
英语:beauty
日语:ビューティ
法语:Beauté
对于编程语言来说,执行同一个操作,也需要使用不同的语句。举个简单的例子,在屏幕上显示 "hello,美女"
:
C语言:printf("hello,美女");
Python:print("hello,美女")
JavaScript:console.log("hello,美女");
Java:System.out.println("hello,美女");
通过例子可以看出,编程语言和人类语言类似,都由直观的词汇组成,我们很容易理解它的意思。比如在 Python 中,我们使用 print() 让计算机在屏幕上显示文字,print 英文原意为打印、输出的意思,我们能够轻易地理解它;同时,我们还要注意语句格式,把待显示的内容 "hello,美女"
加上英文状态的引号 ""
放在括号内,这是 Python 语言规定的格式,我们必须这样写。每一种编程语言都有固定的词汇和格式,学习一门编程语言,本质上就是学习如何使用这些词汇和格式。总结: 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。习惯上,我们将这一条条指令称为代码,这些代码共同组成一个计算机程序,而用编程语言来编写程序的过程称为编码。
补充:在之前提到的编程语言,都是高级计算机语言,设计它们的目的是为了方便程序员理解和使用。但严格意义上来说,计算机只能理解一种非常低级的编程语言,也就是机器语言。
一定位数的二进制的0和1组成的序列,也称为机器指令
机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错
举个简单的例子,计算 2 个数的和,机器语言需要控制计算机依次完成以下操作:
- 将位于内存空间位置在 0x0001 的数加载到 CPU 中;
- 再把位于内存空间位置在 0x0010 的数也加载到 CPU中;
- 在 CPU 中,对这 2 个数做求和操作;
- 将结果存储在位置为 0x0011 的内存空间。
CPU(Central Processing Unit,简称 CPU)即中央处理器,是计算机的运算和控制核心,相当于计算机的大脑,所有的机器指令都是由 CPU 负责执行的。可以看到,对 2 个数执行求和操作需要做这么多工作,这还只是笼统地描述,实际上会更加复杂。而使用 Python 这样的高级语言,对 2 个数求和可以直接用 a + b 的形式表示。下面使用 Python 进行演示:
这种方式虽然轻便快捷,但同时也带来了问题,我们需要设计一种方法,将高级语言翻译成计算机可以执行的机器语言。目前,有两种方法可以实现,分别是 编译器 和 解释器。 使用编译器将自身转换成机器语言的高级语言,通常称为 编译型语言; 而使用解释器将自身转换成机器语言的高级语言,称为 解释型语言, Python 就是一种解释型编程语言。
小结:
机器语言:
一定位数的二进制的0和1组成的序列,也称为机器指令
机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错
汇编语言:
用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
汇编语言写好的程序需要汇编程序转换成机器指令
汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言
低级语言:
机器语言、汇编语言都是面向机器的语言,都是低级语言
不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序
高级语言:
接近自然语言和数学语言的计算机语言
高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序
1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译
人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理
语言越高级,越接近人类的自然语言和数学语言。语言越低级,越能让机器理解。高级语言和低级语言之间需要一个转换的工具:编译器、解释器,关于编译型语言和解释型语言的含义和区别,后续小节会进行详细介绍。
二、编译型语言和解释型语言的区别
通过高级语言编写的源码,我们能够轻松理解,但对于计算机来说,它只认识二进制指令,源码就是天书,根本无法识别。源码要想执行,必须先转换成二进制指令。
所谓二进制指令,也就是由 0 和 1 组成的机器码,能被计算机直接识别并执行。
然而,究竟在什么时候将源代码转换成二进制指令呢?不同的编程语言有不同的规定:
- 有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(比如 Windows 下的
.exe
文件),比如C语言、C++、Golang、汇编语言等,它们都属于 编译型语言,使用的转换工具称为 编译器。 - 有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell 等,这类编程语言称为 解释型语言,使用的转换工具称为 解释器。
简单地理解,编译器和解释器其实就是一个 "翻译工具"
,对源代码进行 "翻译"
是一个很复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等五个步骤,期间涉及到复杂的算法和硬件架构,有兴趣的读者请参考 《编译原理》 一书,这里不再赘述。编译型语言和解释型语言的执行流程如下所示:
总结:对于编译型语言来说,在执行之前先要经过编译器将源码转换成 CPU 可识别的机器码文件(比如 Windows 下的 .exe 文件);解释型语言无需预先编译,而是由解释器逐行对源码进行解释,一边解释一边执行。
除编译型和解释型语言外,还有一种半编译半解释型语言,比如 Java 和 C# 等,这类语言将源代码先转换成一种中间文件(字节码文件),然后再将中间文件拿到虚拟机中执行。其实,Python 程序在运行过程中也会生成字节码文件。Python 会将源代码转换为字节码,然后在虚拟机上执行字节码(Bytecode)。字节码文件以
.pyc
或.pyo
为扩展名,它们存储了 Python 源代码的编译版本,以便在下次执行相同代码时能够更快地加载和执行。字节码文件的生成是为了提高 Python 程序的执行效率,因为直接执行源代码需要进行解析和编译,而字节码文件已经是编译后的中间形式,因此加载和执行速度更快。Python 会在导入模块或执行脚本时检查是否存在对应的字节码文件,如果存在且未过期,则会直接加载字节码文件而不是重新编译源代码。如果源代码发生了变化或字节码文件过期,则会重新生成字节码文件。
那么,编译型语言和解释型语言各有什么特点呢?它们之间又有什么区别?
2.1 编译型语言
对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的 ".exe"
文件就是一个可执行程序,它里面包含的就是机器码,只要拥有这个可执行程序,就可以随时运行,不需要再重新编译,也就是 一次编译,无限次运行。在运行的时候,我们只需要编译生成的可执行程序,此时就不再需要源代码和编译器,所以编译型语言可以脱离开发环境运行。编译型语言通常是不能跨平台的,也就是不能在不同的操作系统之间随意切换。
编译型语言不能跨平台表现在两个方面:① 可执行程序不能跨平台。可执行程序不能跨平台很容易理解,因为不同操作系统对可执行文件的内部结构有着截然不同的要求,彼此之间也不能兼容。不能跨平台是天经地义,能跨平台反而才是奇葩。比如,你不能将 Windows 下的可执行程序拿到 Linux 下使用,也不能将 Linux 下的可执行程序拿到 macOS 下使用(虽然它们都是类 Unix 系统)。
注意:相同操作系统的不同版本之间也不一定兼容,比如不能将 x64 程序(Windows 64 位程序)拿到 x86 平台上(Windows 32 位平台)运行。但反之一般可行,因为 64 位 Windows 对 32 位程序做了很好的兼容性处理。
② 源代码不能跨平台。不同平台支持的函数、类型、变量等都可能不同,基于某个平台编写的源代码一般不能拿到另一个平台直接运行。下面以C语言为例进行说明。
[实例1] 在C语言中,要想让程序暂停,我们可以使用 "睡眠"
函数。在 Windows 平台下该函数是 Sleep() ,并以毫秒为时间单位,而在 Linux 平台下则是 sleep(), 以秒为单位。可以看出,首先两个函数的首字母大小写不同,再者 Sleep() 的参数是毫秒,而 sleep() 的参数是秒,单位也不一样。以上两个原因导致具有暂停功能的C语言程序不能跨平台,除非在代码层面对平台的兼容性做出处理,但这非常麻烦。
[实例2] 虽然不同平台的C语言都支持 long 类型,但不同平台下 long 类型所占用的字节长度却不相同。例如 Windows 64 位平台下的 long 占用 4 个字节,Linux 64 位平台下的 long 却占用 8 个字节。如果在 Linux 64 位平台下编写代码时,将 8 字节的值赋值给 long 类型的变量,这是完全没有问题的,但如果是在 Windows 平台下就会导致数值溢出,让程序产生错误的运行结果。
2.2 解释型语言
对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的则不进行任何处理。
由于每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至是数量级的差距。因此计算机的一些底层功能,或者关键算法,一般都使用 C/C++ 实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
在运行解释型语言的时候,我们始终都需要源代码和解释器,所以说它无法脱离开发环境。例如,当我们说 "下载一个程序(软件)"
时,不同类型的语言有不同的含义:
- 对于编译型语言,我们下载到的是可执行文件,源代码被作者保留,所以编译型语言的程序一般是闭源的;
- 对于解释型语言,我们下载到的是所有的源代码,因为作者不给源代码就没法运行,所以解释型语言的程序一般是开源的。
**相比于编译型语言,解释型语言几乎都能跨平台,"一次编写,到处运行"
是真实存在的,而且比比皆是。**那么,为什么解释型语言就能跨平台呢?其实,这一切都要归功于解释器!这里所说的跨平台,是指源代码跨平台,而非解释器跨平台。解释器用来将源代码转换成机器码,它本质上就是一个可执行程序,是绝对不能跨平台的。我们以 Python 为例,Python 官方针对不同平台(比如 Windows、macOS、Linux)开发了不同的解释器,这些解释器必须要遵守同样的语法,识别同样的函数,完成同样的功能。只有这样,同一份代码才能在不同平台上拥有相同的执行结果。你看,解释型语言之所以能够跨平台,是因为有了解释器这个中间层。在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异性。Python 属于典型的解释型语言,所以运行 Python 程序需要解释器的支持,只要你在不同的平台安装了不同的解释器,你的代码就可以随时随地运行,不用担心任何兼容性问题,真正实现了 "一次编写,到处运行"
。Python 几乎支持所有常见的平台,比如 Linux、Windows、macOS、Android、FreeBSD、Solaris、PocketPC 等,我们所写的 Python 代码无需修改就能直接在这些平台上正确运行。也就是说,Python 的可移植性是很强的。下表对编译型语言和解释型语言的差异进行了总结:
三、Python是什么
Python 是荷兰人 Guido van Rossum(吉多·范罗苏姆,中国程序员称其为 "龟叔"
)在 1990 年初开发的一种解释型编程语言。Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Python 作为该编程语言的名字,是因为 Guido 是 Monty Python 戏剧团的忠实粉丝。
Python 语言是在 ABC 语言的基础上发展而来,其设计的初衷是成为 ABC 语言的替代品。ABC 语言虽然是一款功能强大的高级语言,遗憾的是,由于 ABC 语言不开放的原因,导致它没有得到普及应用。基于这个考虑,Guido 在开发 Python 之初就决定将其开源(1991年初发布了第一个公开发行版)。Python 中不仅添加了许多 ABC 语言没有的功能,同时,还为其设计了各种丰富而强大的库,利用这些 Python 库,程序员可以把使用其它语言制作的各类模块(尤其是C语言和 C++)很轻松地 "黏连"
在一起,因此 Python 又常被称为 "胶水"
语言。
注意:这里所说的库和模块,简单地理解就是一个个的源文件,每个文件中都包含可实现各种功能的方法(也可称为函数)。
从整体上看,Python 语言最大的特点就是简单,该特点主要体现在以下两个方面:
- Python 的语法非常简洁明了,即便是非软件专业的初学者,也很容易上手。
- 和其它编程语言相比,实现同一个功能,Python 语言的实现代码往往是最短的。
网络上一直流传着 "人生苦短,我用 Python"
的说法,此言非虚!看似 Python 是 "不经意间"
开发出来的,但丝毫不比其它编程语言差。事实也是如此,自 1991 年 Python 第一个公开发行版问世后,Python 从一名默默无闻的小卒开始成长,终于厚积薄发,一鸣惊人:
- 2004 年,Python 的使用率呈线性增长,不断受到编程者的欢迎和喜爱;
- 2010 年,Python 荣膺 TIOBE 『2010 年度最佳编程语言』桂冠;
- 2017 年,IEEE Spectrum 发布的 『2017 年度编程语言』排行榜中,Python 位居第 1 位;
- 2018 年,Python 斩获 TIOBE『2018 年度最佳编程语言』第 1 名;
- 2020 年和 2021年,Python 更是连续两年摘得 TIOBE『年度最佳编程语言』桂冠。
直至现在(2024 年 3 月份),根据 TIOBE 排行榜的显示,Python 依然占据第 1 名的位置,并且市场份额仍在持续提升(如下图所示)。
由于人工智能、大数据等行业的发展,使得 Python 近几年增姿迅猛,甚至把 C 语言、C++ 和 Java 甩在身后 ,成为编程语言排行榜冠军。Python 目前已经成为很多大学的编程课语言。甚至在国内一些考试已经引入了 Python。最后,我们不妨再看一下 Python 历年来的市场份额变化曲线(浅蓝色曲线表示 Python)。
可以看出,Python 已然站在风口之上。错过了 C/C++ 的 PC 时代,又错过了 Java 的互联网和智能手机时代,你还想错过 Python 的人工智能和大数据时代吗?Python 正位于软件产业的第四次风口之上,把握好风口,你就能飞起来,机遇虽在,但对我们的要求比前几年更高,所以需要静下心来好好学习。
四、Python有哪些优点和缺点?
Python 是一种开源的解释型脚本编程语言,它之所以非常流行,主要有三点原因:
- Python 简单易用,学习成本低,看起来非常优雅干净;
- Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用;
- Python 站在了人工智能和大数据的风口上,站在风口上,猪都能飞起来。
举个简单的例子来说明一下 Python 的简单:比如要实现某个功能,C语言可能需要 100 行代码,而 Python 可能只需要几行代码,因为C语言什么都要得从头开始,而 Python 已经内置了很多常见功能,我们只需要导入包,然后调用一个函数即可。简单就是 Python 的巨大魅力之一,是它的杀手锏,用惯了 Python 再用C语言简直不能忍受。本小节就来汇总一下 Python 的特性,综合对比一下它的优缺点。
4.1 Python的优点
① 语法简单:
和传统的 C/C++、Java、C# 等语言相比,Python 对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力。我来举两个典型的例子:Python 不要求在每个语句的最后写上分号,当然写也没错;定义变量时不需要指明类型,甚至可以给同一个变量赋值不同类型的数据。上述两点也是 PHP、JavaScript、MATLAB 等常见脚本语言都具备的特性。Python 是一种代表极简主义的编程语言,阅读一段排版优美的 Python 代码,就像在阅读一个英文段落,非常贴近人类语言,所以人们常说,Python 是一种具有伪代码特点的编程语言。伪代码(Pseudo Code)是一种算法描述语言,它介于自然语言和编程语言之间。编写伪代码的目的是为了使被描述的算法可以更容易地以任何一种编程语言实现,比如 C、C++、Java 等。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似于自然语言。如果你学过数据结构,阅读过严蔚敏的书籍,那你一定知道什么是伪代码。为什么说简单就是杀手锏?一旦简单了,一件事情就会变得很纯粹;我们在开发 Python 程序时,可以专注于解决问题本身,而不用顾虑语法的细枝末节。在简单的环境中做一件纯粹的事情,那简直是一种享受。
② Python 是开源的:
开源,也即开放源代码,意思是所有用户都可以看到源代码。Python 的开源体现在两方面:【1】程序员使用 Python 编写的代码是开源的。比如我们开发了一个 BBS 系统(即网络论坛),放在互联网上让用户下载,那么用户下载到的就是该系统的所有源代码,并且可以随意修改。这也是解释型语言本身的特性,想要运行程序就必须有源代码。【2】Python 解释器和模块是开源的。官方将 Python 解释器和模块的代码开源,是希望所有 Python 用户都参与进来,一起改进 Python 的性能,弥补 Python 的漏洞,代码被研究的越多也就越健壮。这个世界上总有那么一小撮人,他们或者不慕名利,或者为了达到某种目的,会不断地加强和改善 Python。千万不要认为所有人都是只图眼前利益的,总有一些精英会放长线钓大鱼,总有一些极客会做一些炫酷的事情。
③ Python 是免费的:
开源并不等于免费,开源软件和免费软件是两个概念,只不过大多数的开源软件也是免费软件;Python 就是这样一种语言,它既开源又免费。用户使用 Python 进行开发或者发布自己的程序,不需要支付任何费用,也不用担心版权问题,即使作为商业用途,Python 也是免费的。
④ Python 是高级语言:
这里所说的高级,是指 Python 封装较深,屏蔽了很多底层细节,比如 Python 会自动管理内存(需要时自动分配,不需要时自动释放)。高级语言的优点是使用方便,不用顾虑细枝末节;缺点是容易让人浅尝辄止,知其然不知其所以然。
⑤ Python 是解释型语言,能跨平台:
解释型语言一般都是跨平台的(可移植性好),Python 也不例外,我们已经在《编译型语言和解释型语言的区别》中进行了讲解,这里不再赘述。
⑥ Python 是面向对象的编程语言:
面向对象(Object Oriented)是大多数
"现代"
语言(即第三代编程语言)都具备的特性,否则在开发中大型程序时会捉襟见肘。Python 虽然支持面向对象,但它并不强制你使用这种特性。Java 是典型的面向对象的编程语言,它强制必须以类和对象的形式来组织代码。除 Python 和 Java 外,C++、C#、PHP、RuBy、Perl 等,也都支持面向对象的特性。除了面向对象的编程语言外,还有一种面向过程的编程语言,其中最典型的代表就是 C 语言。
⑦ Python 功能强大(模块众多):
Python 的模块众多,基本实现了所有的常见的功能,从简单的字符串处理,到复杂的 3D 图形绘制,借助 Python 模块都可以轻松完成。Python 社区发展良好,除了 Python 官方提供的核心模块,很多第三方机构也会参与到模块的开发中,这其中就有 Google(谷歌)、Facebook(脸书)、Microsoft(微软)等软件巨头。在 Python 中,即使是一些小众的功能,它往往也有对应的开源模块,甚至有可能不止一个。
⑧ Python 可扩展性强:
Python 的可扩展性体现在它的模块,Python 具有脚本语言中最丰富、强大的库或模块,这些库或模块覆盖了文件操作、图形界面编程、网络编程、数据库访问等绝大部分应用场景。值得注意的是,这些类库的底层代码不一定都是 Python,还有很多 C/C++ 的身影。比如当需要一段关键代码运行速度更快时,就可以使用 C/C++ 语言实现,然后在 Python 中调用它们。Python 能把其它语言
"粘"
在一起,所以被称为"胶水语言"
。Python 依靠其良好的扩展性,在一定程度上弥补了运行效率慢的缺点。
4.2 Python 的缺点
除了上面提到的各种优点,Python 也是有缺点的。
① 运行速度慢:
运行速度慢是解释型语言的通病,Python 也不例外。Python 速度慢不仅仅是因为一边运行一边
"翻译"
源代码,还因为 Python 是高级语言,屏蔽了很多底层细节。这个代价也是很大的,Python 要多做很多工作,有些工作是很消耗资源的,比如管理内存。Python 的运行速度几乎是最慢的,不但远远慢于 C/C++,还慢于 Java。但是速度慢的缺点往往也不会带来什么大问题。首先是计算机的硬件速度运来越快,多花钱就可以堆出高性能的硬件,硬件性能的提升可以弥补软件性能的不足。其次是有些应用场景可以容忍速度慢,比如网站,用户打开一个网页的大部分时间是在等待网络请求,而不是等待服务器执行网页程序。服务器花 1ms 执行程序,和花 20ms 执行程序,对用户来说是毫无感觉的,因为网络连接时间往往需要 500ms 甚至 2000ms。
② 代码加密困难:
不像编译型语言那样,源代码会被编译成可执行程序(这个编译过程就相当于对源码加密),对于 Python 来说是直接运行源代码,因此对源码加密是比较困难的。开源是未来软件产业的大趋势,传统程序员需要转变观念。
五、学Python能干什么,Python的应用领域有哪些?
Python 作为一种功能强大的编程语言,因其简单易学而受到很多开发者的青睐。那么,Python 的应用领域有哪些呢?Python 有着非广泛的应用,几乎所有大中型互联网公司都在使用 Python,例如国外的 Google、Youtube、Dropbox,国内的百度、新浪、搜狐、腾讯、阿里、网易、淘宝、知乎、豆瓣、汽车之家、美团等等,Python 帮助它们完成了各种各样的任务。概括起来,Python 的应用领域主要有如下几个。
1、Web应用开发:
在 Web 开发领域,Python 绝对是一颗冉冉升起的新星。尽管 Java、C#、JS 目前依然是 Web 开发的主流语言,但 Python 上升势头非常猛劲。尤其随着 Python 的 Web 开发框架逐渐成熟(比如 Django、Flask、Tornado、Web2py 等等),程序员可以更轻松地开发、管理复杂的 Web 程序。
举个最直观的例子,全球最大的搜索引擎 Google,在其网络搜索系统中就广泛地使用了 Python 语言。另外,我们经常访问的集电影、读书、音乐于一体的豆瓣网(如下图所示),也是使用 Python 开发的。
不仅如此,全球最大的视频网站 Youtube 以及 Dropbox(一款网络文件同步工具) 也都是用 Python 实现的。
2、自动化运维:
所谓自动化运维,实际上就是利用一些开源的自动化工具来管理服务器,比如业界流行的 Ansible(基于 Python 开发),它能帮助运维工程师解决重复性的工作。Python 作为一种脚本语言,提供了诸多方便与服务器交互的软件包,比如 Python 标准库中包含了多个可用来调用操作系统功能的库。例如,通过 pywin32 这个软件包,我们能访问 Windows 的 COM 服务以及其他 Windows API;使用 IronPython,我们能够直接调用 .Net Framework。一般来说,Python 编写的系统管理脚本,无论是可读性,性能、还是代码重度和扩展性等方面,都要优于 shell 语言编写的脚本。
3、人工智能领域:
人工智能是当前非常火的一个研究方向,如果要评选当前最热门、工资最高的 IT 职位,那么一定非人工智领域的工程师莫属。人工智能的核心是机器学习,机器学习的研究可分为传统机器学习和深度学习,它们两者被广泛的应用于图像识别、智能驾驶、智能推荐、自然语言处理等应用方向。在众多编程语言中 Python 绝对是人工智能的首选语言,这是因为 Python 在机器学习和深度学习方面有着非常出众的优势。可以这么说,人工智能已经无法离开 Python 的支持,总结原因大致有以下几点:① 目前世界上优秀的人工智能学习框架,比如 Google 的 TransorFlow(神经网络框架)、FaceBook 的 PyTorch(神经网络框架)以及开源社区的 Karas 神经网络库等,都是用 Python 实现的;② 微软的 CNTK(认知工具包)也完全支持 Python,并且该公司开发的 VS Code,也已经把 Python 作为第一级语言进行支持;③ Python 擅长进行科学计算和数据分析,支持各种数学运算,可以绘制出更高质量的 2D 和 3D 图像。总之,AI 时代的来临,使得 Python 脱颖而出,Python 作为 AI 时代头牌语言的位置,基本无人可撼动!
4、网络爬虫:
Python 语言很早就用来编写网络爬虫。Google 等搜索引擎公司大量地使用 Python 语言编写网络爬虫。从技术层面上将,Python 提供有很多服务于编写网络爬虫的工具,例如 urllib、Selenium 和 BeautifulSoup 等,还提供了一个网络爬虫框架 Scrapy。
5、科学计算:
自 1997 年,NASA 就大量使用 Python 进行各种复杂的科学运算。并且,和其它解释型语言(如 Shell、JS、PHP)相比,Python 在数据分析、可视化方面有相当完善和优秀的库,例如 NumPy、SciPy、Matplotlib、pandas 等,这可以满足 Python 程序员编写科学计算程序的需求。
6、游戏开发:
很多游戏使用 C++ 编写图形显示等高性能模块,而使用 Python 或 Lua 编写游戏的逻辑。与 Python 相比,Lua 的功能更简单,体积更小;而 Python 则支持更多的特性和数据类型。比如说,较为出名的游戏
Sid Meier's Civilization
(文明)和 EVE(星战前夜)就是使用 Python 开发的。
除此之外,Python 可以直接调用 Open GL 实现 3D 绘制,这是高性能游戏引擎的技术基础。事实上,有很多 Python 语言实现的游戏引擎,例如 Pygame、Pyglet 以及 Cocos 2d 等。
以上也仅是介绍了 Python 应用领域的 "冰山一角"
,其实,我们还可以用 PIL 和其他的一些工具进行图像处理;用 PyRo 工具包进行机器人控制编程等等。有兴趣的读者,可自行搜索资料进行详细了解。
六、怎样学习Python才能成为高手?
在学习过程中,很多小伙伴经常抱怨,计算机编程语言种类太多,根本学不过来。比如说,你能够熟练的使用 Java,但公司最近的项目却要用 Python,你就感到不知所措,压力山大。再举个例子,Facebook 的主流语言是 Hack(PHP 的进化版本),但对于刚刚入职的工程师而言,100 个里至少有 95 个之前根本没有用过 Hack。不过,这些人上手都特别快,基本上只需要 1~2 周,日常编程就变得毫无压力。那么,他们是怎么做到的呢?
1、编程语言都是相通的:
首先,如果你具有一定的编程基础,接触一门新的编程语言时会发现,不同的编程语言之间其实是相通的,因为编程语言本就是人类控制计算机的一系列指令,即便是不同的编程语言,它们在语法规则方面也大同小异。因此,在原有编程基础上再学习一门新的编程语言,并没有那么难。在学习过程中,首先要做到的就是明确区别。例如,学习 Python 的条件和循环语句时,可以比对 C 语言或者 C++ 语言的语法是怎样的;学习 Python 中的字符串相加时,可以对比 Java 语言中字符串相加的语法。除了能够明确区分各种编程语言的不同点,还要能将它们联系起来灵活运用。比如说,Python 语言最大特点是擅长科学计算,因此它广泛应用于数据分析、人工智能(AI)等领域,但是涉及到底层的矩阵运算等操作时,就需要依赖 C++ 语言,因为它的运行速度更快,效率也更高。
在实际开发中要根据不同的需求选择不同的编程语言进行开发,对于要求执行效率的场景,可以选择 C/C++,对于要求开发效率、快速交付的场景,可选择 Java、Python 等。
2、Python对初学者很友好:
如果 Python 是你接触的第一门编程语言,那也不必担心。我们知道,编程语言都可以实现人机交互,但相比来说,Python 比 C/C++、Java 等语言更简洁,也更接近英语,对初学者非常友好,这也是 Python 语言的一个显著特点。对于初学者来说,要做的就是专注于 Python 这一门语言,明确学习的重点,把握好学习节奏,由浅入深循序渐进地学习。根据本人多年的学习工作经验,把编程语言的学习分为以下 3 步,无论你是否有编程基础,都可以对照着来做。① 多实践,积累代码量。 任何一门编程语言,其囊括的知识面都是非常广泛的,从基本的变量赋值、条件循环、到文件操作、并发编程等,千万不要等到把所有知识点都学完了才开始练习,因为到那时你会发现,前面好不容易记住的知识都忘记了。学习编程,是十分讲究实战的,没有捷径可走,越早练习,练得越多越勤,学习效果就越好。② 时刻注意代码规范。 学习编程语言,在追求快和高效的同时,每一种编程语言都有必要的编码规范,一定不能忽略。要想成为一名优秀的程序员,从起步阶段就要刻意地去培养自己的编程规范。例如,在刚开始编写代码时,不要将原本多行的代码全部写到一行,也不要随便用 a、b、c 等字母作为变量的名称。③ 开发经验是必不可少的。 要想真正熟练地掌握 Python(或者其它编程语言),拥有大中型产品的开发经验是必不可少的,它会让你站得更高,望得更远。例如,我们几乎每天都会用搜索引擎,但你了解一个搜索引擎的服务器端实现吗?这是一个典型的面向对象设计,需要定义一系列相关的类和函数,还要从产品需求、代码复杂度、效率以及可读性等多个方面综合考量,同时在上线后还要进行各种优化等。
七、Python 2.x和Python 3.x,初学者应如何选择?
Python 自发布以来,主要有 3 个版本,分别是:
- 1994 年发布的 Python 1.0 版本(已过时);
- 2000 年发布的 Python 2.0 版本,2020年4月份,2.x 系列最终版本 2.7.18 发布;
- 2008 年发布的 Python 3.0 版本,截止到2024年2月份,已经更新到 3.12.2;
在 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 官方对 150 多个国家/地区的 2.4 万名开发者进行调研,经统计显示,截止到 2019 年 11月,使用 Python 3.x 的开发者已经超过 90%,仅有不到 10% 的开发者仍然再使用 Python 2.x。由此可见,使用 Python 3.x 的用户已经占据即绝大多数。那么,初学者应该选择什么版本来学习呢?本教程建议大家选择 Python 3.x 版本,理由有以下几点:
- 使用 Python 3.x 已是大势所趋。目前,只有少部分公司仍在使用 Python 2.x,绝大多数公司都已转向 Python 3.x。另外 Python 2.x 已于 2020 年 1 月 1 日终止更新,Python 2.7.18 将作为 Python 2.x 系列的最后一个版本。在未来一些框架或库(如 Django、Flask 和 NumPy) 会逐渐放弃对 2.x 的支持,仅支持 Python 3.x。因此,从长远来看,学习 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》一书 Python 版本保持一致,本教程使用 Python3.10 进行教学,强烈建议小伙伴们也使用此版本进行学习。
八、学习小妙招,及时掌握Python更新动态
截至到 2024 年 2 月份,Python 已经更新至 3.12.x 版本,每一次的迭代,Python 都会融入一些新元素,包括新的语法格式以及功能实用的新模块。然而,很多人对 Python 的认知还停留在 3.5 甚至更老的版本。无论是刚刚接触 Python 的初学者,还是已经参加工作的 Python 程序员,及时了解 Python 发展的最新动态,掌握最新的 Python 知识,是非常有必要的。每个程序员都必须不断给自己充电,跟上行业发展的步伐,不让自己落伍。掌握 Python 新版本的新特性,很多人都后知后觉,等新版本发布后才开始关注。接下来给大家分享一个小妙招,可以提前掌握新版本的新特性,还可以更深入地了解 Python。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!