从能作什么到如何去作,一文带你快速掌握Python编程基础与实战

摘要:Python语言的教程虽然随处可见,可是忙于平常业务/学习的你或许:一直想要“找个时间学一点”,可是又不知道该从何下手?本文将从Python能作什么,如何学习Python以及Python的基础知识为你的Python之路点上一盏明灯。mysql

本文内容根据演讲视频以及PPT整理而成。算法

本文的分享主要围绕如下几个方面:sql

  1. Python能作什么?(常见应用场景介绍)
  2. 如何学习Python?
  3. Python语法基础实战
  4. Python面向对象编程实战
  5. 练熟基础:2048小游戏项目的实现与实战

1、Python能作什么?

clipboard.png

一种编程语言每每能够应用于多方面,有些方面比较经常使用,有些方面极为经常使用。上图中标红的部分是Python极为经常使用的领域。首先,利用Python能够进行简单脚本编程,好比使用Python编写2048小游戏或12306的自动抢票软件。其次,可使用Python进行系统编程,开发系统应用。第三点,Python一个较为经常使用的功能就是开发网络爬虫。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。网络爬虫的难点其实并不在于爬虫自己,因为网站方为了不被爬取回采起各类各样的反爬虫措施,而若是想要继续从网站爬取数据就须要解决这些反爬虫措施,因此网络爬虫的难点在于反爬的攻克和处理。第四点,Python极经常使用于WEB开发,能够借助Python开发WEB站点,好比我的博客、在线教育网站以及论坛等。第五点,在运维方面,Python能够用于自动化运维,能够经过写Python脚本实现对于服务器集群进行自动化管理。第六点,Python能够用于网络编程,好比Socket编程等。第七点,Python极经常使用的一个方向就是数据挖掘、机器学习等大数据与人工智能领域方向的程序开发,好比在人工智能领域,使用Python就能够很容易地实现算法模型,而且借助Python能够很容易地处理相应的数据。数据库

做为系列文章的首篇,本文将为你们分享Python的基础知识。而学习Python基础的第一步就是认识Python能够干什么,经过上面的内容,你们能够了解到Python语言能够作不少事情,或者能够说Python基本上是一门全能的语言。Python在各个领域都很优秀,而最重要的一点就是Python比较易学。综上所述,Python是一门很是棒的语言。编程

2、如何学习Python?

首先与你们分享一些方法论,究竟应该如何学习Python?其实学习任何一门知识,方法都是相似的,有些同窗习惯直接看书或看视频,这些方法都不错,可是在学习的过程当中须要掌握一些技巧,这样学习起来会事半功倍。数组

成体系地学,不搞“题海战术”安全

首先,要学就要成体系地学,不搞“题海战术”。遇到新知识就去查,而后就知道了,反复这样就是所谓的“题海战术”,这样作的好处就是用到了就会去寻找,可是缺点就是脑海里面的知识体系会很是乱,并且越学越乱,由于太多东西在脑海中不成体系地堆积致使很是难以利用,因此须要成体系地学习。所谓成体系地学习,就好比在学习基础时能够先掌握数据类型、控制结构、函数以及模块等,将这些知识造成体系。构建知识体系就像写书同样,在写书的过程当中不可能想到哪里就写到哪里,而应该有一个大体的框架。成体系地学习的好处就是不管怎样学习都不会乱。并且最开始的体系不必定是很是完备的,好比在刚开始学习编程语言的时候可能并不知道迭代器和生成器,但这并不会影响知识体系的创建,而在后续学到迭代器和生成器的时候,再将这一部分的知识加入到知识体系中就能够了。可是这样的前提就是在脑海中必定要有一个很是清晰的体系结构,学到的新知识均可以纳入到体系中,若是遇到了知识体系中没有的内容就能够对应地进行补充,这样就造成了很是清晰的体系结构,这样的学习方法收益会比较大。服务器

不只要“摹”,还要“临”网络

其次,不只要“摹”,还要“临”。“临摹”是练习书法的手段,所谓“临”就是看着字帖中的字,凭着印象在纸上书写而且尽可能复现字帖中的字;所谓“摹”就是在字帖上面蒙上一层薄白纸,而后在上面跟着字帖直接描。在“临”与“摹”中,显而后者更为简单。其实,学习任何一门知识都同样,不只要“摹”,还要“临”。在学习Python等编程语言时,一些同窗可能学习时看看视频就过去了,这样显然是不可取的,好一点的同窗会在看过视频以后,跟着视频把代码敲一遍,可是这样只是进行了“摹”,应该在此基础之上加上“临”的步骤,也就是关上视频、合上书本以后,凭借记忆对代码进行复现,去想本身的代码须要实现哪些功能,这样才能将知识真正地吸取。这样练习久了以后就会发现本身的能力提高得很是快。框架

