零基础学Python入门的详细路径,我为你准备好了!
作为一门优美、精巧的编程语言,Python不仅仅适合作为编程入门,对于希望掌握实战开发技能进而从事编程工作的人来说,Python也是一个很不错的选择。
下面针对零基础学Python的初学者说一说入门的学习路径。
1、建立开发环境
建立开发环境非常重要,。做任何开发,首先就是要把这个环境准备好,之后就可以去做各种尝试,尝试过程中的话就能逐渐建立信心。初学者往往在环境配置中被各种预想不到的问题弄得很沮丧。
目前来说,使用Python的工作环境有如下几种:
命令行交互环境:这是Python原生支持的工作环境,直接在命令行与Python进行交互。
文本编辑环境:是集成开发环境的一种精简版,以Sublime-Text这类文本编辑器为代表。这种环境仅保留帮助你编写代码的核心组件,主要是提供给单人工作的场景使用,在没有太多分工协作的前提下专注于代码的编写。
集成开发环境:如果想要使用Python编写较大的工程项目,特别是在很多人协同工作的情况下,可以考虑使用PyCharm这样的大型集成开发环境(IDE)。在这种环境下,IDE会将许多开发中需要的功能集成在一起,便于我们的使用。
交互研究环境:在这种交互研究环境下,每次的代码都相当于是在之前代码上的增量,从而保证只有发生变化的部分被重新执行,无需对不发生改变的部分重新计算。特别适用于研究人员快速验证模型的正确性。
初学者一般使用文本编辑环境就可以,当然也要了解如何在命令行中输入代码与Python进行交互。
2、了解编程语言基础
有了工作环境后,我们就可以开始编写和执行Python程序了。
Python这类脚本程序其实就像是一段“电影脚本”,按照从前往后的顺序规定了一系列的动作,指挥着你电脑的CPU、硬盘、操作系统等部件干这干那。所以为了让电脑能够看懂,你编写的这段“电影脚本”需要按照电脑所使用的语言进行编写。例如print("hello world!")这样一句话就会让电脑调用一系列部件,最后在屏幕上输出它对世界的问好;而a=3+5这样一句话就会让电脑计算3+5的答案,然后将答案放入一个名字为a的“盒子”当中。
所以初期你学习的是一些编写“电影脚本”的语法规则,在这个过程中你会逐渐了解到编程语言的一些基本元素:
· 变量:变量就像是一个个存放了东西的盒子,用来保存一些临时的值或者那些需要多次使用的值。变量有不同的基本类型,比如数字和字符串类型。
· 运算符:变量顾名思义,是可以不断变化的,而变化的手段就是对变量就行操作(或者称之为运算)。运算符是Python语言中一种直观的数据操作方式,它可以对特定的一个或者多个变量或常量进行运算并返回结果。比如最简单的加减乘除在Python语言中都有对应的运算符。
· 条件控制:在Python程序执行的过程中,我们需要根据当前的状况来判断接下来让电脑做什么,这就是条件控制语句,它会将“剧本”拆分成两部分,在一种情况下执行第一部分,在剩下的情况执行第二部分。
· 循环控制:有一些脚本我们有时候可能要重复执行,或者它们有很大程度的公共部分(例如输出1到100之间的100个整数,每次输出就非常相似),我们就会使用循环控制语句。我们也可以中断一次循环(continue)或者跳出循环(break)。
使用这些元素,我们就能完成大部分的计算了,你可以编写一些简单的程序,也可以在命令行中通过这些语言元素对Python虚拟机发号施令啦。当然,如果你学习过另外一门语言,这部分基础是信手拈来的,那么对你来说更多是熟悉和适应Python的语法风格。
3、掌握数据结构基础
为了能够完成更复杂的计算场景,Python提供了若干种内置的数据结构。所谓数据结构,你可以认为一组变量以某个特定的方式组织在一起,而不仅仅是单个独立的变量。通过特定的组织方式,在处理某些运算时能够能够大大提高编程的效率。数据结构是计算机专业的一门必修专业课,更高级的数据结构及其内部实现方式你需要专门学习,不过Python的数据结构可以是一个非常好的学习起点。
Python内置的数据结构包含如下四种:
列表:列表(list)在Python的语法中是一种有序且长度可变的集合,可以随时对其中的元素进行添加、删除和修改。我们往往可以用列表来表示各种队列、数组这种“有序”的序列。
元组:元组(tuple)和列表基本相同,都是有序的序列,其区别在于元组内的元素一旦定义,就不能够再进行修改,只能够通过下标对元组内部的元素进行访问。使用元组,我们可以将一些数据有机的组合在一起进行表示。
·集合:集合(Set)作为一个复杂数据类型,如其在数学中的定义一样,在Python中也是起到表示一系列值的“集合”的作用。使用集合,我们可以快速的判断某个元素的存在性。
字典:字典(Dict)在数学中并没有对应的定义,它更像是从生活中的字典借鉴而来的一种数据类型。例如手机通讯录就是一个典型的可以使用字典来存储的数据集。依靠字典,我们可以很方便的根据某个元素ID(例如编号、名字等)来查找到它。
这四种数据结构能够覆盖大部分我们所工作的场景,天码营的课程提高了更多实例,熟练掌握这四种数据结构,你会发现编程效率会大大提高。
4、掌握函数的基本概念
在实际编写程序的过程中,某些代码可能会反复执行多次。而这些代码除了变量不同外,没有任何的区别。这些代码实际上类似于数学表达式中的函数f(x),当我们给x赋值时,就会得到对应的结果。在Python中也提供了这样的特性,同样称之为“函数”。
函数将需要反复使用的代码进行模块化,从而减少了代码的重复,同时还增加了可读性和可维护性。当需要修改时,只要改变定义内的代码,就可以完成对每一次执行的修改。
定义函数的语法其实很简单,关于函数重点需要掌握的是函数的参数定义。Python函数的参数定义(即如何定义函数的输入)非常有特色,比如:
默认参数
可变参数
关键字参数
命名关键字参数
本质上这些特性使得函数调用者进行传参时会更加得心应手。
5、面向对象编程
面向对象是一种非常符合人类思维的编程方法,因为现实世界就是由对象和对象之间的交互来构成的,所以我们其实很容易将现实世界映射到软件开发中。举个例子,一辆汽车、一篇博客、一个人,对应到软件系统中都是一个对象;而对象具有自己的状态和行为。
面向对象:类的定义
你需要了解一个面向对象编程的核心概念:“类”。类描述一类对象的状态和行为的模板。可以把类想象成一个汽车设计图,根据这个汽车设计图生产出来的每一辆汽车就是类的一个实例,这些实例就称之为对象。
状态和行为,对应到Python语言中,就是一个类和对象的属性和方法(类中的函数一般称之为方法),属性方法可以进行外部的访问控制,从实现“封装”这一面向对象特性。
所以对应到Python这门编程语言,首先你需要了解如何定义类,以及定义类的属性和方法。
面向对象:理解继承和多态
在“封装”的基础上,面向对象编程还有“继承”和“多态”的特型。假如我们有一个动物(Animal)类,它包含有动物最基本的一些特型。现在我们要新写一个犬(Dog)类,显然我们知道犬也是动物的一种,因此它也肯定包含动物类的全部特性。因此我们利用“继承”的特型,并不需要将动物类的所有代码在犬类中重写一遍,而是在创建犬类时继承动物类。此时我们将动物类称之为犬类的父类,犬类称为动物类的子类。而“多态”的特性使得犬类在继承动物类的方法时,也可以重写这写方法,使得它更有符合犬的特征。
面向对象编程方法的在大型项目中被广泛的应用。现在人们谈论到面向对象编程时,不仅仅是一种程序设计方法,更多意义上是一种程序开发方法,了解面向对象编程时每个程序员必须要做的事。
6、学习函数式编程
也许你还觉得函数式编程很陌生,但许多的函数式编程风格已经渐渐开始流行。什么叫函数式编程呢?事实上只要语言将函数作为一等公民(或者借助工具达到类似效果) 就可以支持函数式编程。而将函数作为一等公民意味着函数可以像变量一样传参、赋值和返回。函数式编程的书写方式使得代码编写的效率更加高,极大地提高生产效率。
你需要了解高阶函数、匿名函数(lambda表达式),闭包等一些基本概念;了解函数式编程最好的方式是从下面几个非常实用的高阶函数开始。
函数式编程:了解高阶函数的用法
函数式编程:
map
复制代码
map多用于对列表数据的处理,它将一个方法依次对序列的每一个元素使用,比如:
def f(x):
return x*x
map(f, [1,2,3])
复制代码
该代码就会得到[f(1),f(2),f(3)],所以结果是[1,4,9]
reduce
reduce利用递归的思想,会将前一次的计算结果作为第一个参数,将下一个元素作为第二个参数进行计算:
def f(x1,x2):
return x1*x2
reduce(f, [1,2,3,4])
复制代码
实际上等价于f(f(f(1,2),3),4),结果也就是24了
filter
filter会根据传入函数对象f的计算结果对原序列进行筛选,对于一个元素x, 留下f(x)为真(True)的元素,删除f(x)为假(False)的元素
sort
sort会根据函数的返回结果来判定两个数的大小关系,并依次作为依据对序列内元素进行排序,比如:
def compare(x, y):
return y - x #逆序
myList.sort(compare)
复制代码
最后得到的myList就会是从大到小排列的序列。
函数式编程:lambda表达式
lambda表达式就是匿名函数,它直接实现了函数,而不需要定义函数名。比如上面排序的代码,我们就可以这样实现:
myList.sort(lambda x,y: y-x)
复制代码
通过lambda表达式直接定义使用,这样就不需要去额外定义一个compare方法,代码会更加简洁。
函数式编程:闭包
在一般的函数中,返回值都是诸如数字、字符串之类的对象。但实际上函数的返回值可以是一个函数。返回的函数不仅仅包含有其自身的代码,也同时包含了调用时的参数,并且多次返回的函数之间互不干扰,这一特性被称为“闭包(closure)”。
函数式编程的学习并不复杂,学会使用函数式编程往往能够起到事半功倍的效果。能够熟练的使用Python函数式编程也是每个Python程序员应该掌握的能力。
7、掌握更多标准库中的模块
我们都说Python简单好用,方便易学,很大部分要归功于Python提供的功能强大的标准库。标准库意味着,Python已经帮我们封装好了很多底层功能,我们拿来即用。因此,标准库中的一些基础模块我们需要掌握。
输入输出:最为“基础”的模块便是对输入输出的编程,我们都知道可以通过input(),output()来完成对数据的输入和输出。但是如果想要读取的是图片?二进制文件?甚至于各类奇怪格式的文件。这种时候,我们就需要通过IO编程来完成对这一过程的定制化。
异常处理:我们编写的程序也可能产生许多错误,甚至有些错误是我们在设计时就预计产生的。但是我们不能让这些错误影响我们程序的运行。例如,使用Python爬虫获取1000个网页,如果在开始爬第一个网页的时候程序就出错了,那么一般情况下我们的程序就会自动终止,从而后续的网页也都不会爬取。但是我们可以使用异常处理,来“catch”住这些错误,将没有成功获取的网页记录下来,然后继续处理后续的网页。基于这样的方式,我们就可以安心的让程序跑上一个晚上,然后在第二天回来处理那些产生了异常的网页。
多进程与多线程:我们还可以通过多进程和多线程使得我们的Python程序拥有可以并行处理诸多复杂事物的功能。并行是一种能够充分利用计算机计算核心(CPU/GPU)性能的方法。在目前单核计算能力增长逐渐放缓的现在,并行是少有的能够大大增加计算速度的技术了。想象一下,使用单核CPU训练一次模型如果需要20小时,通过多核GPU(GPU内部本身就是并行的)就很有可能将这个时间缩短到1小时内。这会大大增加对模型参数的调整效率。
Python标准库还有很多内容,这里列的肯定是不全的;实际上随着Python版本的逐渐更新,还有更多的高级特性会被逐渐加入这门语言当中。毋庸置疑的,随着数据科学的发展,Python的使用前景也将越来越好。而在这个过程中,保持对Python的熟悉和了解,会是你紧跟技术潮流的最佳助力。
如果你也刚好是零基础学Python,这篇文章看到这里也算是有收获了!