【学习笔记】python3核心技术与实践--如何逐步突破,成为python高手
众所周知,Facebook 的主流语言是 Hack(PHP 的进化版本)。不过,我敢拍着胸脯说,就刚入职的工程师而言,100 个里至少有 95 个,以前都从未用过 Hack 或者 PHP。但是,这些人上手都特别快,基本上一两周后,日常编程便毫无压力了。
他们是怎么做到的呢?
事实上,他们遵循的,正是我在开篇词中提到的方法,也是本专栏学习的中心观点:“从工程的角度去学习 Python”。那么具体来说,到底要怎么学,学习的过程中又要特别注意哪些地方呢?
不同语言,需融会贯通
其实,如果你在学一门语言的时候多阅读、多练习、多思考,你就会发现,不同语言都是类似的。编程语言本就是人类控制计算机的指令,语法规则等方面自然大同小异。
而在原有基础上,学习一门新的编程语言,其实也没有那么难,你首先要做到的是明确区分。比如,在学习 Python 的条件与循环语句时,多回忆一下其他语言的语法是怎样的。再如,遇到 Python 中的字符串相加时,你能分析出它的复杂度吗?再联想到其他语言,比如 Java 中字符串相加的复杂度,它们之间有什么相同点、又有什么区别呢?
除了能够明确区分语言的不同点,我们还要能联系起来灵活运用。比如,最典型的“编程语言两问”:
你了解你学过的每种编程语言的特点吗?
你能根据不同的产品需求,选用合适的编程语言吗?
举个例子,Python 的优点之一是特别擅长数据分析,所以广泛应用于人工智能、机器学习等领域,如机器学习中 TensorFlow 的框架,就是用 Python 写的。但是涉及到底层的矩阵运算等等,还是要依赖于 C++ 完成,因为 C++ 的速度快,运行效率更高。
事实上,很多公司都是这样,服务器端开发基于 Python,但底层的基础架构依赖于 C++。这就是典型的“不同需求选用不同语言”。毕竟,你要明白,哪怕只是几十到几百毫秒的速度差距,对于公司、对于用户体验来说都是决定性的。
唯一语言,可循序渐进
当然,如果 Python 是你学的第一门编程语言,那也不必担心。我们知道,虽然同为人机交互的桥梁,Python 语言比起 C++、Java 等主流语言,语法更简洁,也更接近英语,对编程世界的新人还是很友好的,这也是其显著优点。这种情况下,你要做的就是专注于 Python 这一门语言,明确学习的重点,把握好节奏循序渐进地学习。
根据我多年的学习工作经验,我把编程语言的学习重点,总结成了下面这三步,无论你是否有其他语言的基础,都可以对照来做,稳步进阶。
第一步:大厦之基,勤加练习
任何一门编程语言,其覆盖范围都是相当广泛的,从基本的变量赋值、条件循环,到并发编程、Web 开发等等,我想市面上几乎没有任何一本书能够罗列完全。
所以,我建议你,在掌握必要的基础时,就得多上手操作了。千万不要等到把教材上所有东西都学完了才开始,因为到那时候你会发现,前面好不容易记住的一堆东西似乎又忘记了。计算机科学是一门十分讲究实战的学科,因此越早上手练习,练得越多越勤,就越好。
不过,到底什么叫做必要的基础呢?以 Python 为例,如果你能够理解变量间的赋值、基本的数据类型、条件与循环语句、函数的用法,那么你就达到了第一步的底线标准,应该开始在课下多多练习了。
比方说,你可以自己动手编程做一个简易的计算器,这应该也是大多数程序员实操的第一个小项目。用户输入数字和运算符后,你的程序能够检查输入是否合法并且返回正确的结果吗?
在做这个小项目的过程中,你可能会遇到不少问题。我的建议是,遇到不懂的问题时,多去Stack Overflow上查询,这样你还能阅读别人优秀的代码,借鉴别人的思路,对于你的学习肯定大有帮助。当然,实在解决不了的问题,也可以写在留言区,我们一起来解决。
第二步:代码规范,必不可少
诚然,学习编程讲究快和高效。但是,与此同时,请一定不要忽略每一种语言必要的编程规范。在你自己刚开始写代码练习时,你可以不写单元测试,但总不能几百行的代码却没有一个函数,而是从头顺序写到尾吧?你可以省略一些可有可无的注释,但总不能把很多行代码全部并到一行吧?
比如,我们来看下面这行代码:
v.A(param1, param2, param3).B(param4, param5).C(param6, param7).D()
显然,这样写十分不科学,应该把它拆分成多行:
v.A(param1, param2, param3) \ # 字符'\'表示换行
.B(param4, param5) \
.C(param6, param7) \
.D()
再比如,变量和函数的命名虽有一定的随意性,但一定要有意义。如果你图省事,直接把变量依次命名为 v1、v2、v3 等,把函数依次命名为 func1、func2、func3 等等,不仅让其他人难理解,就算是你自己,日后维护起来都费劲儿。
一名优秀的程序员,一定遵守编程语言的代码规范。像 Facebook 的工程师,每次写完代码都必须经过别人的 review 才能提交。如果有不遵守代码规范的例子,哪怕只是一个函数或是一个变量的命名,我们都会要求原作者加以修改,严格规范才能保证代码库的代码质量。
第三步:开发经验,质的突破
想要真正熟练地掌握 Python 或者是任何一门其他的编程语言,拥有大中型产品的开发经验是必不可少的。因为实战经验才能让你站得更高,望得更远。
比如我们每天都在用搜索引擎,但你了解一个搜索引擎的服务器端实现吗?这是一个典型的面向对象设计,你需要定义一系列相关的类和函数,需要从产品需求、代码复杂度、效率以及可读性等多个方面考虑,同时,上线后还要进行各种优化等等。
当然,在专栏里我没办法让你完成一个上亿用户级的实践产品,但是我会把自己这些年的开发经验倾囊相授,并通过量化交易这个实战案例,带你踏入“高级战场”,帮你掌握必要的开发知识。
最后,我专门为你绘制了一张 Python 学习的知识图谱,里面涵盖了 Python 最高频的核心知识,大部分内容我在专栏中都会讲到。你可以保存或者打印出来,作为学习参考。
今天,我跟你分享了 Python 的学习方法和注意事项,其实这些观点不只适用于 Python,也能帮助你学习任何一门其他计算机编程语言,希望你能牢记在心。在接下来的课程里,我会带你逐步突破,最终成为一名 Python 高手。
【学习笔记】python3核心技术与实践--如何逐步突破,成为python高手的更多相关文章
- 【学习笔记】python3核心技术与实践--开篇词
python的应用和流行程度: Python 可以运用在数据处理.Web 开发.人工智能等多个领域,它的语言简洁.开发效率高.可移植性强,并且可以和其他编程语言(比如 C++)轻松无缝衔接.现如今,不 ...
- springmvc学习笔记--Interceptor机制和实践
前言: Spring的AOP理念, 以及j2ee中责任链(过滤器链)的设计模式, 确实深入人心, 处处可以看到它的身影. 这次借项目空闲, 来总结一下SpringMVC的Interceptor机制, ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- .NET Core学习笔记(7)——Exception最佳实践
1.为什么不要给每个方法都写try catch 为每个方法都编写try catch是错误的做法,理由如下: a.重复嵌套的try catch是无用的,多余的. 这一点非常容易理解,下面的示例代码中,O ...
- 学习笔记:安装swig+用SWIG封装C++为Python模块+SWIG使用说明
这段时间一直在摸索swing,用它来封装C++代码来生成python脚步语言.并总结了swing从安装到配置再到代码封装编译生成动态库的整个过程,下面这篇文章都是我在实际的运用中的一些经验总结,分享给 ...
- 【学习笔记】第五章 python3核心技术与实践--字典和集合
[第四章]思考题的答案,仅供参考: []比list()更快,因为调用了list函数有一定的时间,而[]却没有. 前面我们学习了 Python 中的列表和元组,了解了他们的基本操作和性能比较.这节章,我 ...
- 【学习笔记】第四章 Python3核心技术与实践--列表与元组
前面的课程,我们了解了Python 语言的学习方法,并且带你了解了 Python 必知的常用工具——Jupyter.接下来我们正式学习 Python 的具体知识. 对于每一门编程语言来说,数据结构都是 ...
- 【学习笔记】第三章 python3核心技术与实践--Jupyter Notebook
可能你已经知道,Python 在 14 年后的“崛起”,得益于机器学习和数学统计应用的兴起.那为什么 Python 如此适合数学统计和机器学习呢?作为“老司机”的我可以肯定地告诉你,Jupyter N ...
- 【学习笔记】第七章 python3核心技术与实践--输入与输出
[第六章]思考题答案,仅供参考: # coding:utf-8import time#方法一start_time = time.perf_counter()s = ''for n in range(0 ...
随机推荐
- Java反射Reflect的使用详解
目录 一. 什么是反射 二. 反射的基础Class 2.1 Class类概述 2.2 Class类对象获取的三种方式 三. 反射-构造函数 3.1 getDeclaredConstructor(Cla ...
- C++通过宏定义判断操作系统及编译器
INTRODUCTION: C++的编译环境千奇百怪,很多时候一些代码在某些编译环境下可用,一旦移到其他环境下,就会干脆Compile Error 对此,我们可以使用C++的宏定义来判断操作系统,从而 ...
- 记录一则AIX使用裸设备安装OracleRAC的问题
需求背景:在AIX6.1上安装Oracle 10g RAC,一线工程师反馈节点2运行root脚本无法成功,跟进排查发现实际上底层存储磁盘的准备工作就存在问题. 客户要求底层存储选用裸设备方式,所以必须 ...
- 记录一则DG遭遇ORA-00088的案例
测试环境:RHEL 5.4 + Oracle 11.2.0.3 DG 现象:起初是在使用DG Broker进行switchover切换测试时,报错ORA-16775,提示有可能有数据丢失,不允许swi ...
- 实验Oracle数据文件被误删除的场景恢复
环境:RHEL 5.4 + Oracle 11.2.0.3 背景:数据库没有备份,数据库文件被误操作rm,此时数据库尚未关闭,也就是对应句柄存在,如何快速恢复? 1.某个普通数据文件被删除 2.所有数 ...
- Java描述表达式求值的两种解法:双栈结构和二叉树
Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...
- 12款好用超赞的国外搜索资源网站 ,开发者们的标配,你都知道吗?不知道就OUT了
简介 看了 看了网上有好多推荐插件的文章,很少有推荐搜索资源网站,于是今天决定推荐一波搜索资源网站.这些网站带给我开阔视眼增长知识.所以在这里整理一下,分享给朋友和博友们. 学习技术过程我们经常需要使 ...
- 关卡界面中个人信息随解锁关卡的移动(CocosCreator)
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 1.功能描述 在关卡很多的游戏里面,我们一般使用滑动来向玩家展示所有的关卡,为了清楚的让用户看到自己当前所在的关卡, ...
- Java IO体系综述
Java IO体系综述 一.流的概念 在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流.这些字节序列的来源地和目的地可以是文件,而且通常都 ...
- Java集合框架之ArrayList浅析
Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...