通全部不如精一物,精一物方可通全部

第三个学习方法就是通全部不如精一物,精一物方可通全部。你们在学习的时候可能会遇到不少的框架,可是其实并不须要掌握全部的框架,好比对于爬虫而言,既能够学习Scrapy,也能够学习urllib,还能够学习其余的框架。其实并不用掌握全部的框架,学习时能够深刻地掌握其中一两个框架,以后就会发现全部的框架都是万变不离其宗的。精通一两个框架以后,其余的框架也会很容易掌握。学习编程语言也是同样的,当你精通了PHP或者Java,Python也能很快学会,可是若是同时学习Java、Python和PHP,最终可能致使每一门语言都不精通。其实学习过程的曲线在刚开始的基础阶段上升会很是慢,可是只要上手以后,进度就会很是快,因此你们在学习基础的时候必定不要着急。

走心学,忌浮躁

第四个学习方法就是走心学,忌浮躁。学习的时候必定要投入心思,不要着急,尽可能地将知识掌握和精通。更加具体的学习方法,你们能够关注云栖社区上的这个聚能聊:https://yq.aliyun.com/roundta...

3、Python语法基础实战

在Python语法的基础实战这部分将与你们分享数据类型、控制结构、函数与模块、文件操做与数据库操做以及异常处理等内容。

Python基础知识入门

在Python中输出直接使用print()函数,若是在Python文件中重复四次print("Hello Python"),那么输出时就是四次“Hello Python”。若是想让某一行代码不起做用,可使用注释。在Python中有两种比较常见的注释方案,第一种是单行注释,在行首加“#”,这样就会注释掉这一行代码;第二种是多行注释,多行注释通常使用“'''”或“"""”(三引号)实现,直接将须要注释的代码段的首部和尾部加上三个引号便可。

数据类型

在学习任何一门编程语言时,都须要了解这门编程语言有哪些数据类型。在Python中,常见的数据类型有数、字符串、列表、元祖、集合以及字典等。

数:就是数学上的数字,好比“a=7”就是将数字7赋值给a,这里的等号是赋值的意思。想要查看对应的数据是什么类型可使用type()函数查看,好比7就是int整形,7.0就是float浮点型。

字符串:一系列字符所组成的序列叫作字符串。字符串通常使用引号将其引发来,这里使用单引号和双引号都可。好比:

a1='abc'
a2="abc"
a3='''ab
c'''

上述代码所表达的内容是相同的,区别在于使用单引号和双引号所引发来的内容不能直接换行,而使用三引号就能够。

列表:存储多个元素的容器,列表中的元素能够被从新赋值,也就是说列表中的元素是能够变化的。创建列表能够经过“[]”实现,在其中能够放置数据。好比:a=[]表示a是一个空列表。再好比a=[a1,a3],列表中每一个元素之间使用逗号隔开,a这个列表中包含了a1和a3两个元素。取其中的元素能够经过下标实现,好比a[1]就能够取出a1的值。而列表中的元素能够被从新定义,好比使用a[1]="hello" 就能够对本来a[1]的位置进行赋值,这就说明了列表中的元素是能够变化的。

元组:存储多个元素的容器,可是元组中的元素不能够被从新赋值。好比c=(7,"cd",9),c存储了一组数据,若是想要对c中任意位置赋值成为其余的数据,都是不能够的,由于元组内的数据是不能被更改的。因此,元组通常在对数据安全要求较高时使用,这也是元组与列表的区别。

字典:字典至关于关联数组,所谓关联数组就是里面须要存储一对信息的数组。列表和元组存储的元素都是一个,而字典存储的元素都是一对信息如d={"name":"weiwei","sex":"boy","job":"teacher"}这样的{键:值, 键:值, ...}。在取值的时候直接使用字典名["对应键名"]便可,好比对于上诉d这个字典,使用d["name"]就能够取到"weiwei"这个值。

