懂一点Python系列——快速入门

本文面相有 一定编程基础 的朋友学习,所以略过了 环境安装、IDE 搭建 等一系列简单繁琐的事情。
1|0一、Python 简介
Python 英文原意为 “蟒蛇”,直到 1989
年荷兰人 Guido van Rossum (简称 Guido)发明了一种 面向对象 的 解释型 编程语言,并将其命名为 Python,才赋予了它表示一门编程语言的含义。

说到 Python 的诞生,极具戏剧色彩,据 Guido 的自述记载,Python 语言是他在圣诞节期间为了打发时间开发出来的,之所以会选择 Python 作为该编程语言的名字,是因为他是一个叫 Monty Python 戏剧团体的忠实粉丝。
1|1解释型 vs 编译型
作为电子元器件的 计算机,实际上 只能 识别某些 特定的二进制指令 (特殊的 01
组合),但由于 人类阅读 这些 指令 非常难以阅读,加上使用这些指令编写程序的 耗时 太过于 冗长,所以,人们在此基础上再次制定了一套规范,采用特定的 人类可阅读 的代码编写,待到要执行时再 翻译 回特定二进制指令,这样就帮助了人们更加轻松地理解和阅读程序逻辑了。

这也就是所谓现在的 "高级编程语言" 了。
上述 翻译 这个过程 (其实相当复杂,涉及语法分析、语义分析、性能优化等等..) 其实也是由一个特定程序来执行的,那 什么时候将源代码翻译成二进制指令呢?,不同的编程语言有不同的规定:
- 编译型语言:必须 提前 将所有源代码 一次性 转换成二进制指令,生成一个可执行文件 (例如 Windows 下的
.exe
) 比如:C 语言、C++、Golang、汇编等。使用的转换工具我们称为 编译器。 - 解释型语言:允许程序 一边执行一边转换,并且不会生成可执行程序,比如 Python、JavaScript、PHP 等。使用的转换工具我们称为 解释器。
Java 和 C# 是一种比较奇葩的存在,它们是 半编译半解释型 的语言,源码需要先转换成一种中间文件 (字节码文件),然后再把中间文件拿到 虚拟机 中执行。Java 引领了这种风潮,它的初衷是在跨平台的同时兼顾执行效率。

上图 就展示了两种不同类型语言的执行流程的不同,两种方式对比起来总结如下:
- 编译型语言一般不能跨平台:对于不同的 CPU 来说,它们的指令集是有差异的,这就导致了 可执行文件 (翻译后的指令) 不能跨平台,另外不同的系统之间的命令也会存在差异,例如 Linux 中睡眠是
sleep()
参数是毫秒,而 Windows 中是Sleep()
(首字母大写) 参数是秒,这就导致了 源代码也不能跨平台; - 解释型语言可跨平台:这一切都归功于 解释器,它本身就是一个可执行文件,官方只要针对不同的平台开发不同的解释器,那么解释器就能够根据相同的语法解析出同样功能的指令;
- 编译型一般比解释型效率高:由于解释型是采取一边执行一边翻译的做法,所以会慢上一些,再加上我们强大的 编译器 会帮我们做许多代码优化的工作。
关于 Python
Python 属于典型的解释型语言,所以运行 Python 程序需要解释器的支持,只要你在不同的平台安装了不同的解释器,你的代码就可以随时运行,不用担心任何兼容性问题,真正的 “一次编写,到处运行”。
Python 几乎支持所有常见的平台,比如 Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC 等,你所写的 Python 代码无需修改就能在这些平台上正确运行。也就是说,Python 的 可移植性 是很强的。
1|2面向对象 vs 面向过程
面向对象 和 面向过程 是我们使用计算机编程解决问题的两种不同方式的方案。
面向过程 可以说是一种 基于事件 or 过程 来描述的编码方式,譬如「把大象放进冰箱」就可以描述成那经典的三个步骤,「把牛放进冰箱」又是另一个相似的经典三步,只是这样单独的事件 or 过程多了之后,随着项目复杂度的增加,项目会变得非常难以维护。
软件危机最典型的例子莫过于 IBM 的
System/360
的操作系统开发。佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)作为项目主管,率领2000
多个程序员夜以继日的工作,共计花费了5000
人一年的工作量,写出将近100
万行的源码,总共投入5
亿美元,是美国的 “曼哈顿” 原子弹计划投入的1/4
。尽管投入如此巨大,但项目进度却一再延迟,软件质量也得不到保障。布鲁克斯后来基于这个项目经验而总结的《人月神话》一书,成了史上最畅销的软件工程书籍。
尽管 结构化的程序设计 (将一个大问题逐步划分成一个一个的小问题) 能够帮助我们解决一部分问题,但 面向过程 仍然有一些不符合人类惯有的思考方式,譬如说:我今天想去存钱,我不会说「请拿走我的银行卡和钱,然后在我卡上充值上相应的数目,最后把银行卡还给我谢谢」,而我只会说「存钱,谢谢」,因为人大部分时间都是基于 对象 (或者可以说角色) 来思考的。
对于 面向过程 最好的总结可能是:「程序 = 算法 + 数据结构」,而对于 面向对象 来说则可以更改为:「程序 = 对象 + 交互」。
1|3Why Python?

