函数与类
什么是类呢?在Python的世界里,像1,2,3,4这些我们归为数字,“你好”、“hello”这些我们归为字符串;而在生活中,我们把鲤鱼、鲫鱼称为鱼,把香蕉葡萄统称为水果。像这样对一类的东西的概括或抽象我们就叫做类。
什么是对象?刚刚说到,类是对一类事物的概括/抽象。那么反过来,这类东西里每一个单独的个体就属于对象。比如相对于水果这个类来说,其中的评估、香蕉就属于对象。
那么类有什么用呢?我们要记住一点:类的作用主要就是作为模板来使用。
假设我们在做一个稍微大一点的项目,其中包含很多个部分,有很多功能是类似的或者说就是一样的,这个时候就像是一个模板,我们可以根据它来量产对象,这样就可以节省很多可能重复性的工作来提高效率。
下面来看看类的结构是什么样的:
从语法上来看:类的定义是一个class语句,class语句内包含了四个要素:
1.关键字class
2.类名
3.英文冒号:
4.代码块(即类里面的代码内容)
其中,规范要求类名的首字母应是大写。与if条件判断语句一样,代码前方要注意缩进。
比如我们可以从两个角度去描述一辆车:
汽车的状态怎样?包括车的颜色(color)、大小(shape)等;
它能做什么?如:向前开(drive)、刹车(stop)等。
而在Python当中,直接定义在类里面的变量就称为类的属性:
在类中被定义的函数就是类的方法,所以要理解清楚类的方法,就引入了第二个知识点:函数。
函数是组织好的,可以重复使用,用来实现某一功能的代码。
就像Python的内置函数print()、input()这些就是函数。
定义函数的语法是这样的:
def 函数名(参数):
代码块
return 参数
def:在英文中是define(定义)的缩写,用于定义函数。
函数名:由我们对其命名,需要遵守一定的命名规则。
参数:函数要接收并对其进行数据处理。(它在括号内的数量是不一定的,可以是任意数量,包括0个)
代码块:函数内的代码内容,用于实现函数功能。当使用函数时,就会执行代码块内的内容。
return语句:从函数内部返回一个结果到外部(可以不写,默认返回None)
其中参数包括位置参数和默认参数。位置参数是按照括号里的位置顺序进行对应参数的传递:
而默认参数是我们在定义函数时,可以对参数设置默认值,这种参数就被称为默认参数。要注意的是,默认参数必须要在位置参数后面:
比如上面这段代码,“标准”会被作为默认值传递给size,这里的参数size就被称作默认参数。
而函数中的return语句是从函数内部返回一个结果到外部,要注意的是并不是所有的函数都需要return,比如append()函数就没有return,不写的时候函数会返回None。
最后,函数的执行流程分为三步:
1.创建函数名
2.执行其他代码,直到调用函数
3.调用函数以后执行函数内部的代码块
只是定义函数而没有调用的话,函数中的代码是不会被执行的,这一点千万要牢记!
了解了函数的知识,也就相当于了解了类的方法,因为前面说过,在类中被定义的函数就是类的方法,那么它的定义语法就是这样的:
这里多了一个self参数,它用来指对象本身。我们记住一句话就好:self在类定义的时候要加载参数的第一个位置,但在调用类方法的时候要忽略它。
那么我们要如何调用类属性和类方法呢?这里我们就需要把类和对象关联起来了,也就是类的实例化。
我们创建的类,是一个比较抽象的东西,只是一个模板。要使用类里面的属性和方法,是需要把类具体化,这个过程就叫做类的实例化。吧一个抽象的类具体化成一个东西,这个东西就是一个对象。有了对象我们就能通过对象去调用属性和方法。
实例化的语句是这样的:
在世纪写代码的时候类名后面的括号千万不能漏掉。
调用类的属性语法如下:
而类的方法调用语法和函数的调用语法类似,只不过需要借助对象才能调用:
类的方法与函数定义及调用的区别可以查看下图“
在类的方法里面有一种特殊的方法叫做初始化方法,即__init__()方法,类在实例化时,__init__()方法会自动运行内部的代码。要注意的是:init前后需要加上两条下划线。
在__init__()方法内有设置函数时,实例化时也需要传入参数值:
最后需要注意的一点是,在类的方法内表示类的属性或类的其他方法时,要采用self.属性名或self.方法名的格式来调用。
模块导入与文件读写
首先我们了解一种文件格式--CSV文件。CSV是comma-separad values(逗号分隔的值)的首字母缩写,其文件以存文本形式存储表格数据。
同时,csv文件可以视为一种简化版的电子表格。因为使用Excel软件打开CSV文件是,文件中的数据会显示为电子表格的样式,主要区别在于CSV文件只是存文本文件,不包含文字排版格式、单元格样式等信息,所以比Excel文件占用的内存更少,读取速度也更快。
然后,由于使用代码操作CSV文件需要先导入CSV模块,我们又引入了模块的概念。
一个写好了代码、功能齐全的Python文件就是一个模块,而具有相关功能模块的集合,就形成了库,其中有标准库和第三方库,第三方库指由第三方发布的库,需要下载安装到本地的Python中,才能够导入使用。
我们本次用到的CSV模块是Python中内置的模块,不需要安装就可以导入使用,导入模块的语法是这样的:import+模块名。(需要留意的是,语法中import语句与模块名之间有个空格)
将模块导入后,我们才能使用模块里的具体功能。
如果想要调用模块中的某一个类,函数或变量,其调用语法如下:
1.调用模块下的类:模块名.类名();
2.调用模块下的函数:模块名.函数名();
3.调用模块下的变量:模块名.变量名。
而调用模块下的函数/类/变量,还可以用另一种语法来写:from 模块名 import 类名/函数名/变量名。 用这种语法导入我们要用的类名/函数名/变量名之后,在调用的时候可以省略掉前面的模块名。
open() 函数用于打开一个文件,并返回一个 file 对象(即文件对象) ,这样,才能在后面调用文件对象的相关方法进行读写。
参数 file 表示我们要打开的文件的路径,而路径又分为绝对路径和相对路径。
参数 mode 决定了打开文件的模式。最主要的模式有:只读(r),写(w),追加(a)等。
mode 可取的值见如下表格:
参数 encoding 表示文件的编码方式,课程中使用到的文件编码方式一般为 'utf-8'。为了避免错误,需要把 encoding 设置为 'utf-8',即写为 encoding='utf-8'。
另一种打开文件的方法,with open() as ... 是对原有 open() 和 close() 的优化。
使用 with open() as ... 语句后,在 with 下面的代码块结束时,会自动执行 close() 关闭文件。
具体语法可以参考下图:
打开文件之后,我们就可以对文件进行读写操作啦,于是我们学习了 csv 模块中的 DictReader类和 DictWriter 类。
DictReader 类可以以字典的形式读取 csv 文件,既然是类,那么自然需要先进行实例化才能调用方法,实例化的语法为:DictReader(f)。其中参数 f 为 csv 文件的对象。
DictWriter 类支持数据以字典的形式写入 csv 文件,实例化 DictWriter() 后,会得到一个 DictWriter 对象。类 DictWriter() 的实例化语法为:DictWriter(f, fieldnames)。
其中:
1.参数 f 为 csv 文件的对象;
2.参数 fieldnames 的作用是定义文件的表头,其数据可以为列表格式。