集合:集合也是用于存储一组数据的,只不过集合的特性是不容许出现重复的元素,这一点你们早在高中就已经学习了。因此,集合的一个很是简单的应用就是去重,之因此说这个方法简单,是由于去重还有不少的实现方法,好比布隆过滤器等都是很是好的去重方式。在Python中直接经过set就能够直接创建集合,好比e=set("abcdefgabc"),而集合是经过“{}”存储的,只不过大括号里面直接存储元素。而当输出e时就会发现,本来重复的内容就只保留一个。此外,集合还能够用于差集的运算,好比e=set("abcgjkhsgkjha"),f=set("jikhsdghsdueigdsfzau")直接使用g=e-f就能够得到e与f的差集。

运算符

以上的这些数据类型归根结底都是数据。数据是静态的,而经过运算符进行运算就可让这些数据动起来。Python里面的运算符有哪些呢?首先就是你们很是熟悉的“+-/%”,这些运算都知足数学规律。除了“+-/%”以外,还有字符串链接符“+”,若是想要将两个字符串链接起来只须要用“+”便可。

缩进问题

可能某些同窗对于Python的缩进比较反感,会以为缩进很麻烦而且很是容易出错。可是实际上,缩进很美,当打开Python项目时就会发现层次感很强,会感觉到代码的美感,哪些代码属于同一层级是一目了然的。缩进所须要掌握的规律就是最开始的代码顶格,第二点就是同一层级的代码在同一个缩进幅度上,下一个层级的代码在下一个缩进幅度上。当掌握了缩进规律以后,再去写Python代码就会很容易了。

控制结构
所谓控制结构就是程序的执行结构,程序能够像流水帐同样顺序执行下去,也能够跳跃、循环以及分支执行,这些多种的执行方式叫作控制结构。实际上,Python中最经常使用的控制结构只有三种就是:顺序结构、选择结构和循环结构,固然还有一些不经常使用的控制结构好比中断结构等。

顺序结构没必要多讲,就是按照顺序写,程序也就按照顺序执行。在Python中,分支结构一般使用if语句实现,若是if的条件为真,则执行下面对应的代码,不然继续向下看是否有分支结构,若是有则继续执行,不然就执行这一部份内容;若是if的条件为假,就不执行下面对应的代码。以下示例代码:

a=1000
b=1
if(a>19 and a<30):
    print(a)
    if(b<9):
        print(b)
elif(a>9 and a<=19):
    print("a>9 and a<=19")
elif(a<9):
    print("a<9")
else:
    print("gsdajk")

上述代码中第3行的if条件断定结果为真,程序会执行第4行至第6行代码。若是第3行的if断定为假,则继续向下面找寻分支。第7行和第9行都存在elif,其意思就是在不知足if的状况下若是知足elif的条件,就执行elif下面的代码,若是上述两行的elif条件都不知足,在第11行还有一个else,其意思就是在上述条件都不知足的状况下,执行else下面的代码。上述代码最终将会输出“gsdajk”。这里值得说明的一点就是若是实际状况不须要,能够没有elif以及else等语句,也就是能够单独使用if语句。

循环结构也是一个极为重要的结构。在Python中,循环结构有相应的方法去实现,经常使用的有两种:while和for语句。while语句的格式以下所示:

a=0
while(a<10):
    print("hello")
    a+=1

首先写while的条件,所谓的条件就是while括号中的表达式。若是条件为真就意味着知足了while的条件,这样就会执行while下面的代码段,而在执行时不是仅执行一次就结束,而是只要while循环的条件一直知足,这段代码就会一直执行。上述代码中,a的初始值为0,循环结构中将会打印“hello”并使得a自增1,当a<10时循环结构就会一直执行,因此将会输出10次“hello”。当到执行到第10次以后,a就不知足小于10的条件了,因而就会跳出循环。

除了while循环以外,还有for循环。for循环的写法稍有不一样,经常使用的格式是for i in x,x通常而言是一组数据。for循环遍历列表示例以下,该程序将会循环输出列表中的各个元素。

a=["aa","b","c","d"]
for i in a:
    print(i)

for进行常规循环的写法是for i in range(),也就是从X到Y的意思。好比for i in range(2,5)就是遍历二、三、4,这里值得注意的就是遍历不到最后的元素,在该例子中遍历不到5。以下列代码将会输出10次“hello”。

for i in range(0,10):
    print("hello")

中断结构是一种特殊的控制结构,就是在程序执行过程当中进行中断,通常而言都是在循环过程当中进行中断。一般,中断结构有两种写法:break与continue。break的含义是直接退出循环,整个循环都会中断。continue指的是中断单次循环,会继续下一次循环。

