导图社区 python语言基础入门
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。中国慕课,基础入门,快来看看吧。
编辑于2022-02-18 10:54:31python语言基础入门
1、基本语法元素
程序设计基本方法
编译和解释,静态和解释语言
IPO
确定IPO
编程
调试
语法元素
格式框架与缩进、注释
命名与保留字
大小写敏感
数字不能开头
35个保留字
数据类型
可变类型:改变元素,内存地址不变
列表
字典
集合
不可变类型:改变元素,内存地址改变
元组
数值
字符串
语句与函数
赋值语句
分支语句
函数
2、基本图形绘制
turtle库的使用
绘图窗体:turtle.setup(width,height,startx,starty)
空间坐标系
turtle.goto(x,y)
turtle.bk(d)
turtle.fd(d)
turtle.circle(r,angle)
运动控制
角度坐标系
turtle.seth(angle)
turtle.right(angle)
turtle.left(angle)
方向控制
turtle程序语法元素
库引用
import 库--<库名>.<函数名>(参数)
from 库 import函数--<函数名>(参数)
画笔控制
turtle.penup()和pendown()
turtle.pensize()和pencolor()
可数循环for变量in range次数
range(n)
range(n,m)
range(n,m,k)
3、基本数据类型
数字类型及操作
数字类型间可混合运算,生成结果为"最宽"类型 三种类型存在逐渐"扩展"或"变宽"的关系: 整数 -> 浮点数 -> 复数
浮点数有不确定尾数与round(x,d)
数值运算操作符及函数
字符串类型及操作
字符串表示
单行:''或""
多行:''' 或"""
切片[m:n:k]
转义符 \及组合
字符串操作符
x+y连接两个字符串
n*x复制n次字符串x
x in s判断x是否是s子串
字符串处理函数
len(x)返回字符串x长度
str(x)任意类型x的字符串形式
hex(x)或oct(x)整数的十六或八进制小写形式字符串
chr(u)或ord(x) unicode编码与字符转换
字符串str处理方法
str.lower()或upper()返回大小写转换后结果
str.capitalize()返回第一个字母大写
str.swapcase()返回字母大写变小写,小写变大写
str.split(sep=None,maxsplit=-1)返回字符串str用sep分隔成的列表,-1不限次数
str.splitlines(keepends=Ture)返回以行结束符为分割组成的列表,保留行结束符
str.count(sub)返回子串出现的次数
str.replace(old,new[,max])返回替换为new子串的str副本,max替换次数
str.center(width[,fillchar])str根据宽width居中,fillchar填充
str.strip(chars)去掉str左右两侧chars
str.join(iter)把列表iter每个元素用str合并成新字符串
检索方法
str.find(sub[,start[,end]])从左至右检索第一次出现,检索不到返回-1
str.rfind(sub[,start[,end]])从右至左检索第一次出现,检索不到返回-1
str.index(sub[,start[,end]])从左至右检索第一次出现,检索不到引发ValueErro
str.rindex(sub[,start[,end]])从右至左检索第一次出现,检索不到引发ValueErro
字符串类型格式化 '{槽1},{槽2}...模板字符串'.format(参数1,参数2...)
槽顺序可指定,参数一一对应之
time库
时间获取
time()获取当前时间戳(计算机内部浮点值)
ctime()获取当前时间以易读方式返回字符串
gmtime()获取当前时间表示为计算机可处理的格式
时间格式化函数 strftime(tpl,ts),tpl格式模板,ts计算机内部时间类型变量
程序计时
测量时间:两个perf_counter()函数取值差
休眠等待:sleep(s)
4、程序的控制结构
分支结构
条件判断及组合:大于小于不等于等和与或非
异常处理
循环结构
遍历循环:for 循环变量 in 循环结构
计数N
特定计数(N:M:K)
字符串
列表、元组
文件
无限循环 while 条件:
控制保留字
break结束所在层循环,执行循环后语句
continue结束当前循环,继续后续循环
高级用法:循环与else
random库
基本随机函数
seed(N)初始化给定的随机数种子
random()生成0~1之间的随机小数
扩展随机函数
randint(a,b)生成一个ab间的整数
randrange(n,m,k)生成n~m之间步长k的一个整数
getrandbits(k)生成一个 k比特长的整数
uniform(a,b)生成a~b之间的一个浮点数
choice(seq)从序列seq中选择一个元素
shuffle(seq)返回打乱重排seq元素的序列
5、函数和代码复用
函数
定义与使用
表达特定功能,代码复用
实参换形参,得到返回值
参数
位置参数(第一个)
默认参数:必须指向不变对象,没有传递对应实参时,自动使用默认值.
可变参数*args:调用时自动组装为一个tuple. 如果已经有一个list或者tuple,要调用一个可变参数,在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去.
关键字参数**kw:允许你传入任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
命名关键字参数:如果要限制关键字参数的名字,就可以用命名关键字参数.命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了,命名关键字参数必须传入参数名,这和位置参数不同,如果没有传入参数名,调用将报错.命名关键字参数可以有缺省值,从而简化调用。
变量作用域
局部:在一个函数中定义的变量,作用域从定义开始到函数结束处。
全局变量和global关键字:在所有函数外定义的变量、global关键字申明变量为全局变量,被global修饰之前可不存在
nonlocal关键字用于嵌套函数中内部函数使用外层函数定义的变量,该变量被nonlocal修饰之前必须存在
返回值
有return语句,函数执行完毕,返回结果
无return语句,返回结果None,即return None=return
匿名函数 lambda<参数>:<表达式>,表达式计算结果即函数返回值
高阶函数:A函数把B函数作为参数(函数可以赋给形参,也可赋给普通变量)
代码复用
函数和对象,复用的两种形式
通过函数或对象封装,模块化设计松紧耦合
全局变量__name__与模块
模块直接执行时,该模块“__name__”的值就是“__main__”
模块被导入另一模块时,“__name__”的值就是该模块的文件名称
选择性执行代码: if __name__ == "__main__":
包 :类似文件夹,将联系紧密的模块放一起,__init__.py包含初始化代码和__all__列表
函数递归:函数内部调用自己
递归基例和递归链条
函数与分支结构
闭包
特点及定义
内层函数里运用了外函数定义的局部变量
外层函数的返回值是内层函数的‘引用’
函数名后紧跟一对括号相当于要调用这个函数
不跟括号只是一个函数的名字,里面存了函数所在内存位置,即引用。
自由变量外层定义内层使用
作用
装饰器
面向对象
单利模式
装饰器
实质: 是闭包函数,为已经存在的对象添加额外的功能
@decorator语法相当于 执行 func = decorator(func),因decorator返回内层函数,func()即调用执行内层函数
内层函数和被装饰函数的传入参数和返回值类型必须保持一致
装饰链,由被装饰函数最近的装饰器开始
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
特点:不需要对对象做任何的代码上的变动
pyinstaller库及参数
-h,查看帮助
-clean清理打包生成的临时文件
-D生成dist文件夹
-F在dist文件夹中只生产独立的打包文件
-i <图标文件名.ico>指定打包程序使用的图标
6、可迭代对象
迭代器(for..in..;next()迭代)
迭代器:指有__iter__( )方法和__next__( )方法的对象,只能遍历一次
生成器:不必创建完整列表,调用时才计算一个新值,本质迭代器
生成器表达式:小括号(列表生成式)
生成器函数:函数用yield替代关键字return返回值
组合数据类型
集合
定义:多元素无序组合
元素唯一、无序、非可变数据类型(即元组,字符串,数值)
用set()建立(空)集合、{}建立非空集合
操作符:
并|交&差-补^及增强操作
子集包含关系<=>返回true/false
处理方法
应用:比较、去重
序列
定义:具有先后关系的一组元素,含字符串、元组、列表类型
通用操作符
通用操作方法函数
元组
创建后不能被修改
用tuple()或()创建,空元组(,)内有逗号
可使用或不使用()
列表
创建后可被修改
用list()或[]创建
列表生成式:表达式+ for … in …+过滤条件,表达式可if,else;过滤条件可if无else;支持多层循环(for)
操作函数方法
字典
键值对集合,无序,可{}创建
dict()创建
(**kwargs)n个赋值表达式
zip(),把两个列表组成元组列表
元组列表
字典
浅拷贝与深拷贝
字典名.copy(),返回一个浅拷贝得到的新字典(内存地址不同),但字典中的可变类型值内存地址与原字典相同
copy.deepcopy(字典名),深拷贝,创建一个新的字典并返回,所有内存地址都不同
索引或增加:<值> = <字典变量>[<键>] 或<字典变量>[<键>] = <值>
拼接字典
d3=dict(d1,**d2)
d3=d1.update(d2)
操作函数和方法
jieba中文分词库分词模式及函数方法
精确模式无冗余
全模式有冗余
搜索引擎模式有冗余
正则表达式与RE模块
正则表达式:定义匹配规则,实现精确或模糊匹配
字符
.(点) 匹配换行符'\n'外的任一字符。
\转义符,使后面一个字符改变原来的含义。
[]字符集合,对应位置可以是该集合中的任一字符。在[]内字符序列前加^表示取反。
预定义字符集(可写在字符集[...]中)
\d 匹配任一数字字符,等价于[0-9]
\D 与\d作用相反,匹配任一非数字字符,等价于[^0-9]
\s 匹配任一空白字符
\S 与\s作用相反,匹配任一非空白字符
\w 匹配包含字母数字和下划线在内的任一可能出现在单词中的字符
\W 与\w作用相反,即匹配\w不匹配的那些特殊字符
数量词(可写在字符或(...)之后)
*匹配前一个模式或字符0次或多次。
+匹配前一个模式或字符1次或多次。
?匹配前一个模式或字符0次或1次。
{m}匹配前一个模式或字符m次。
{m,n}匹配前一个模式或字符m至n次;省略m或n则表示0次或无限次。
子主题
边界匹配(不消耗待匹配字符串中的字符)
$匹配字符串末尾的若干字符。
^(插入符) 匹配字符串开头的若干字符。
\A 匹配字符串开头的若干字符,同匹配模式中的^
\b单词边界符,即\b两边的字符应该一个是非单词字符、另一个是单词字符,或者一个是单词字符、另一个是空字符(即字符串的开头或末尾)。
\B 非单词边界符,与\b功能相反
\Z 匹配字符串末尾的若干字符,同匹配模式中的$
逻辑、分组
|“A|B”表示匹配A或B中的任一模式即可。
(…)用()括起来的内容表示一个分组。在匹配完成后,可以获取每个分组在字符串中匹配到的内容。例如,对于正则表达式“(.*?)abc”,其与“123abc456abc”匹配结果为“123”和“456”;而对于正则表达式“(.*)abc”,其与“123abc456abc”匹配结果为“123abc456”。“*?”与“*”的区别在于:“*? ”每次匹配尽可能少的字符;而“*”每次会匹配尽可能多的字符。
\number number表示一个数字,\number用于引用同一编号的分组中的模式(分组编号从1开始)。例如,对于正则表达式“([0-9])abc\1”,其中的“\1”就表示引用第1个分组中的模式“[0-9] ”,即等价于“([0-9])abc[0-9] ”,匹配以一个数字开头、一个数字结尾、中间是abc的字符串。
特殊构造(不作为分组,待学习补充)
re模块方法
re.compile(pattern[, flags]): 编译一个正则表达式模式(pattern)
pattern : 一个字符串形式的正则表达式
flags : 表示匹配模式,默认值0表示无选项
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式(只对^|$)
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释
生成正则表达式对象,重复使用提高效率,如使用match方法:pattern.match(string[,pos[,endpos]])
re.match(pattern, string,flags): 从头开始匹配, 用group()方法可以获取第一个匹配值,返回match对象
re.search(pattern, string,flags): 用包含方式匹配,使用group()方法可以获取第一个匹配值,返回match对象
match对象方法
group([group1,…])根据传入的组号返回对应分组的匹配结果。如果传入一个组号,则返回一个字符串形式的匹配结果;如果传入多个组号,则返回一个由多个匹配结果字符串组成的元组。如果传入0或不传入参数,则返回的是与正则表达式匹配的整个字符串
groups() 返回一个由所有分组的匹配结果字符串组成的元组
start(group=0)返回指定分组的匹配结果字符串在原字符串中的起始位置;如果group值为0(默认值),则返回与正则表达式匹配的整个字符串在原字符串中的起始位置
end(group=0)返回指定分组的匹配结果字符串在原字符串中的结束位置;如果group值为0(默认值),则返回与正则表达式匹配的整个字符串在原字符串中的结束位置
re.findall(pattern, string): 用包含方式匹配,返回所有匹配到的字符放到列表中,否则返回空列表
re.sub(pattern, new_string, current_string,count=0,flags=0): 匹配字符并替换
re.split(pattern, string,maxsplit=0,flags=0): 把字符串按正则表达式匹配的子串分割,返回列表
面向对象
类和对象
类:规定了数据类型,类的封装包含属性和方法
对象:实际存储数据,创建对象 类名()
类的属性
访问
为对象动态绑定新属性:对象名.新增属性名=值
定义时指定,通过 类名或对象名.属性名 访问
私有属性:只能在类内访问,属性名字以__开头(类外访问,需在私有属性名前加上__类名,即:实例对象名.__类名__私有属名)
类的方法
普通(实例)方法:def 方法名(self,其他参数):,通过 实例对象名.方法名(参数列表)调用,self参数指向实例化对象。
内置方法:特定情况下由系统自动执行
构造方法:初始化类的创建对象 def __init__(self,其他参数)
析构方法:完成待销毁类对象资源的清理 def __del__(self)
类对象销毁情况
(1)局部变量的作用域结束。
(2)使用del删除对象。
(3)程序结束时,程序中的所有对象都将被销毁。
注意:多个变量对应同一内存空间,变量全删除才会销毁此内存空间保存的对象,执行析构方法
__str__(self) 返回值必须是字符串
__gt__(self, other) 进行self>other运算时自动执行
__ge__(self, other) 进行self>=other运算时自动执行
__le__(self, other) 进行self<=other运算时自动执行
__eq__(self, other) 进行self==other运算时自动执行
__ne__(self, other) 进行self!=other运算时自动执行
__lt__(self, other) 进行self<other运算时自动执行
类方法:@classmethod def 类方法名(cls,其他参数),可类或实例对象调用,cls指向类对象,而非实例对象
静态方法:@staticmethod def 类方法名(其他参数),可类或实例对象调用
子类和继承
定义:class 子类名(父类名1,...父类名n)
子类继承父类中定义的所有属性和方法,同时能够在子类中增加新的属性和方法,可一个父类单继承,也可多个父类多继承
内置函数
isinstance(对象名,类名)判断前者是否是后者的类对象或子类对象
issubclass(类名,类名),判断前者是否是后者子类
type(实例对象名)获取对象所属类,或者type(对象名)==类名判断是否指定类
方法重写与鸭子类型
重写:以对从父类中继承过来的方法进行重新定义
多态:执行同样代码的情况下,系统根据对象实际所属的类去调用相应类中的方法。
鸭子类型:不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子,即在函数中使用形参进行操作时只要传入的对象能够支持该操作,程序就能正常执行。
super(type[, object-or-type])
返回一个代理对象, 这个对象负责将方法调用分配给第一个参数的一个父类或者同辈的类去完成.
第一个参数:当前类
第二个参数
对象名:属于第一个参数类或子类
类名:第一个参数类的子类
super(cls, inst) 获得的是 cls 在 inst 的 MRO 列表中的下一个类
子类永远在父类之前
如果有多个父类,那么按照它们在MRO列表中的顺序被检查
如果下一个类有两个合法的选择,那么就只选择第一个
父类对象的self绑定到当前这个子类对象
super()第二个参数是类,得到的方法是函数,使用时要传self参数。第二个参数是对象,得到的是绑定方法,不需要再传self参数。
动态扩展与__slots__变量
动态扩展:用type模块中的MetodType(函数名,对象名)为对象绑定新方法和属性
__slots__变量限制当前所在类实例扩展属性
子类没有slots的,子类实例对象可任意扩展属性
子类有slots的,子类实例对象属性扩展范围包括子类和父类slots定义的属性
@property装饰器
使用@property装饰器来创建只读属性(即getter),将方法转换为相同名称的只读属性
定义一个设置属性值的方法(setter),需要使用名字“@属性名.setter”的装饰器,并设置属性值范围。
在类的setter和getter方法中使用self访问属性时,需要self.__属性名,否则系统会因不断递归调用而报错。
使用场景
1.修饰方法,是方法可以像属性一样访问。
2.与所定义的属性配合使用,这样可以防止属性被修改。
@property def 方法名(self) 代码块 @方法名.setter def 方法名(self, value): 代码块
7、文件和数据格式化
文件的使用
文件的类型展现
文本文件:单一特定编码
二进制文件:有格式无统一编码
文件指针
如果打开方式中不包括'a',则文件指针指向文件首的位置;随着读/写操作,文件指针顺序向后移动,直至读写完毕。
如果打开方式中包括'a',则文件指针指向文件尾的位置,此时向文件中写数据时就会在已有数据后写入新数据。
文件对象打开关闭
<变量名>=open(<文件路径名>,<打开模式>)
r:只读,默认,文件不存在返回错误
w:覆盖写,不存在则创建,存在则全覆盖
x:独占模式,不存在则创建,存在返回错误
a:追写模式,不存在则创建,存在则在后追加
b:二进制模式
t:文本文件模式,默认
+:与r,w,x,a一同使用,在原功能上增加同时读写功能
<变量名>.close( )
with语句自动关闭文件释放资源:with open('路径文件名','模式') as f:
文件对象读取file=open(filename,'r')
<f>.read(size):读入全部,否则读取前size长度内容
一次读入统一处理
按数量读入,逐步处理
<f>.readline(size)读入一行,否则读入该行前size长度内容
<f>.readlines(hint)读入所有行,每行为元素形成列表,否则读入前hint行
一次读入,分行处理
for line in file
分行读入,逐行处理
文件对象数据写入
<f>.write(string)向文件写入一个字符串或字节流
<f>.writelines(lines)将一个元素为字符串的列表写入文件,元素间直接拼接
注意文件指针:<f>.seek(offset),0文件开头,1当前位置,2文件结尾
自动轨迹绘制思路
1、定义数据文件格式
2、编写程序根据数据格式解析参数绘制图形
3、编制数据文件
数据格式化
一维格式化和处理
列表
集合
二维格式化和处理
列表嵌套列表
csv文件
格式:行与','
csv模块与函数
写操作
csv.writer(csvfile),如果将open函数返回的文件对象作为实参传给csvfile,则调用open函数打开文件时必须加上一个关键字参数“newline=''”。
csv.writerow(row) csv.writerows(rows)
读操作
csv.reader(csvfile)
csvfile要求传入一个迭代器。
open函数返回的文件对象除了是可迭代对象,同时也是迭代器。
如果将文件对象作为实参传给csvfile,则调用open函数打开文件时应加上一个关键字参数“newline=''”。
返回的reader对象是一个可迭代对象
wordcloud模块
w.generate(txt)向词云对象中加载文本
w.to_file(filename)把词云输出为图像
参数
输出大小width/height
字体大小 min(max)_font_size和字体步进font_step
字体font_path
显示最大词数max_words
不显示词表stop_words
外形图引用mask
背景色background_color,默认黑
8、程序设计方法
程序设计思维
计算思维:基于计算机,抽象计算过程(设计构造),自动化求解(编程)
计算生态:开源,无顶层设计,以功能为单位
特点:竞争发展,相互依存,迅速更迭
价值和运用:创新,编程的起点是系统,目的是快速解决问题
用户体验:关注功能和体验
进度展示
时间等待
步骤等待
大量循环等待
异常处理
输入合规性异常处理
读写异常处理
运算结果异常处理
其他
打印输出过程信息
日志文件记录异常
帮助信息
基本设计模式
IOP:确定、编程、调试
自顶向下设计:划分功能
模块化设计:分而治之,分层抽象,体系化设计
模块之间松耦合
模块内部紧耦合
配置化设计:关键在于接口设计,程序执行和(参数)配置分离
开发步骤:产品定义-系统架构-设计实现-用户体验
第三方库安装
pip安装
集成安装
文件安装
9、计算生态
数据处理到人工智能
数据分析Numpy、Pandas、SciPy
数据可视化Matplotlib、Seaborn、Mayavi
文本处理PyPDF2、NLTK、python-docx
机器学习Scikit-learn、TensorFlow、MXNet
web解析到网络空间
网络爬虫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
IO编程与异常
OS模块
路径操作
绝对路径:最顶层开始的完整路径
相对路径:基于当前目录的路径,'.'当前目录,'..'上层目录
进程管理
os.system(command) - 执行程序或命令command - 在Windows系统中,返回值为cmd的调用返回信息
环境参数
异常及处理
异常分类
主动产生异常:if条件判断语句+raise XxxError
语法错误:代码不符合编程语言的语法要求
逻辑错误
AssertionError 当assert语句失败时引发该异常
AttributeError 当访问一个属性失败时引发该异常
ImportError 当导入一个模块失败时引发该异常
IndexError 当访问序列数据的下标越界时引发该异常
KeyError 当访问一个映射对象(如字典)中不存在的键时引发该异常
MemoryError 当一个操作使内存耗尽时引发该异常
NameError 当引用一个不存在的标识符时引发该异常
OverflowError 当算术运算结果超出表示范围时引发该异常
RecursionError 当超过最大递归深度时引发该异常
RuntimeError 当产生其他所有类别以外的错误时引发该异常
StopIteration 当迭代器中没有下一个可获取的元素时引发该异常
TabError 当使用不一致的缩进方式时引发该异常
TypeError 当传给操作或函数的对象类型不符合要求时引发该异常
UnboundLocalError 引用未赋值的局部变量时引发该异常
ValueError 当内置操作或函数接收到的参数具有正确类型但不正确值时引发该异常
ZeroDivisionError 当除法或求模运算的第2个操作数为0时引发该异常
FileNotFoundError 当要访问的文件或目录不存在时引发该异常
FileExistsError 当要创建的文件或目录已存在时引发该异常
异常处理
断言:结合try-except使用assert可以判断一个条件是否成立,如果成立则继续执行后面的语句;如果不成立则会引发AssertionError异常。
自定义异常:以BaseException类作为父类创建一个子类。