【进阶Python】第一讲:开篇

简介: 不管是否喜欢Python这门编程语言,它都是目前最受欢迎的编程语言之一。尤其是在计算机视觉、自然语言、数据分析等领域,它具有不可撼动的地位。有同学提及Python会不懈的说“这门编程语言太容易了”,但是我个人认为它是一门“会用容易,用好困难”的编程语言。开设【进阶Python】这个系列不会去重复的讲解Python的基础语法,会从Python的一些高阶用法开始,讲解一些平时开发过程中用的较少或者容易忽略的部分。开设这个系列的目的主要有两点:第一:把自己开发过程中的一些心得和经验总结下来。第二:如果能够帮助更多的Python学习者,那就更加荣幸了。

前言

2015年,本科毕业的那个暑假我开始疯狂的投递简历,希望找一份数据分析与数据挖掘相关的实习工作。直到有一家公司的面试官问到我:“你会Python吗?”。我当时一脸疑惑,因为,大学期间只系统的学习过C语言,后期开发系统中用到过少量的C#。于是我问面试官:“你能给我拼写一下这么语言的名字吗”。多年之后回想起来还会觉得很尴尬,真的是孤陋寡闻。

从那以后,“Python”这么语言经常出现在我耳边。读研之后我开始之后我主要研究的方向是传统目标识别和图像处理,主要使用的语言就是C++和Matlab,所以Python在我读研第一年并不是主力工具。研二开始后我开始进入深度学习这个领域,开始用到很多第三方的工具包,例如caffe、tensorflow已经CNN,那以后开始以Python语言为主。

因为之前有一些编程基础,在加上当初面试实习时时间紧迫,所以我就抽了一天的时间把Python基础教程看了一遍,了解了基本用法之后就成功的面试上了一份实习工作。那时候我认为Python是简单的,因为它不像C++、Java那样有严格的语法规范、有变量类型的概念,你只需要记住缩进正确即可。而且在做自然语言和计算机视觉过程中很多部分的代码都是依托第三方工具包完成,真正自己开发的只是一些数据预处理、文本处理以及用一些条件循环语句对逻辑进行串联。

直到后来从事工作以后,做了更多有严格交付要求的项目之后才发现,Python并没有想象的那么简单,“会用Python容易,用好Python不易”,这是我使用几年Python之后的感触。

当你做一个项目要考虑到代码的复用性、易读性、运行效率、后期维护成本以及面对一些复杂的数据结构时,你会发现Python绝对不是简简单单利用那些基本知识能够实现的。

这也是我开始这个系列分享的原因,第一:把自己开发过程中的一些心得和经验总结下来。第二:如果能够帮助更多的Python学习者,那就更加荣幸了。

为什么要用Python?

近几年唱衰Python的声音不绝于耳,有些人是的确发现并感受到了Python的缺点,但是更多的人是跟风式的唱衰Python。“Python效率低”,很多人都这样说,这显然有一些以偏概全的感觉,如果做游戏、软件,Python的确不占优势,但是如果作为算法工程师,进行算法验证,我想没有几个人会选择C/C++。口说无凭,先看几组数据对比。

PYPL

通过分析在谷歌上搜索语言教程的频率,创建了编程语言索引的PYPL流行度。

首先看一下PYPL最新编程语言流行程度,

45.png

Python居于第一,力压Java、JS、PHP这些名气非常大的编程语言,而且前10名中2~9名都出现了负增长,而Python却4.5%的正向增长率。

如果觉得一个平台不够具有说服力,可以再看看另外一个知名的编程社区的排名。

TIOBE编程社区

TIOBE编程社区指数是编程语言受欢迎程度的一个指标。该指数每月更新一次。这些排名是基于全球熟练工程师、课程和第三方供应商的数量。流行的搜索引擎,如谷歌,必应,雅虎!美国、维基百科(Wikipedia)、亚马逊(Amazon)、YouTube和百度被用来计算收视率。值得注意的是,TIOBE索引不是关于最好的编程语言,也不是编写大多数代码行的语言。