a=["aa","b","c","d"]
for i in a:
    if(i=="c"):
        break
    print(i)

上述代码使用break中断循环,使用i循环遍历a列表,若是i=="c"则中断循环,直接break。上述代码的结果就是输出aa与b,可是不会输出c以后的元素,由于当循环遍历到c时就会break,而后终止整个循环。

a=["aa","b","c","d"]
for i in a:
    if(i=="c"):
        continue
    print(i)

而当将break替换为continue后,运行该段代码的输出结果除了aa、b以外,还会输出d,这是由于continue仅中断单词循环,不会影响下一次循环。上述代码在遍历到数组中元素c时,会中断因此不输出c,而后循环还会继续。
使用Python输出乘法口诀表

for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+"*"+str(j)+"="+str(i*j),end="  ")
    print()

如上述代码所示,乘法口诀表分为行和列的控制,最外层循环控制行数,因此外层循环是for i in range(1,10),就是从1一直遍历到10。而对于列的控制就须要内层循环,显然就是在i层下面再进行一层循环,如上述代码中的for j in range(1,i+1),由于当遍历到1的时候,结果是11,不须要继续写12,因此这里只须要遍历到i+1便可。具体的输出只须要进行简单的数学运算和字符串拼接便可,在print输出以后若是不经过end控制是会默认更换一行的,这样输出的结果不够美观,上述代码的写法可使得同一行print输出的结果之间隔一个空格。而在完成了j的遍历以后须要另起一行,因此须要print()。运行结果以下图所示:
clipboard.png
在理解了乘法口诀表的实现以后,你们应该思考如何将乘法口诀表逆序输出,造成倒三角形式。显然,只须要对代码作以下修改便可:

for i in range(9,0,-1):
    for j in range(i,0,-1):
        print(str(i)+"*"+str(j)+"="+str(i*j),end="  ")
    print()

对于控制结构而言,你们须要重点掌握循环和分支。
函数与模块
函数至关于功能的封装。举例而言,某个程序段可能会被常常调用,若是不进行功能封装,那么每次调用这个功能时就须要从新实现一遍该段程序,这就会带来不少麻烦。而如今能够将这个常常被调用的程序段封装成一个函数,若是须要实现这个功能就能够直接调用这个封装好的函数。接下来就与你们分享与函数相关的内容。
做用域:做用域通常而言指的是变量的做用范围。

i=10
def func():
    print(i)
func()

如上述代码,将10赋值给i以后,i的做用范围就是后面的所有代码,一直到程序结束为止,那么这些被覆盖到的范围就是变量i的做用域。而在下面的代码中,当i在函数里面被定义,而且没有用global关键字声明,正常状况下其做用范围仅限于该函数。

def func():
    i=10
    print(i)
func()

上述代码中,i的做用范围仅限于func()函数中。而若是变量在函数外部定义,那么在函数内部可使用该变量,可是却没法直接修改该变量的值。若是对其进行修改就会形成命名空间冲突,出现错误。解决上述问题的答案其实很简单,就是将变量用global关键字声明为全局变量便可。

i=10
def func():
    global i
    print(i)
func()

上述代码中的i就是全局变量,当将变量声明为全局变量以后就不会受局部变量的影响了。
函数定义的格式:函数定义的格式就是如何将一串代码封装为成函数的方式。函数是经过def关键字定义的,函数定义格式以下:

def 函数名(参数):
    函数体

下面的代码创建了函数abc(),函数的参数能够没有,但须要注意即便没有参数也须要加括号。示例代码中至关于将两个print语句进行了封装。若是想要将上述两个print语句统一进行一次执行时只须要调用abc()函数便可。在调用函数时只须要使用“函数名(参数)”。

def abc():
    print("abcde")
    print("456")
abc()

函数参数:若是函数没有参数,那么这个函数就是固定的,由于该函数内部的代码是固定的,因此不管怎样执行都是一样的结果。而如何使得函数可以实现具体问题具体分析呢?此时能够为其传入相应的参数,这样函数就能够根据所传入的参数进行相应的数据处理。参数就至关于函数与外界沟通的接口。参数分为形参和实参,通常而言在函数定义的时候使用参数就是形参,所谓形参就是“形式上的参数”;在函数调用的时候使用的就是实参,而所谓的实参就是“实际的参数”。以下的代码段中实现了两个数据比较大小的功能:

def func2(a,b):
    if(a>b):
        print(str(a)+"比"+str(b)+"大")
    else:
        print(str(b)+"比"+str(a)+"大或者"+str(b)+"与"+str(a)+"相等")

上述代码中封装了一个名为func2的函数,里面传递两个参数,参数的名字能够自行定义,函数里面则能够根据具体的形参进行判断。上述代码中若是a>b,输出“a比b大”,不然就输出“b比a大或者b与a相等”。对于上述函数,每次调用时能够传递不一样的参数进去,进而根据具体状况具体分析,并获得相应的结果。综上所述,函数就是将一串代码进行封装,即函数通常用于功能的封装。
模块:模块就至关于函数的再次封装。Python中有一些经常使用的模块,这些经常使用的模块存在于Python的安装目录之下,其中有一个名为“lib”的目录,该目录通常就用于放置模块,并且你们也能够本身写模块,这样的模块就叫作自定义模块。
在Python中想要使用模块须要掌握两个知识点:导入和使用。通常而言有几种方法导入模块,第一种方法就是使用import语句直接导入某个模块,第二种方法就是从某个模块中仅导入某个方法。以下代码所示,能够从time模块中导入sleep方法,也可使用from time import *将time模块的全部方法都导入进来。

import random
from time import sleep
from time import *
a=["中奖","不中奖","不中奖"]
print(random.choice(a))

random模块主要用于随机数的处理。上述代码使用random实现了一个抽奖功能,首先导入了random,而后创建一个列表,里面有“中奖”和“不中奖”选项,random.choice(a)将会随机在列表a中选择一个选项并输出对应的结果。time模块也有一些比较经常使用的功能,好比time.sleep(),其实现了延时功能。若是想要修改模块的源代码,只须要在lib目录下找到相应的模块进行修改便可。

此外,第三方的模块通常放置在lib目录下的site-packages中。

3、文件操做与数据库操做

文件操做

文件的打开:使用Python打开文件方法的格式就是open(文件地址,操做形式),open函数的参数中的操做形式有:w(写入)、r(读取)、b(二进制)、a(追加),其中的a表示能够实现追加写入,这样就不会丢失原来的内容,若是使用w就是全新写入,将会覆盖本来的内容。

fh=open("D:/个人教学/Python/20180120内训/第1天代码/文本1.txt","r",encoding="utf-8")
#

    文件读取
    data=fh.read()
    line=fh.readline()

上述代码中的操做形式是“r”,也就是读取文档,而且能够经过encoding设置编码格式,好比utf-8或者gbk等,这样就能够打开文件。以后就能够经过read()或者readline()等方法进行读取。read()指的是将文件中的内容所有读取出来,readline()则是一行行地读取。

x=0
fh=open("D:/个人教学/Python/20180120内训/第1天代码/文本1.txt","r",encoding="gbk")
while True:
    line2=fh.readline()
    if(len(line2)==0):
        break
    print(line2)
    x+=1
fh.close()

上述代码中使用readline()一行行地读取文件,这里经过设置while循环来读取文件所有内容,若是某一行的长度为0则说明文件已经读完,此时就能够break,而若是不为0则说明还有内容,就能够继续读取下一行。上述代码中还经过变量x统计共读取了多少次,在文件读取完后经过fh.close()关闭文件。结果输出后还能够经过x获取读取的总行数。
clipboard.png

文件的写入(w/a+):在进行文件写入时,在open函数中的操做形式的参数应该为“w”或者“a”,参数中的文件地址则是输出地址。以下代码段所示:

-

data="一块儿学Python!"

fh2=open("D:/个人教学/Python/20180120内训/第1天代码/文本3.txt","w")
fh2.write(data)
fh2.close()

在文件地址中,不可以使用“”,而应该使用“\”或者“/”。在打开文件以后使用write方法将数据写入以后,将文件关闭便可。若是操做形式为“w”,将会把本来的文件内容替换掉,也就是全新写入的意思,而若是使用“a+”就是在本来内容的基础上进行追加。

数据库操做

Python除了用于操做文件以外,还经常使用于操做数据库,本文以操做MySQL数据库为例讲解。在使用Python操做数据库以前须要先安装pymysql模块,在cmd命令行中输入“pip install pymysql”便可完成该模块的安装。

clipboard.png

