首页
学习
活动
专区
工具
TVP
发布

0基础自学Python入门的路径是什么?

中国大学极少开设 Python 课程,故而国内 Python 程序员多属自学,一些前辈在自学 Python 的过程中有哪些值得分享的经验或者有趣的体验呢?

下面我们就来看一位Python大神的学习心得。

在2017年旧金山召开的GitHub年度盛会GitHub Universe,GitHub公布了年度受欢迎编程语言排行,Python已经超过Java位居第二。实际上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的熟悉和了解,会是你紧跟技术潮流的最佳助力。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171212B0AW5200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券