MOOC《Python语言程序设计》(第15次)-- 总结版
一、Python的简介
- python的创始人:Guido van Rossum 荷兰人,“龟叔”
- pyhton发行于1991年
1.1 Python的优缺点
- **简单、易学:**Python是一种代表简单主义思想的语言,一个良好的Python程序就感觉像是在读英语一样。
- **免费、开源:**Python是FLOSS(自由/开放源码软件)之一,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
- **高层语言:**无需考虑诸如如何管理程序使用的内存一类的底层细节。
- **解释型语言:**Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。
- **面向对象;**Python既支持面向过程的编程也支持面向对象的编程。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
- **可移植:**Python可以在不同的平台上工作
- **可扩展:**如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们
- **丰富的库:**除了标准库以外,还有许多其他高质量的第三方库
- **规范的代码:**Python采用强制缩进的方式使得代码具有极佳的可读性
- 缺点:运行速度慢,和C程序相比非常慢;代码不能加密,如果要发布你的Python程序,实际上就是发布源代码。
1.2 python的应用领域
数据分析、数据可视化、机器学习、深度学习、网络爬虫、网站开发、用户界面开发、游戏开发、虚拟现实(VR)等
1.3 Python的中文编码
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8 就行了
print("你好,世界")
二、Python的数据类型
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
2.1 数字类型(Number)
- int(整型)
- long(长整型),python3中没有
- float(浮点型)
- complex(复数),用 a+bj 或 complex(a,b) 表示,a,b为浮点型
int(x)
long(x)
float(x)
complex(real, imag)
str(x)
repr(x)
eval(str)
tuple(s)
list(s)
chr(x)
unichr(x)
ord(x)
hex(x)
oct(x)
import math
import random
函数 | 描述 |
---|
abs(x) | 绝对值 abs(-10.01) = 10.01 | divmod(x,y) | 商余,(x//y,x%y),同时输出商和余数 divmod(10,3) = (3,1) | pow(x,y[,z]) | 幂余,(x**y)%z,[…]表示参数z可忽略 pow(3,pow(3,99),1000) = 4587 |
详见 Python Number(数字)| 菜鸟教程
2.2 字符串(string)
字符串由一对单引号或双引号表示
索引:返回字符串中单个字符 <字符串>[M]
切片:返回字符串中一段字符子串 <字符串>[M:N:K]
转义符: \
-
“\b”:回退 -
“\n”:换行(光标移动至下行首) -
“\r”:回车(光标移动至本行首),用于单行刷新
sentence = 'abcdacba , ABCD , 学习,是一种信仰'
sentence.lower()
sentence.upper()
sentence.split(',')
sentence.count('a')
sentence.replace(' ','')
'python'.center(10,'=')
'=pytho=n='.strip('=')
','.join('study')
详见 Python 字符串| 菜鸟教程
2.3 布尔型(Bool)
逻辑运算,只有两个值:Ture(真) 和 False(假) 。
2.4 列表(List)
List(列表) 是 Python 中使用最频繁的数据类型。
列表中元素的类型可以不相同,它支持数字,字符串,甚至还可以包含列表(嵌套)
函数 | 描述 |
---|
ls[i] = x | 替换列表ls第i元素为x | ls[i: j: k] = lt | 用列表lt替换ls切片后对应元素字列表 | del ls[i] | 删除列表ls中第i元素 | del ls[i: j: k] | 删除列表ls中第i到第j以k为步长的元素 | ls += lt | 更新列表ls,将列表lt元素增加到列表ls中 | ls *= n | 更新列表ls,其元素重复n次 | 方法 | | ls.append(x) | 在列表ls最后增加一个元素x | ls.clear() | 删除列表ls中所有元素 | ls.copy() | 生成一个新列表,赋值ls中所有元素 | ls.insert(i,x) | 在列表ls的第i位置增加元素x | ls.pop(i) | 将列表ls中第i位置元素取出并删除该元素 | ls.remove(x) | 将列表ls中出现的第一个元素x删除 | ls.reverse() | 将列表ls中的元素反转 |
列表功能实现
lt = []
lt += [1,2,3,4,5]
lt[2] = 6
lt.insert(2,7)
del lt[1]
del lt[1:4]
print(0 in lt)
lt.append(0)
lt.index(0)
len(lt)
max(lt)
lt.clear()
详见 Python 列表(List)| 菜鸟教程
2.5 元组(Tuple)
Python的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
tup1 = ()
tup2 = (50,)
详见 Python 元组 | 菜鸟教程
2.6 集合(Set)
? 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员
? 基本功能是进行成员关系测试和删除重复元素。
set1 = {'a','b'}
set2 = set('a')
set3 = set()
diy_set = {'a','a','a','b','b'}
print(diy_set)
2.7 字典(Dictionary)
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print(tinydict['name'])
详见 Python 字典(Dictionary)| 菜鸟教程
三、Python的运算符
类型 | 运算符 |
---|
算数运算符 | +、-、*、/、%、、**、// | 比较(关系运算符) | == 、!= 、<> 、> 、< 、>= 、<= | 赋值运算符 | = 、+= 、-= 、= 、/= 、%= 、**= 、//= | 位运算符 | & 、|、^ 、~ 、<< 、>> | 逻辑运算符 | and 、 or 、 not | 成员运算符 | in 、 not in |
四、Python的函数
def printinfo(name,country='China',*args):
print("Name:{}\nConutry:{}".format(name,country))
for var in args:
print(var)
return "信息打印完成"
printinfo('Student1','USA',['python',"isn't",'easy'],'I will study forever')
success = lambda arg1, arg2: print('{}*{}'.format(arg1,arg2))
success('happy',10)
success('happy','today')
五、Python的文件使用
文件的打开:
<变量名> = open( <文件名>, <打开模式> )
- <变量名>:文件句柄;
- <文件名>:路径和名称,分绝对路径和相对路径;
- <打开模式>:文本或二进制;读或写。
文件的关闭:
<变量名>.close()
fo = open('China.txt', "r", encoding='utf-8')
fo.close()
其他方法:
with open() as f
好处:python会自动关闭文件
with open('China.txt','r',encoding='utf-8') as f:
txt = f.read()
文件的打开模式 | 描述 |
---|
‘r’ | 只读模式,默认值,如果文件不存在,返回FileNotFoundError | 'w ’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 | ‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError | ‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 | ‘b’ | 二进制文件模式 | ‘t’ | 文本文件模式,默认值 | ‘+’ | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
文件内容的读取
操作方法 | 描述 |
---|
.read(size-1) | 读入全部内容,如果给出参数,读入前size长度 >>> s= f.read(2) 中国 | .readline(size-1) | 读入一行内容,如果给出参数,读入该行前size长度 >>>s = f.readline() 中国是一个伟大的国家! | .readlines(hint=-1) | 读取文件所有行,以每行为元素形成列表,如果给出参数,读取前hint行 >>> s = f.readlings() [“中国是一个伟大的国家!”] |
文件数据的写入:
操作方法 | 描述 |
---|
.write(s) | 向文件写入一个字符串或字节流 f.write(“中国是一个伟大的国家!”) | .writeline(lines) | 将一个元素全为字符串的列表写入文件 >>>1s = [“中国”,“法国”,“美国"] >>>f.writelines(ls) 中国法国美国 | .seek(offset) | 改变当前文件操作指针的位置,offset含义如下:0一文件开头; 1一当前位置; 2-文件结尾>>>f.seek(0) # 回到文件开头 |
六、Python的面向对象
创建类和对象实现程序功能,例如汽车是类,奔驰、宝马、本田等汽车品牌是继承于汽车类的子类,张三的奔驰汽车是具体的对象。
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 类变量:类变量定义在类中且在函数体之外。类变量在整个实例化的对象中是公用的。类变量通常不作为实例变量使用。
- 实例变量:在类的声明中,通过变量赋予类的属性,在类声明的内部,但是在类的其他成员方法之外声明的,通常在__init__中声明。
- 继承:创建一个派生类(子类)继承基类(父类)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如汽车是父类,不同品牌的汽车是子类,子类具有父类的基本特征,但也允许有各自不同的特征。
- 方法:类中定义的函数。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。例如某品牌的汽车具有‘反厂修理’的方法,使用时需要指明哪一辆汽车,如对张三的汽车进行返厂修理,‘张三的X牌汽车’就是对象,而不可能对这个品牌的所有汽车进行修理。
class Parent:
academic = '本科'
def __init__(self,grade):
self.grade = grade
def myMethod(self):
print('调用父类方法')
def setAcademic(self,attr):
Parent.academic = attr
class Child(Parent):
def __init__(self, grade, number):
super().__init__(grade)
self.grade = grade
self.number = number
def myMethod(self):
print('调用子类方法')
c = Child('大一','1001')
print(c.number)
c.myMethod()
print(c.academic)
c.setAcademic('硕士')
print(c.academic)
print(Parent.academic)
单下划线、双下划线、头尾双下划线说明:
_foo_: 定义的是特殊方法,一般是系统定义名字 ,类似__init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量,例如私有方法和私有属性,只能是允许这个类本身进行访问。
七、Python的第三方库
应用领域 | 第三方库(个例) |
---|
数据分析 | Numpy,Pandas,SciPy | 数据可视化 | Matplotlib,Seaborn,Mayavi | 文本处理 | PyPDF2,NLTK,Python-docx | 机器学习 | Scikit-learn,TensorFlow,MXNet | ---------------- | ------------------------------------------------- | 网络爬虫 | Requests,Scrapy,pyspider | Web信息提取 | Beautiful Soup,Re,Python-Goose | Web网站开发 | Django,Pyramid,Flask | 网络应用开发 | WeRoBot,aip,MyQR | ---------------- | ------------------------------------------------- | 图形用户界面 | PyQt5,wxPython,PyGObject | 游戏开发 | PyGame,Panda3D,cocos2d | 虚拟现实 | VR Zero,pyovr,Vizard | 图形艺术 | Quads,ascii_art,turtle |
|