来看一下TIOBE社区7月的编程语言排名,

46.jpg

Python仅次于Java和C,排在第三名,而且对比去年同期,前10名中Python增长速度最快,达到2.9%。

从这里可以看出,Python一直被唱衰、一直很坚挺,尽管几年量关于Go、julia、Rust的呼声很高,但是依然无法撼动Python的地位,而且这些编程语言到底好不好用?有没有炒作的成分在里面?现在还是一个问号。

47.png


话说回来为什么Python如此受欢迎?

我认为存在的即是合理的,如果它真的一无是处、漏洞百出,是经不住众人的考验的。它之所以如此受欢迎,自然有很多吸引人的方面:

  • 简单易用、节省时间
  • 丰富的第三方工具包
  • 强大的社区
  • 应用场景丰富

其他三个方面暂且不说,就说一些第一点,简单易用、节省时间,我觉得有这一个理由就足以吸引很多人。尤其是对于算法、测试等岗位,真正的耗费心思的并不在编程、开发这一块,编程语言是用来验证算法的可靠性的,但是没有这个编程语言,自然无法验证,这就体现出有一个简单易用的语言有多么重要了。

吴恩达在《机器学习》这么课程里提到“硅谷的工程师大多数都会选择一个简单的编程语言对自己的算法进行验证,当确认有效之后会用c/c++等语言重新实现一遍”,这足以体现Python语言简单易用的优点。

Python距离第一个版本发布以及有28年,唱衰的言论从未间断,但是依旧坚挺。

尤其是机器学习的大规模应用、国家把人工智能智能技术上升到战略层次,使得Python成为独树一帜的编程语言,虽然这两年Go、Julia号称性能更好、更加易用,但是一直无法撼动Python在机器学习领域的地位,很难望其项背,为什么?我认为最主要的原因就是拥有强大的用户基础。现在在大多数企业,从事算法相关岗位的清一色的使用Python,更别说计算机视觉、自然语言这些强依赖Python第三方库的方向。

Python该怎么学习?

我认为大多数编程语言的学习都可以简化为3个过程:

  • 入门
  • 进阶
  • 强化

入门阶段网上的教程已经很多了,关于入门我个人是不推荐参加培训班的,因为就如同前面所说的那样,Python基础语法非常简单,尤其是有一些C、Matlab、C++等编程基础的同学来说,Python中的很多概念虽然和恰语言不是完全相同,但是相似度还是非常高的,可以达到触类旁通。我个人更倾向于使用在线教程,这里推荐两个不错的入门教程,

菜鸟教程

https://www.runoob.com/python/python-tutorial.html

廖雪峰Python

https://www.liaoxuefeng.com/wiki/1016959663602400

强化阶段我认为需要在实际的项目和工作中去得到提升,就如同计算机视觉、自然语言处理一样,你从文章和练手项目中所能获取的只有那么多,如果像进一步得到升华就需要在项目中去面对困难、解决困难,这时候就会想尽方法去解决各种难题,不知不觉中会得到很大的提升。

本系列的主要目的是介绍进阶阶段,讲解一些Python的高级用法,对于入门和强化阶段自己可以私下完成。

书籍推荐

如果时间比较充足,我觉得可以系统的看一些Python书籍,因为书籍的严谨性和条理性更加有保障,在这我推荐3本我个人认为不错的书籍,

1.《Python编程 从入门到实践》

如果时间有限,我认为入门阶段可以通过菜鸟教程、廖雪峰Python进行学习。如果时间充足,我认为可以看一下入门书籍,因为更加严谨一些。

《Python编程 从入门到实践》是一本比较适合入门的书籍,环境配置、变量、列表、if语句、函数等基础的概念都会详细的展开介绍,这对于没有编成基础的同学非常有帮助。

2.《流畅的Python》

这是一本经得起考验的Python书籍。

