Skip to content

Commit

Permalink
"Python/Python-core-technology-and-practice"
Browse files Browse the repository at this point in the history
  • Loading branch information
AndersonHJB committed Jan 14, 2024
1 parent 4d38701 commit af32675
Show file tree
Hide file tree
Showing 121 changed files with 11,329 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/.vuepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,35 @@ export default sidebar({
// "/HomeWork": "structure",
// "/R-Course/": "structure",
// "/note/": "structure",
"Python/Python-core-technology-and-practice": [
{
text: "开篇词",
collapsible: true,
icon: "python",
children: [
"00",
],
},
{
text: "基础篇",
icon: "python",
collapsible: true,
children: [
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"13",
"14",
],
},
]
});
1 change: 1 addition & 0 deletions src/.vuepress/theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export default hopeTheme({
"/Python/Assignment/Assignment1.html": ["aiyc", "ydn", "Vector", "yh", "zy", "xxy", "lcy", "kai"],
"/Python/Assignment/Assignment2.html": ["aiyc", "ydn", "Vector", "yh", "zy", "xxy", "lcy", "kai"],
"/Python/basequestion/": ["aiyc", "ydn", "Vector", "yh", "zy", "xxy", "lcy", "kai"],
"Python/Python-core-technology-and-practice": ["aiyc", "kai"],
},
},

Expand Down
Binary file modified src/Python/.DS_Store
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
110 changes: 110 additions & 0 deletions src/Python/Python-core-technology-and-practice/00.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
---
title: 开篇词-从工程的角度深入理解 Python
icon: python
date: 2022-08-27 18:46:28
author: AI悦创
isOriginal: true
category: Python 进阶
tag:
- Python 进阶
sticky: false
star: false
article: true
timeline: true
image: false
navbar: true
sidebarIcon: true
headerDepth: 5
comment: true
lastUpdated: true
editLink: false
backToTop: true
toc: true
---

![image.png](./00.assets/1619238527769-3c72765d-11fb-4a70-91d9-aadb6fddbe8f.png)

你好,我是悦创。

我是一名全栈工程师,目前学习机器学习的知识,主要学习领域是人工智能的推荐排序系统与算法。

一听机器学习,很多人第一反应可能是“好难呀、厉害呀”。可事实上,我的编程之路并非一路高光。

不同于大城市长大或竞赛出身、十一二岁接触编程的人,在刚上大学时,我的编程基础几乎为零。大一上的 C 语言,便是我出生起学到的第一门编程语言。初识计算机语言的世界,很有趣也很吸引我,这也是我成为程序员的最初动力。

和很多对编程感兴趣的人一样,哪怕老师只是在讲台上,照本宣科地读着 N 年前的课件,我也会竖起耳朵认真听讲、认真做笔记。并且,私下里我还买了不少厚重的大块头书,在网上查了不少博客、帖子,照着上面的例子一行行地敲代码。很多内容我并不理解,比如指针、递归这类抽象的概念,查了一堆资料也没看明白。但靠着死记硬背,考试基本可以过关,虽然这个过程比较痛苦,也比较累。

后来,为了更深入了解计算机,又陆续学到不少新的编程语言,比如 Node.js、Python、PHP、Scala 等等。这个阶段,我边学习,边做项目,却发现轻松了很多。

这两个学习阶段,收获和感受天差地别,难道仅仅是因为“万事入门难”吗?我不止一次反思过这个问题,终于发现,问题出在了**资料本身**上。

**为什么这么说呢?** 一是因为书上或网上的很多东西,非常理论化,实例少之又少,单凭死记硬背很难真正掌握;二是这些内容中,原创的观点和经验更少,大多互相抄袭,内容雷同且不实用,远离实际工程,毫无借鉴价值。

但显然,市面上的资料问题,我们个人是很难解决的。我们能做的,便是克服常见资料的弊端,另辟蹊径来学习。这其中,最重要的一点就是,**从工程的角度思考学习,以实用为出发点,多练习、多阅读、多做项目,这样才能有质的提高。**