上面的 漫画 很好地说明了 Python 快速构建工具的能力,这也是 Why Python
的一大理由。下面根据惯例列举一些让我们足以选择 Python 的原因。
初学者友善 | 容易明白且功能强大
Python 的设计足够简单和易于使用,这样使得初学者能够从中不断得获取到乐趣以继续 Python 之旅。
另外作为一种非常高级的语言,Python 读起来像英语,这减轻了编码初学者的许多语法学习压力。Python 为您处理了很多复杂性,因此它非常适合初学者,因为它使初学者可以专注于学习编程概念,而不必担心过多的细节。
Python 还一度被爆纳入高考,收编到小学课本。

非常灵活
作为一种 动态类型 的语言,Python 确实非常灵活。这意味着没有关于如何构建特征的硬性规则,并且使用不同的方法来解决问题将具有更大的灵活性 (尽管 Python 哲学鼓励使用明显的方法来解决问题)。此外,Python 也更宽容错误,因此您仍然可以编译并运行程序,直到遇到问题为止。
越来越火爆
Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。
随着时代的发展,物理硬件功能不断提高,而软件的复杂性也不断增大,开发效率越来越被企业重视。因此就有了不一样的声音,在软件开发的初始阶段,性能并没有开发效率重要,没必然为了节省不到 1ms
的时间却让开发量增加好几倍,这样划不过来。也就是开发效率比机器效率更为重要,那么 Python 就逐渐得到越来越多开发者的亲睐了。
在 12-14
年,云计算升温,大量创业公司和互联网巨头挤进云计算领域,而最著名的云核算开源渠道 OpenStack 就是基于 Python 开发的。
随后几年的备受关注的人工智能,机器学习首选开发语言也是 Python。
至此,Python 已经成为互联网开发的焦点。在 「Top 10 的编程语言走势图」 可以看到,Python 已经跃居第三位,而且在 2017
年还成为了最受欢迎的语言。

工作机会 | 薪资待遇高
- 来自 gooroo.io 的薪资信息:

在天使榜上,Python 是需求第二高的技能,也是提供最高平均薪水的技能。
随着大数据的兴起,Python 开发人员需要作为数据科学家,尤其是因为 Python 可以轻松集成到 Web 应用程序中以执行需要机器学习的任务。
1|4快速体验 | No Hello World !
Hello World
似乎是学习编程绕不过去的东西,但使用 Python,我们来换点儿别的,Emmm.. 比如,一个 查询天气 的小程序 (效果如下图):

源码 & 解释
http://wthrcdn.etouch.cn/weather_mini?city=xxx
这个网址可以返回任意城市昨日以及 5 天内的天气预报,包括气温、指数、空气质量、风力等,你可以用浏览器试着访问一下,你会得到一个 weather_mini
的文件,里面就包含了我们想要的一些数据。
不过这里由于我们发起了网络请求用到了第三方库 requests
,所以在运行之前还需要使用 pip install requests
命令把该库下载到 Python 的安装目录下。
运行你的代码
你可以在 当前文件夹 下执行命令: python hello_python.py
,或是使用 python <源文件路径>
运行也行,例如,如果我是 Windows 用户并且将上述源文件保存在了 D
盘下面,那就可以执行 python D:\hello_python.py
,然后你就可以看到上面的效果了。当然如果使用 IDE 将更加方便。
1|5Python vs Java
引入一张比较著名的图吧,可以很明显地感受到 Python 在写法上要简洁一些吧:

2|0二、Python 基本语法简介
Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {}
来控制类,函数以及其他逻辑判断。Python 最具特色的就是用 缩进 来写模块。
2|12.0 注释
2|22.1 数据类型
Python 中的变量赋值不需要类型声明。Python 有五个标准的数据类型:
- Numbers(数字):Python3 中有四种数字类型 (没有 Python2 中的 Long),分别是
int
长整型、bool
布尔、float
浮点数、complex
复数 (1 + 2j); - String(字符串):Python 中字符串不能改变,并且没有单独的字符类型,一个字符就是长度为 1 的字符串;
- Tuple(元组):类似于 List,但不能二次赋值,相当于只读列表。eg:
('test1', 'test2')
- List(列表):类似 Java 中的 Array 类型。eg:
[1, 2, ,3]
- Dictionary(字典):类似于 Java 的 Map 类型。eg:
{a: 1, b: 2}
set
集合也属于数据结构,它是一个 无序 且 不重复 的元素序列。可以使用大括号{ }
或者set()
函数创建集合,注意:创建一个空集合必须用set()
而不是{ }
,因为{ }
是用来创建一个空字典。
2|32.2 条件语句
2|42.3 循环
while 循环
在 Python 中没有 do..while
的循环
for..in 循环
for..in
适用于 list/ dict/ set
数据类型,如果需要遍历数字序列,我们也可以借助 range(min, max, step)
函数来生成数列。
2|52.4 函数
函数基本定义和使用
参数传递
在 Python 中,类型属于对象,变量是没有类型的,例如 name = "wmyskxz"
,则 "wmyskxz"
是 String 类型,而变量 name
仅仅是一个对象的引用。
Python 中一切都是对象,严格意义我们 不能说值传递还是引用传递,我们应该说传 不可变对象 (string、tuples、number 不可变) 和 传可变对象 (list、dict 可变)。
2|62.5 class 类
基本定义
继承 & 多继承 & 方法重写
2|72.6 module 模块
一个 .py
文件就是一个模块,想要使用其他 .py
文件中的方法就需要引入进来。
import [module]
from [module] import [name1, name2, ...]
import [module] as [new_name]
from [module] import *
不推荐,容易造成名称冲突,降低可读性和可维护性。
module 搜索路径
当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python 则搜索在 shell 变量
PYTHONPATH
下的每个目录。 - 如果都找不到,Python 会察看默认路径。UNIX 下,默认路径一般为
/usr/local/lib/python/
。
2|82.7 package 包
把两个 module 放在一个新的目录 sample_package
,再新增 _init__.py
(可以是空,但不能没有),宣称自己是一个 package :
单个py文件就是一个 module,而当多个
.py
文件 +__init__.py
文件时,就等于 package。
3|0三、基本代码规范
代码规范 再怎么强调也不为过:

3|13.1 命名规范
模块
- 模块尽量使用 小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
类名
- 类名使用 驼峰 (CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
函数
- 函数名 一律小写,如有多个单词,用下划线隔开
- 私有函数在函数前加一个下划线
_
变量名
- 变量名尽量 小写, 如有多个单词,用下划线隔开
- 常量使用以下划线分隔的 大写 命名
3|23.2 基本编码规范
缩进
- 统一使用 4 个空格进行缩进
行宽
每行代码尽量不超过 80
个字符(在特殊情况下可以略微超过 80
,但最长不得超过 120
)
理由:
- 这在查看
side-by-side
的diff
时很有帮助 - 方便在控制台下查看代码
- 太长可能是设计有缺陷
引号
简单说,自然语言使用双引号,机器标示使用单引号,因此 代码里 多数应该使用 单引号
- 自然语言 使用双引号
"..."
,例如错误信息;很多情况还是 unicode,使用u"你好世界" - 机器标识 使用单引号 '
...'
,例如 dict 里的 key - 正则表达式 使用原生的双引号
r"..."
- 文档字符串 (docstring) 使用三个双引号
"""......"""
import 语句
- import 语句应该分行书写
- import 语句应该使用 absolute import
- import 语句应该放在文件头部,置于模块说明及
DocString
之后,于全局变量之前; - import 语句应该按照顺序排列,每组之间用一个空行分隔
- 导入其他模块的类定义时,可以使用相对导入
- 如果发生命名冲突,则可使用命名空间
DocString
DocString 的规范中最其本的两点:
- 所有的公共模块、函数、类、方法,都应该写 DocString 。私有方法不一定需要,但应该在
def
后提供一个块注释来说明。 - DocString 的结束"""应该独占一行,除非此 DocString 只有一行。
3|33.3 注释规范
建议
- 在代码的 关键部分(或比较复杂的地方), 能写注释的要尽量写注释
- 比较重要的注释段, 使用多个等号隔开, 可以更加醒目, 突出 重要性
文档注释(DocString)
- 文档注释以 """ 开头和结尾, 首行不换行, 如有多行, 末行必需换行, 以下是Google的docstring风格示例
- 不要在文档注释复制函数定义原型, 而是具体描述其具体内容, 解释具体参数和返回值等
- 对函数参数、返回值等的说明采用
numpy
标准, 如下所示
更多细致详细的规范可以参考:
- Google 开源项目指南 - https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/
- 官方 PEP 8 代码规范 - https://www.python.org/dev/peps/pep-0008/
4|0推荐阅读
- Redis(9)——史上最强【集群】入门实践教程 - https://juejin.im/post/5e7429a16fb9a07ccc460fe7
- React入门学习 - https://juejin.im/post/5da5e9e8e51d4525292d2ed7
5|0参考资料
- WhyStudyPython.md | TwoWater - https://github.com/TwoWater/Python/blob/master/Article/PythonBasis/python0/WhyStudyPython.md
- C 语言中文网 | Python 系列教程 - http://c.biancheng.net/python/
- Crossin的编程教室 - https://python666.cn/
- 计算机和编程语言的发展历史 - https://blog.csdn.net/abc6368765/article/details/83990756
- 面向对象葵花宝典 - http://www.kancloud.cn:8080/yunhua_lee/oobaodian/110879
- RUNOOB | Python3 系列教程 - ttps://www.runoob.com/python3
- Python 基础语法 | springleo'sblog - https://lq782655835.github.io/blogs/tools/python-grammar.html#_1-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B
- 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
- 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!

非常感谢各位人才能 看到这里,如果觉得本篇文章写得不错,觉得 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!
创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
__EOF__

本文链接:https://www.cnblogs.com/wmyskxz/p/12550276.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?