在安装完pymysql以后,还须要将其中的源代码进行必定的修改,由于使用其默认编码会出现错误。在site-packages下面找到pymysql,并找到connections.py文件,搜索“charset=”关键词就能够定位到须要进行修改的地方。

clipboard.png

在connections.py中的charset=部分本来是没有编码的,如今加上编码这样就不会出错了,这里的编码通常建议使用“utf8”。须要注意的是写入“utf8”而非“utf-8”,经过这样的设置基本上就能够解决乱码的问题。
使用Python进行数据库的操做的前提是须要一个MySQL数据库,至于MySQL数据库的安装和配置不是本文所关心的对象,你们能够自行学习。在拥有了MySQL数据库以后首先应该进行数据库的链接。

import pymysql
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="mypydb")
#执行sql语句-无返回
conn.query("INSERT INTO mytb(title,keywd) VALUES('new title','23456')")
conn.commit()
#执行SQL语句-有返回
cs=conn.cursor()
cs.execute("select * from mytb")
for i in cs:
    print("当前是第"+str(cs.rownumber)+"行")
    print("标题是:"+i[0])
    print("关键词是:"+i[1])
conn.close()

如上述代码所示,使用pymysql下面的connect方法就能够进行链接。connect方法中的参数的含义:host表明主机IP地址,user表明用户名,passwd表明密码,db表明所选择的数据库。在Python中操做数据库也是使用SQL语句,而这里的SQL语句能够分为两种,一种无返回结果,一种有返回结果。好比插入数据等操做无返回结果,查询则属于有返回结果的,而这两种语句的使用方法是不一样的。对于无返回结果的SQL语句,在使用时只须要使用query方法就能够执行。上述代码中指的是插入一条数据,插入完成以后使用commit方法就能够完成提交;对于有返回结果的SQL语句,首先须要经过conn的cursor方法创建游标,以后使用execute方法执行SQL语句,这样就能够遍历游标,查询结果存储在cs中,使用for i in cs就可逐个将查询结果取出来。

异常处理

在Python中常常会出现这样或那样的错误,有些错误是不可避免的,甚至是未知的。对于未知的错误,当Python执行时遇到后就会自动终结。而若是但愿在遇到错误以后程序可以继续运行则须要使用异常处理。异常处理的格式以下:

try:
    程序
except Exception as 异常名称:
    异常处理部分

try后面的代码段就是尝试着去执行这段程序,若是出现异常则会触发except从句。except后面是对应的Exception类型,这里有一种的“必杀技”,就是直接使用Exception——通用异常,只要发生异常,Exception都会将其捕获到。as表示对于异常起一个别名,而接下来就是对应的异常处理的代码。

  • try:
  • for i in range(0,10):

    >         print(i)
     >         if(i==4):
     >             print(jkj)
     >     print("hello") except Exception as err:
     >     print(err)

如上述代码段,当i循环到4的时候将会出现异常,由于jkj没有在程序中定义。若是没有异常处理,程序将会直接终结,而使用了异常处理以后,当发生异常也不会直接标红,而是将异常输出。

clipboard.png

异常处理的目的是让程序在出现异常的状况下继续执行下去,因此须要将异常尽可能细化,使异常处理与所须要监控的代码更加紧密。对于上述代码进行异常处理细化以后以下:

for i in range(0,10):
    try:
        print(i)
        if(i==4):
            print(jkj)
    except Exception as err:
        print(err)
print("hello")

这样即便出现了异常,也能够继续下一次循环。因此须要注意,异常处理须要尽可能细化,尽可能放于代码里层,放于外层可能没法实现完美的异常处理。

4、Python中面向对象编程实战

上述内容帮助你们了解了Python在语法层面的基础知识,接下来为你们分享Python中面向对象编程实战。面向对象编程通常区别于面向过程,其更适合于中大型的项目的开发。

认识类和对象

面向对象编程主要是经过“类”和“对象”实现的。举例而言,具体的某我的就是“对象”,小明是一个对象,小张也是一个对象,而将“对象”共有的特色抽象出来就可以造成“类”,好比小张和小明都是“人”,那么“人”就是一个“类”,因此“类”就是类型的意思。只不过面向对象的类是自定义的。“类”是抽象出来的,“对象”则是具体的。

若是想要创建一个类则可使用class字段进行声明:

class 类名:
    类里面的内容