接触编程这么多年,也验证了我的观点。我身边的新手,他们学习新的语言总是只会啃书练习,还难以上手; **而有经验的同事则不同,他们能花很短的时间看完基础语法,然后找行家去了解一些重难点、易错点,最后亲自动手完成一个项目,达到融会贯通的效果。** 这样下来,可能几周时间就掌握得差不多了。

这样的差距,确实让人心塞,而这也是我开这个专栏的最初动力——帮助更多入门级程序员迅速成长。至于专栏主题,我选择了 Python 这门编程语言,原因也很明了。

这首先来自于我个人的重要感悟。经过多年学习工作的积累,我深刻认识到, **牢牢掌握一门编程语言及其学习方法,是日后在所有领域深造的根基。** 而在实际工作和生活中,我更是见过不少反例,比如搞机器学习的工程师,算法、理论等极强,但是编程水平或是工程水平很一般,于是涉及到偏工程的工作或合作时,就显得力不从心,这样就非常可惜了。

另外,不可否认,Python 确实是这个时代最流行、也必须要掌握的编程语言。Python 可以运用在数据处理、Web 开发、人工智能等多个领域,它的语言简洁、开发效率高、可移植性强,并且可以和其他编程语言(比如 C++)轻松无缝衔接。现如今,不少学校的文科生甚至中学生也开设了此课程,可见其重要程度。

因此,我决定开设这么一个专栏,从工程的角度去讲解 Python 这门编程语言。我不是语言学专家,不会死抠一些很偏的知识点;相反,作为一名工程师,我会从实际出发,以工作中遇到的实例为主线,去讲解 Python 的核心技术和应用。

专栏的所有内容都基于 Python 的 3.7 版本,其中有大量独家解读、案例,以及不少我阅读源码后的发现和体会。同时,在层次划分上,我希望能难易兼顾,循序渐进。专栏中既有核心的基础知识,也有高级的进阶操作,尽量做到“老少皆宜”。

从内容上来说,专栏主要分为四大版块。



# 1. Python 基础篇

第一部分主要讲解 Python 的基础知识。当然,不同于其他基础教材,专栏的基础版块并不只有基础概念、操作,我同时加入了很多进阶难度的知识,或是一些重难点、易错点等需要注意的地方。如果你觉得自己基础的东西都会了,这部分不用学了,那你就大错特错了。比如,

- 列表和元组存储结构的差异是怎样的?它们性能的详细比较又如何?
- 字符串相加的时间复杂度,你真的清楚吗?

**基础不牢,地动山摇。** 更深刻、实质的基础理解,才是更牢固的知识大厦的根基。我希望这一版块,不仅可以让入门级的程序员查漏补缺、打牢基础,也能让有经验的程序员,重新从工程角度认识基础、升华理解。

# 2. Python 进阶篇
这部分讲的是 Python 的一些进阶知识,比如装饰器、并发编程等等。如果你的工作只是写 100 行以下的脚本程序,可能不怎么会用得到。但如果你做的是大型程序的开发,则非常有必要。我希望通过这一版块,让你熟悉各种高级用法,真正理解 Python,理解这门编程语言的特点。

# 3. Python 规范篇
这部分着重于教你把程序写得更加规范、更加稳定。我在实际工作中见过不少程序员,会写程序,但写得实在有点“惨不忍睹”,导致最后调试起来错误不断,修改非常费劲儿。因此,我觉得用单独一个版块讲解这个问题非常有必要。

当然,我不会用一些似是而非的规范来说教,而是会用具体的编程操作和技巧,教你提高代码质量。比如,如何合理地分解代码、运用 assert,如何写单元测试等等。

# 4. Python 实战篇
没上过战场开过枪的人,不可能做主官;没有实战经验的语言学习者,不可能成为高手。**这部分,我会通过量化交易系统这个具体的实战案例,带你综合运用前面所学的 Python 知识。**

真正要掌握一门编程语言,仅仅学会分散的知识点是不够的,还必须要把知识点串联起来,做一些中型的项目才能有更深的领悟与提高。

专栏篇幅只有 40 多篇,但是每篇绝对都是干货满满。我希望这个专栏,能帮助更多入门级和有一定项目基础的程序员,真正掌握 Python,并且给你一些学习上的启发。