它和大多数书籍和在线教程蜻蜓点水式的讲解不同,它更加深入,深入而不冗余,在你看这本书的时候你会发现,它的每一段话都是有意义的,没有什么废话。

它分别从数据结构、字典集合、文本和字节序列、函数、设计、装饰器、闭包等讲起,然后对每一块知识进行展开,详细介绍里面最根本的原理,然后告诉你,该怎么用好它,高效的使用它。

举一个最简单的例子,在绝大多数教程都会讲到循环和条件语句,千篇一律的告诉你"if..else..", "for...while",这个有一点编程语言的同学都知道,但是在Python里面循环和条件语句有什么特殊的地方吗?该怎么用好它?

48.jpg

《流畅的Python》这本书就教你怎么去使用它,告诉你列表推导该怎么用还有它的意义所在。

这就是这本书的优点:不仅告诉你怎么用Python,而是告诉你怎么用好Python

3. 《Python CookBook》

学而不精的同学都会认为Python是一门很简单的编程语言,不错,Python相对于Java、C++要简单很多,没有严格的语法结构、没有变量类型,而且如果有一些编程基础去学Python的话可以一个周甚至一天即可学完。

但是我认为,Python入门简单,但是用好并不简单,当你接触到标准的商业项目时你就会意识到Python高级用法的重要性以及它的价值所在。

《Python CookBook》这本书就是这样的一本进阶教材,它不同于大多数教程,反复的介绍基本语法,它直接跳过基本语法开始讲解数据结构、算法、迭代器、生成器、类、对象、元编程等,我认为这些才是工作中真正有价值、拉开差距的地方,而那些基本语法是默认应该会的。

《Python CookBook》会在每个知识点开始提出一个应用场景,然后告诉你怎么去解决这种应用,同时会编程实现,这样对于提升Python是最为实际的,而且让你更加容易理解它这样用的价值所在。

这本书不仅有出版的书籍,也有免费的在线教程,需要可以看一下。

https://python3-cookbook.readthedocs.io/zh_CN/latest/preface.html

相关文章
|
4月前
|
数据采集 网络协议 数据挖掘
网络爬虫进阶之路:深入理解HTTP协议,用Python urllib解锁新技能
【7月更文挑战第30天】网络爬虫是数据分析和信息聚合的关键工具。深入理解HTTP协议及掌握Python的urllib库对于高效爬虫开发至关重要。HTTP协议采用请求/响应模型,具有无状态性、支持多种请求方法和内容协商等特点。
51 3
|
4月前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
【7月更文挑战第25天】在网络技术快速发展的背景下, Python因其简洁的语法和强大的库支持成为学习网络编程的理想选择。
70 5
|
4月前
|
机器学习/深度学习 数据采集 算法
Python编程语言进阶学习:深入探索与高级应用
【7月更文挑战第23天】Python的进阶学习是一个不断探索和实践的过程。通过深入学习高级数据结构、面向对象编程、并发编程、性能优化以及在实际项目中的应用,你将能够更加熟练地运用Python解决复杂问题,并在编程道路上走得更远。记住,理论知识只是基础,真正的成长来自于不断的实践和反思。
|
4月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
33 3
|
4月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
64 2
|
4月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
55 1
|
4月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
76 4
|
4月前
|
算法 Python
Python算法高手进阶指南:分治法、贪心算法、动态规划,掌握它们,算法难题迎刃而解!
【7月更文挑战第10天】探索Python算法的精华:分治法(如归并排序)、贪心策略(如找零钱问题)和动态规划(解复杂问题)。通过示例代码揭示它们如何优化问题解决,提升编程技能。掌握这些策略,攀登技术巅峰。
122 2
|
5月前
|
开发者 Python
Python进阶:深入剖析闭包与装饰器的应用与技巧
Python进阶:深入剖析闭包与装饰器的应用与技巧
|
5月前
|
分布式计算 算法 Python
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
下一篇
无影云桌面