以下示例代码,创建了一个名为cl1的类,类中的内容是“pass”,就是一个占位符,不会起到任何做用,但若是没有pass则会出现缩进错误。

class cl1:
    pass

而将类实例化成为对象可使用类名后面加括号并直接赋值给一个对象,如a=cl1(),那么a就是cl1这个类的一个对象。

构造函数

构造函数也叫做构造方法。所谓构造方法就是专门用于初始化的方法。这里还须要介绍self,通常在类中的方法必须加上self参数,其表明类自己。在Python中__init__(self,参数)就是构造方法,构造方法的名字是固定的,在括号里面加上self以及对应的参数便可。构造函数的实际意义就是初始化。

class cl2:

def __init__(self):
    print("I am cl2 self!")

如上述代码所示,cl2类有一个构造方法,构造方法中会输出“I am cl2 self!”,这就意味着该类只要建立对象就会首先执行这一串代码。若是想要给构造方法加上参数,在self后面加上参数便可,参数与参数之间经过逗号隔开。
class cl3:

def __init__(self,name,job):
    print("My name is "+name+" My job is "+job)

这样就至关于给类加上了参数,由于在实例化该类时会须要传递相应的参数。这里须要注意的是为类加上参数,并非在类定义中的括号中加参数,在类定义中的括号是用于继承的,而不是用于加参数的,这里的加参数指的是在实例化时加上参数。
属性和方法
属性就至关因而类中的变量,方法就至关于类中的函数,属性是静态的,方法是动态的。举例而言,对于“人”这个类,手、头这些都属于属性,而人会说话、写字这些都是方法。在Python里面,属性的使用方式通常是self.属性便可。
class cl4:

def __init__(self,name,job):
    self.myname=name
    self.myjob=job

在上述代码的cl4这个类的构造方法中,能够看到传递了两个参数,以后就在构造函数中变成了类的属性。接下来在使用到时候直接调用self.属性便可。
class cl5:

def myfunc1(self,name):
    print("hello "+name)

class cl6:

def __init__(self,name):
    self.myname=name
def myfunc1(self):
    print("hello "+self.myname)

如上述代码所示,方法就是类里面的函数,包括__init__()也都是方法。上述的cl6就能为你们解释self为何可以存在,cl6中的__init__()和myfuncl()是两个函数,按照道理而言,myname在不一样的函数中都属于局部变量,是不能通用的,那么若是想让局部变量在多个函数之间传递,那么一种方法就是将变量存储到类里面,也就是建立self字段,将变量存到类里面,而self就提供了一个区域用于存储变量,这就是self存在的必要性。
继承

简单而言,继承就是将某个类中全部的属性和方法都拿过来直接使用,举例而言:某一个家庭有父亲、母亲、儿子和女儿,父亲能够说话,母亲能够写字,大儿子继承了父亲,女儿同时继承了父母,而且有新能力听东西,小儿子继承了父亲,可是优化(或减弱)了父亲的说话能力,这样的模型应该如何创建呢?被继承的这个类被称为基类或者父类,继承的类叫作子类。因此模型中的服务都是基类,儿子和女儿都是子类。
首先建立父亲类,他的功能是能够说话:
class father():

def speak(self):
    print("I can speak!")

接下来创建大儿子这个子类:

class son(father):
    pass

该类继承了父亲类,因此在son类定义的时候括号里写上了father。虽然son类中没有写任何方法,可是其仍然拥有speak方法,这是由于其集成了father类的全部方法。
母亲类具有写的能力:

class mother():
    def write(self):
        print("I can write")

女儿类同时继承了父亲和母亲,这就属于多继承了。多继承只须要在类定义时加多个参数便可。除了继承了两个基类以外,她还有新的听的能力,这样只须要在该类中写一个新的方法便可。
class daughter(father,mother):

def listen(self):
    print("I can listen!")

而小儿子发生了变异,这里的变异指的是重载或者重写。小儿子继承了父亲类,可是优化了说的能力,因此须要实现一个同名方法,而在实际使用的时候也会调用本身所重载的speak方法。

class son2(father):
    def speak(self):
        print("I can speak 2!")

5、练熟基础:2048小游戏项目的实现与实战

上面为你们介绍的Python知识很是零散,可是也很是重要,既然想要掌握Python,就须要使用实际项目进行巩固和提高,当将项目实现以后,对应的能力也就天然掌握了。

本文由云栖志愿小组贾子甲整理,编辑百见,原文

相关文章
相关标签/搜索