100 天后,晋级为 Python 高手,让我们一起加油吧!

**课程的练习代码:**[**https://gitee.com/huangjiabaoaiyc/PythonPractice**](https://gitee.com/huangjiabaoaiyc/PythonPractice)

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

::: details 公众号:AI悦创【二维码】

![](/gzh.jpg)

:::

::: info AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:[QQ](http://wpa.qq.com/msgrd?v=3&uin=1432803776&site=qq&menu=yes)

方法二:微信:Jiabcdefh

:::

![](/zsxq.jpg)

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
130 changes: 130 additions & 0 deletions src/Python/Python-core-technology-and-practice/01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
title: 01-如何逐步突破,成为Python高手?
icon: python
date: 2022-11-22 00:15:56
author: AI悦创
isOriginal: true
category: Python 进阶
tag:
- Python 进阶
sticky: false
star: false
article: true
timeline: true
image: false
navbar: true
sidebarIcon: true
headerDepth: 5
comment: true
lastUpdated: true
editLink: false
backToTop: true
toc: true
---

![img](./01.assets/6415e7ddb2a3b3d222b052569e8195c9.jpg)

你好,我是悦创。

工作中,我总听到很多程序员抱怨,说现在的计算机编程语言太多了,学不过来了。一些人 Java 用了很多年,但是最近的项目突然需要用 Python,就会不知所措,压力很大。

众所周知,Facebook 的主流语言是 Hack(PHP 的进化版本)。不过,我敢拍着胸脯说,就刚入职的工程师而言,100 个里至少有 95 个,以前都从未用过 Hack 或者 PHP。但是,这些人上手都特别快,基本上一两周后,日常编程便毫无压力了。

他们是怎么做到的呢?

事实上,他们遵循的,正是我在开篇词中提到的方法,也是本专栏学习的中心观点:“从工程的角度去学习 Python”。那么具体来说,到底要怎么学,学习的过程中又要特别注意哪些地方呢?

## 1. 不同语言,需融会贯通

其实,如果你在学一门语言的时候多阅读、多练习、多思考,你就会发现,不同语言都是类似的。编程语言本就是人类控制计算机的指令,语法规则等方面自然大同小异。

而在原有基础上,学习一门新的编程语言,其实也没有那么难,你首先要做到的是明确区分。比如,在学习 Python 的条件与循环语句时,多回忆一下其他语言的语法是怎样的。再如,遇到 Python 中的字符串相加时,你能分析出它的复杂度吗?再联想到其他语言,比如 Java 中字符串相加的复杂度,它们之间有什么相同点、又有什么区别呢?

除了能够明确区分语言的不同点,我们还要能联系起来灵活运用。比如,最典型的“编程语言两问”:

- 你了解你学过的每种编程语言的特点吗?
- 你能根据不同的产品需求,选用合适的编程语言吗?

举个例子,Python 的优点之一是特别擅长数据分析,所以广泛应用于人工智能、机器学习等领域,如机器学习中 TensorFlow 的框架,就是用 Python 写的。但是涉及到底层的矩阵运算等等,还是要依赖于 C++ 完成,因为 C++ 的速度快,运行效率更高。

事实上,很多公司都是这样,服务器端开发基于 Python,但底层的基础架构依赖于 C++。这就是典型的“不同需求选用不同语言”。毕竟,你要明白,哪怕只是几十到几百毫秒的速度差距,对于公司、对于用户体验来说都是决定性的。

## 2. 唯一语言,可循序渐进

当然,如果 Python 是你学的第一门编程语言,那也不必担心。我们知道,虽然同为人机交互的桥梁,Python 语言比起 C++、Java 等主流语言,语法更简洁,也更接近英语,对编程世界的新人还是很友好的,这也是其显著优点。这种情况下,你要做的就是专注于 Python 这一门语言,明确学习的重点,把握好节奏循序渐进地学习。

根据我多年的学习工作经验,我把编程语言的学习重点,总结成了下面这三步,无论你是否有其他语言的基础,都可以对照来做,稳步进阶。

## 3. 第一步:大厦之基,勤加练习

任何一门编程语言,其覆盖范围都是相当广泛的,从基本的变量赋值、条件循环,到并发编程、Web 开发等等,我想市面上几乎没有任何一本书能够罗列完全。

所以,我建议你,在掌握必要的基础时,就得多上手操作了。千万不要等到把教材上所有东西都学完了才开始,因为到那时候你会发现,前面好不容易记住的一堆东西似乎又忘记了。计算机科学是一门十分讲究实战的学科,因此越早上手练习,练得越多越勤,就越好。

不过,到底什么叫做必要的基础呢?以 Python 为例,如果你能够理解变量间的赋值、基本的数据类型、条件与循环语句、函数的用法,那么你就达到了第一步的底线标准,应该开始在课下多多练习了。

比方说,你可以自己动手编程做一个简易的计算器,这应该也是大多数程序员实操的第一个小项目。用户输入数字和运算符后,你的程序能够检查输入是否合法并且返回正确的结果吗?

在做这个小项目的过程中,你可能会遇到不少问题。我的建议是,遇到不懂的问题时,多去 [Stack Overflow](https://stackoverflow.com/) 上查询,这样你还能阅读别人优秀的代码,借鉴别人的思路,对于你的学习肯定大有帮助。当然,实在解决不了的问题,也可以写在留言区,我们一起来解决。

## 3. 第二步:代码规范,必不可少

诚然,学习编程讲究快和高效。但是,与此同时,请一定不要忽略每一种语言必要的编程规范。在你自己刚开始写代码练习时,你可以不写单元测试,但总不能几百行的代码却没有一个函数,而是从头顺序写到尾吧?你可以省略一些可有可无的注释,但总不能把很多行代码全部并到一行吧?

比如,我们来看下面这行代码:

```python
v.A(param1, param2, param3).B(param4, param5).C(param6, param7).D()
```

显然,这样写十分不科学,应该把它拆分成多行:

```python
v.A(param1, param2, param3) \ # 字符'\'表示换行
.B(param4, param5) \
.C(param6, param7) \
.D()
```

再比如,变量和函数的命名虽有一定的随意性,但一定要有意义。如果你图省事,直接把变量依次命名为 v1、v2、v3 等,把函数依次命名为 func1、func2、func3 等等,不仅让其他人难理解,就算是你自己,日后维护起来都费劲儿。

一名优秀的程序员,一定遵守编程语言的代码规范。像 Facebook 的工程师,每次写完代码都必须经过别人的 review 才能提交。如果有不遵守代码规范的例子,哪怕只是一个函数或是一个变量的命名,我们都会要求原作者加以修改,严格规范才能保证代码库的代码质量。

## 4. 第三步:开发经验,质的突破

想要真正熟练地掌握 Python 或者是任何一门其他的编程语言,拥有大中型产品的开发经验是必不可少的。因为实战经验才能让你站得更高,望得更远。

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

当然,在专栏里我没办法让你完成一个上亿用户级的实践产品,但是我会把自己这些年的开发经验倾囊相授,并通过量化交易这个实战案例,带你踏入“高级战场”,帮你掌握必要的开发知识。

最后,我专门为你绘制了一张 Python 学习的知识图谱,里面涵盖了 Python 最高频的核心知识,大部分内容我在专栏中都会讲到。你可以保存或者打印出来,作为学习参考。

![img](./01.assets/2cfc18adf51b61ca8140561071d20c1d.png)

今天,我跟你分享了 Python 的学习方法和注意事项,其实这些观点不只适用于 Python,也能帮助你学习任何一门其他计算机编程语言,希望你能牢记在心。在接下来的课程里,我会带你逐步突破,最终成为一名 Python 高手。

那么,对于学习 Python 或者是其他编程语言,你有什么困扰或是心得吗?欢迎在留言区与我交流!

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

::: details 公众号:AI悦创【二维码】

![](/gzh.jpg)

:::

::: info AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:[QQ](http://wpa.qq.com/msgrd?v=3&uin=1432803776&site=qq&menu=yes)

方法二:微信:Jiabcdefh

:::

![](/zsxq.jpg)

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit af32675

Please sign in to comment.