python速成
Python 快速学习笔记
深感吾所学之浅,所思之愚
一个例子
temp = input("猜数字:")
guess = int(temp)if guess == 8:print("猜对了")
else:print("猜错了")print("游戏结束")
注意:符号的中英文,代码的缩进
变量
变量可以反复赋值
字符串
文本可以用 单引号、双引号、三引号 来引用
三引号 引用的内容可以换行
字符串加法:实际是 拼接 操作
字符串乘法:实际是 复制操作
运算符
<:小于
<=:小于等于
>:大于
>=:大于等于
==:恒等
!=:非等
is:是
is not:不是
循环结构
为避免无限循环,必须设置循环条件
通过break
语句,可以跳出循环
通过continue
语句,可以跳出本次循环
(伪)随机数的生成
模块random
用于生成伪随机数
导入模块:import random
调用:random.randint(1, 10)
随机数重现
获取随机数种子:random.getstate()
设置随机数种子:random.setstate()
一个例子
import randomcount = random.randint(0, 100)while(True):temp = input("猜数字:")guess = int(temp)if guess == count:print("猜对了")breakelse:if guess < count:print("猜小了")else:print("猜大了")print("游戏结束")
数字类型
整数:精度无限大
浮点数:
0.1 + 0.2 == 0.3 false
使用decimal模块保证精确性
import decimal
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
c = deciml.Decimal('0.3')
a + b == c true
复数:实部(real)和虚部(imag)
bool类型
True 和 False
逻辑运算符
and与
or或
not非
条件表达式
语句 if 条件 else 语句
迭代
for item in items:
range()用于生成序列,便于设置for循环的迭代次数
列表
创建:数据放入中括号中即可
for xx in xx:可以很方便遍历列表
可采用访问数组的方式直接访问列表
切片:(特别好用)
切片的开始索引为0
可以进行切片,左闭右开
方法:
append()添加一个元素
extend()添加多个元素
insert()插入一个元素
remove()删除指定值
pop()删除指定位置
clear()清空
sort()从小到大排序
reverse()翻转顺序
count()统计某元素出现次数
index()查找某元素索引值
copy()拷贝一个元素列表
加法即拼接
乘法即多次拼接
嵌套列表即多维数组
is:同一性运算符,判断是否为同一个对象
浅拷贝和深拷贝:
浅拷贝只拷贝了外层对象
import copycopy() 浅拷贝
deepcopy() 深拷贝
列表推导式:
例子
oho = [1, 2, 3, 4]
oho = [i * 2 for i in oho]格式
[expression for target in iterable][expression for target in iterable if condition] # 元素需满足条件判断[expression for target1 in iterable1for target2 in iterable2. . .for targetN in iterableN] # 看作依次的多层循环[expression for target1 in iterable1 if condition1for target2 in iterable2 if condition2. . .for targetN in iterableN if conditionN] # 终极版本
_可以作为变量名
元组
列表用方括号,元组用圆括号
元组可以通过下标获取元素
元组不可变
元组同样可以切片
方法:
count()
index()
加法、乘法
元组可以嵌套
元组支持迭代
不存在元组推导式
“无逗号不元组”
序列类型可进行打包解包
字符串
capitalize()单词首字母大写
casefold()单词字母全小写
title()首字母大写,其他字母小写
swapcase()大小写反转
lower()所有字母小写
对齐
查找
count()某字符出现次数
find()某字符出现索引
rfind()同上,从右往左找
index()同上
rindex()同上
替换
expandtabs()将tab替换为空格
replace(old, new, count=xx)
translate(table)相当于按table这个映射表,来进行映射
判断
务必注意Python的索引从0开始,并且左闭右开!
留白
拆分&拼接
格式化字符串
format()"{}".format(param)实际上花括号接受format的参数列表中的元素
1.可以改变接受的顺序,通过在花括号中填写对应参数列表索引
2.可以多次引用,通过在花括号中填写对应参数列表索引f字符串:是format的语法糖
序列
列表、元组、字符串 都是序列
序列分为可变序列与不可变序列
序列有一些通用的操作方法
id()可获取一个对象的唯一标识
is和is not用来判断按两个对象表示是否相同
in和not in用来判断是否包含
del删除一个或者多个指定对象
相关函数:
list()
tuple()
str()
min()
max()
sum()求和
sorted()
reversed()返回一个迭代器
all()是否所有元素全为真
any()是否存在元素为真
enumerate()创建枚举对象
zip()将多个列表的相同位置元素构成元组,这些元组构成一个列表
map()实际上就是将原来的值按某种规则进行映射
filter()过滤出满足条件的元素
迭代器使一个可迭代对象
可迭代对象可重复使用
迭代器是一次性的
iter()使一个可迭代对象变为迭代器
next()逐个将迭代器中元素取出
字典
字典是Python中唯一实现映射关系的内置类型
关键是 映射
创建字典:六种
fromkeys()
pop()删除
popitem()删除最后一个加入的键值对
del也可以用来删除
clear()清空
update()同时修改多个键值对
get()查找指定键对应值
setdefault()
获取视图对象:
items()所有的键值对
keys()所有的键
values()所有的值
copy()浅拷贝
len()获取长度
in,not in
字典可以嵌套,即字典的值可为字典、列表等
字典推导式:
和列表推导式方法一致
集合
集合元素唯一无序
集合也有推导式
in,not in
可利用集合实现去重
copy()实现浅拷贝
isdisjoint()是否没有元素相交
issubset()是否是子集
issuperset()是否是超集
union()并集
intersection()交集
difference()差集
symmetric_difference()对称差集
<,>,|,&,-可用来操作集合,逻辑等同于逻辑运算符
可变集合set()
不可变集合frozenset()
update()更新可变集合中元素
add()添加一个元素
remove()删除一个元素,会抛异常
discard()删除一个元素,不抛异常
pop()随机弹
clear()清空
函数
参数种类:
位置参数、关键字参数、默认参数
形参*args可传递多个参数,参数打包为元组
形参**kwargs传递多个参数,参数打包为字典
global语句声明全局变量
嵌套函数,函数中可以嵌套函数,相当于局部变量,即局部函数
nonlocal语句
闭包
函数作为参数或者返回值时,只写名字即可,无需写括号
装饰器
函数作为参数
类似于注解
lambda表达式
匿名函数
格式:
lambda arag1, arg2, arg3, ... argN : expression
一般用来实现简单函数
生成器generator
yield()
每调用一次提供一次数据,并保留状态
生成器无法使用下标索引
生成器表达式
函数文档、类型注释、内省
help()
高阶函数
一个函数以另一个函数为参数时,前者就是一个高阶函数
偏函数
import functools@wraps
永久存储
打开文件:
open()
写:
关闭文件:
close()
路径处理:
from pathlib import Pathis_dir()判断是否为文件夹
is_file()判断是否为文件
exists()判断是否存在
相对路径,绝对路径
使用with open代替open可以避免手动关闭文件
pickle模块:
dump()
load()
异常exception
异常捕获处理:
try-except
try-except-else
try-except-finally
异常可以嵌套
raise语句,主动抛出异常
assert语句,主动抛出异常
类和对象
对象 = 属性 + 方法
self是为了标明当前调用类中方法的对象是哪一个,因为多个对象可以是同一个类
isinstance()判断对象是否是某个类
多重继承
组合
self实际上就是这个实例对象本身
self起到绑定作用
构造函数
重写
super()避免钻石继承
Mix-in
多态:
根据调用对象的不同有不同的效果
鸭子类型:
不管什么鸟,只要走路像鸭子,游泳像鸭子,叫声像鸭子,那么这只鸟就被成为鸭子类型
实际上,不管一个对象属于哪个类,也不管声明的具体接口是什么,只要该对象实现了相应的方法,函数就可以在对象上执行操作
私有变量:
通过某种手段,使得对象中的属性或方法无法被外部所访问。
__slots__属性以限制类的动态添加属性,可以节省内存
继承自父类的__slots__属性在子类中不生效
实际上,可以理解为动态属性存放于__dict__属性中,静态属性存放于__slots__中
魔法方法:
魔法方法(Magic Methods 或 Special Methods)是 Python 中以双下划线开头和结尾的特殊方法
init(self[, …])
类实例化时自动调用
new()
创建一个类,在__init()__之前被调用
del(self)
对象销毁时执行
and or not
属性访问:
hasattr()
getattr()
setattr()
delattr()
太奇妙了,魔法方法!
代偿:
指需要用到某方法,但是这个方法没有去实现,就会使用其他方法来得到相同结果
eval()将参数去引号后执行
property()
类方法
使用装饰器@classmethod
静态方法
使用装饰器@staticmethod
放在类里面的函数
可以在类里定义一个不需要绑定的函数
描述符
描述符可以实现property()
描述符被定义为类,然后将描述符的实例对象赋值给类属性,从而实现对该属性的全方位管理
描述符只能应用于类属性
元类
抽象基类
from abc import ABCMeta, abstractmethod
抽象基类不能被实例化,只能被继承使用,且必须实现其中的抽象方法
模块与包
on 中以双下划线开头和结尾的特殊方法
init(self[, …])
类实例化时自动调用
new()
创建一个类,在__init()__之前被调用
del(self)
对象销毁时执行
and or not
属性访问:
hasattr()
getattr()
setattr()
delattr()
太奇妙了,魔法方法!
代偿:
指需要用到某方法,但是这个方法没有去实现,就会使用其他方法来得到相同结果
eval()将参数去引号后执行
property()
类方法
使用装饰器@classmethod
静态方法
使用装饰器@staticmethod
放在类里面的函数
可以在类里定义一个不需要绑定的函数
描述符
描述符可以实现property()
描述符被定义为类,然后将描述符的实例对象赋值给类属性,从而实现对该属性的全方位管理
描述符只能应用于类属性
元类
抽象基类
from abc import ABCMeta, abstractmethod
抽象基类不能被实例化,只能被继承使用,且必须实现其中的抽象方法
模块与包