Python就业学习笔记
1·基础语法
1-1,输出Hello,World
print('Hello,World')
1-2,Python的导入位置
import os
print (os.getcwd())
1-3,Python的注释方法
# 注释内容
"""三引号注释的第一种
双引号形式,可以随意换行
"""
'''三引号注释的第一种
dan引号形式,可以随意换行
'''
1-4,input函数
# 一般用于输入信息
name = input('你的名字是:')
1-5,变量
# 一个拥有变量值的变量名等于变量
# 变量名必须是数字,字母,下划线组成,开头必须是字母或者下划线,变量名是区分大小写的
name = 'xiaoming'
# 快速定义变量
a, b, c = 1, 2, 3
1-6,Python的关键字
关键字 | 含义 | 关键字 | 含义 |
---|---|---|---|
True | 布尔类型,表示真 | is | 判断变量是否是某个类的实例 |
False | 布尔类型,表示否 | not | 逻辑运算,非的操作 |
def | 函数定义 | or | 逻辑运算,或的操作 |
if | 逻辑中的如果 | pass | 无意义,占位字符 |
elif | 逻辑中的或者如果 | raise | 主动抛出异常 |
else | 逻辑中的否则 | with | 简化Python语句 |
try | 异常语句的开启 | yield | 从循环或函数,依次返回数据 |
import | 导入语句,可与from公用 |
2.Python的数据类型
2-1,Pyhton的数据类型
数字类型,字符串类型,布尔类型,空类型,列表类型,元组类型,字典类型
2-2,数字类型
1.整型
整形就是我们说的整数,0也是整数,但是是特殊的整数
int
既是整形的代表,又是定义整型的内置函数,但定义一个整型并不一定要使用int
声明
2.浮点型
浮点型就是我们生活中的小数,凡是带有小数点的类型,都可以认为是浮点类型
在Python中,float
既是浮点型的代表,又是定义浮点型的内置函数,但定义一个浮点型并不一定要使用float
声明
3.type函数
作用:返回变量的类型
用法:type()
括号里面填写已经定义的变量名或变量
number = 4.5
print(type(number)) # 可以直接使用变量
print(type(22)) #也可以直接传入数值
2-3,字符转
1.什么是字符串
用 ''
或 ""
包裹的信息就是字符串
字符串中可以包含任何字符,如字母,数字,符号,且没有先后顺序
在Python中,使用str
来代表字符串类型,并且通过该函数可以定义字符串类型
2.id函数
作用:返回变量的内存地址
用法id()
括号里面填写变量
num = 'hello'
print(id(num))
3.len函数
作用:返回字符串的长度,无法返回数字类型的长度,因为数字类型没有长度
用法:len()
括号里面填写变量
test = len('这里测试len函数')
print(test)
4.内置成员运算符 in和not in的使用
in
作用:判断你的数据中,是否存在你想要的成员,存在返回True,反之返回False
用法:字符 in 字符串
s = "hello liu xiyu"
print('xiyu' in s)
not in
作用:判断你的数据中,是否不存在你想要的成员,不存在返回True,反之返回False
s = "hello liu xiyu"
print('xiyus' not in s)
5.max函数
作用:返回数据中最大的成员
顺序:中文符号 > 字母 > 数字 > 英文符号,中文按照拼音首字母计算
用法:max()
括号里面填写数据
s = "今天是2023年4月2日"
print(max(s))
6.min函数
作用:返回数据中最小的成员
顺序:中文符号 > 字母 > 数字 > 英文符号,中文按照拼音首字母计算
用法:min()
括号里面填写数据
s = "今天是2023年4月2日,星期日!"
print(min(s))
7.字符串的累加
字符串不是数字不能做减法,乘除法
字符串的拼接,用 +
这个符号
a = '123'
b = '456'
c = a + b
# 输出结果为 123456
print(c)
2-4,布尔类型与空类型
1.布尔类型
定义:真假的判断,即布尔类型
布尔值:True
为真,False
为假
在计算机中 0
和1
是计算机最原始的形态,故而经常会将0,1
来代替False,True
2.布尔(bool)函数的使用
作用:bool代表布尔类型,也可以对结果进行真假的判断
用法:bool()
括号里面填写需要判断的数据
label = '我们在一起'
print(bool('我' in label))
3.空类型
定义:不属于任何数据类型,就属于空类型,属于False
的范畴,如果不确定类型的时候,可以使用空类型
固定值:None
2-5,列表
1.什么是列表
列表就是队列,是各种数据的集合,也是一种数据结构,是一种有序,且内容可重复的集合类型
在Python中,list
代表列表类型,也可以用它定义一个列表,列表的元素存在一个[]
中
在Python中,列表是一个无限长度的内容结构
max
和 min
函数在列表中使用,需要保持数据类型一致
2-6,元组
1.什么是元组
元组与列表一样,都是一种可以存储多种数据结构的队列,元组也是一个有序的,且元素可以重复的集合,是一个无限制长度的数据集合
元组的定义:在Python中,tuple
代表着元组这种类型,也可以用它定义一个元组,元组的元素存在()
内
max
和 min
函数在元组中使用,需要保持数据类型一致
元组内容只有一个数据的时候要在后面加,
2.元组和列表的区别
- 元组比列表占用资源更小
- 列表是可变的,元组是不可变的
2-7,字典
1.什么是字典
字典是由多个键(key)及其对应的值(value)所组成的一种数据类型
2.字典的结构以及定义
在Python中,dict
用来代表字典,并且可以创建一个字典
在Python中,通过{}
将一个个key与value存入字典中
a = {key : value}
3.字典支持的数据类型
key支持字符串,数字和元组类型,不支持列表
value支持所有的数据类型
4.字典的重要特性
每个key都是唯一的
2-8,赋值运算符
赋值运算符有哪些
运算符 | 描述 | 举例 |
---|---|---|
= | 等于运算符 | c = a + b |
+= | 加法运算符 | c += a 等于 c = c + a |
-= | 减法运算符 | c -= a 等于 c = c - a |
*= | 乘法运算符 | c *= a 等于 c = c * a |
/= | 除法运算符 | c /= a 等于 c = c / a |
%= | 取模运算符 | c %= a 等于 c = c % a |
**= | 幂运算符 | c **= a 等于 c = c **= a |
//= | 整数运算符 | c //= a 等于 c = c //= a |
2-9,比较运算符
比较运算符有哪些
运算符 | 描述 | 举例 |
---|---|---|
== | 判断是否等于 | a == b |
!= | 判断是否不等于 | a != b |
> | 判断是否大于 | a > b |
< | 判断是否小于 | a < b |
>= | 判断是否大于等于 | a >= b |
<= | 判断是否小于等于 | a <= b |
<> | 判断是否不等于 | a <> b |
is | 判断两个对象存储是否相同 | a is b |
is not | 判断两个对象存储是否不同 | a is not b |
3-1 Python 字符串常用方法
1. 什么是对象
- Python 中一切都是对象
- 每个对象都有各自的属性和方法
- 对象的特点就是它的属性,功能就是方法
2. capitalize 的功能(首字母大写)
作用:
- 将字符串的首字母大写,其他字母小写
注意:
- 只对第一个字母有效
- 只对字母有效
- 已经是大写,则无效
用法:
newstr = string.capitalize() # 函数括弧内什么都不用写
3. casefold 与 lower 的用法 (转小写)
作用:
- 将字符串的字母改为小写
用法:
newstr = string.casefold() # 函数括弧内什么都不用填写
newstr = string.lower() # 函数括弧内什么都不用填写
注意:
- 只对字符串中的字母有效
- 已经是小写,则无效
4. upper 的用法 (转大写)
作用:
- 将字符串的字母改为大写
用法:
big_str = string.upper() # 函数括弧内什么都不用填写
注意:
- 只对字符串的字母有效
- 已经是大写,则无效
5. swapcase 的用法
作用:
- 将字符串中大小写字母进行转换(大转小,小转大)
用法:
newstr = string.swapcase() # 函数括弧内什么都不用填写
注意:
- 只对字符串中的字母有效
6. zfill 的用法
作用:
- 为字符串定义长度,如不满足,缺少的部分用 0 填补
用法:
# width:新字符串希望的宽度
newstr = string.zfill(width)
注意:
- 与字符串的字符无关
- 定义长度小于当前字符串长度,则不发生变化
7. count 的用法
作用:
- 返回当前字符串中某个成员(元素)的个数
用法:
# item:要查询个数的元素
inttype = string.count(item)
注意:
- 如果查询的成员(元素)不存在,则返回 0
8. startswith 和 endswith 的用法
作用:
- startswith 判断字符串开始位是否是某成员(元素)
- endswith 判断字符串结尾是否是某成员(元素)
用法:
# item:你想查询的元素,返回一个布尔值
start_test = string.startswith(item)
end_test = string.endswith(item)
9. find 和 index 的用法
作用:
- 返回你想寻找的成员的位置
用法:
# item:你想查询的元素,返回一个整型
string.find(item)
# item:你想查询的元素,返回一个整型或者报错
string.index(item)
# PS:字符串的位置从左到右,以 0 开始,空格也算字符串
区别:
- 如果 find 找不到元素,会返回 -1
- 如果 index 找不到元素,会导致程序报错
10. strip 的用法
作用:
- strip 将去掉字符串左右两边的指定元素,默认是空格
用法:
# item:你想去掉的元素,可不填写,默认空格
newstr = string.strip(item)
注意:
- 传入的元素如果不在开头或者结尾则无效
- lstrip 仅去掉字符串开头的指定元素或空格
- rstrip 仅去掉字符串结尾的指定元素或空格
11. replace 的功能
作用:
- 将字符串中的旧元素替换成新元素,并能指定替换的数量
用法:
'''
参数:
old : 被替换的元素
new : 替代 old 的新元素
max : 可选,代表替换几个,默认全部
如果需要修改多个字符,可以在后面再追加replace函数
newstr = string.replace(old,new).replace(old,new)
'''
newstr = string.replace(old,new,max)
3-2 字符串 bool 集合
1. isspace
功能:
isspace 判断字符串是否是一个由空格组成的字符串
用法:
# 无参数可传,返回一个布尔类型
booltype = string.isspace()
2. istitle
功能:
istitle 判断字符串是否是一个标题类型,只能用于英文
用法:
# 无参数可传,返回一个布尔类型
booltype = string.istitle()
3. isupper 与 islower
功能:
- isupper 判断字符串中的字母是否都是大写
- islower 判断字符中的字母是否都是小写
用法:
# 无参数可传,返回一个布尔类型
booltype = string.isupper()
booltype = string.islower()
3-3 字符串编码格式
1. 什么是编码格式
- 有一定规则的规则
- 使用了这种规则,我们就能知道传输的信息是什么意思
2. 常见编码格式
- gbk 中文编码
- ascii 英文编码
- utf-8 是一种国际通用的编码格式
3-4 字符串格式化
1. 什么是格式化
- 定义:一个固定的字符串中有部分元素是根据变量的值而改变的字符串
2. 格式化使用场景与目的
- 发邮件的时候
- 发短信的时候
- APP 上发推送的时候
- 对于重复性很多的信息,通过格式化的形式,可以减少代码的书写量
3. 根据类型定义的格式化
- 字符串格式化使用 % 来实现
# %s 格式符
# ('dewei', 33) 对应格式符的变量,按顺序一一对应,数量须保持一致,超过1个格式化变量用小括号包裹
# % 格式化字符串与格式符变量之间用一个 % 连接,% 两边有1个空格
'my name is %s, my age is %s' % ('dewei', 33)
- 字符串格式化函数 format
'''
format 函数用来格式化
字符串主题使用{},数字非必需
'''
'你好{0},今天看起来气色不错{1}'.format('小杨','不错')
- Python 3.6 新加入的 f-strings
'''
1.定义一个变量
2.字符串前加 f 符号
3.需要格式化的位置使用变量名
'''
name = '小杨'
age = 22
text = f'今天是{name}的{age}岁生日'
print (text)
3-5 格式化符号
定义:
- 用于对应各种数据类型的格式化符号
符号 | 说明 |
---|---|
%s | 格式化字符串,通用 |
%d | 格式化整型 |
%f | 格式化浮点型 |
%u | 格式化无符号整型,正整型 |
%c | 格式化字符 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号16进制数 |
%e | 科学计数法格式化浮点数 |
3-6 转义字符
1. 什么是转义字符
- 字符要转成其他含义的功能,所以我们叫他转义字符
- \ + 字符
2. Python 中的转义字符们
3. 转义无效符
- 在 Python 中,在字符串前加 r 来将当前字符串的转义字符无效化
print (r'hello \f')
3-2 Python 列表常用方法
1. append 的功能
功能:
- 将一个元素添加到当前的列表中
用法:
# new_item:添加进列表的新的元素(成员)
list.append(new_item)
注意:
- 被添加的元素只会被添加到末尾
- append 函数是在原有列表的基础上添加,不需要额外添加新的变量
2. insert 的功能
功能:
- 将一个元素添加到当前列表的指定位置中
用法:
# index:新的元素放在哪个位置(数字)
# new_item:添加进列表的新的元素(成员)
list.insert(index, new_item)
insert 与 append 的区别:
- append 只能添加到列表的结尾,insert 可以选择任何一个位置
- 如果 insert 传入的位置列表中不存在,则将新元素添加到列表结尾
- 字符串,元组,列表 元素的位置是从 0 开始计算的
3. 列表和元组的 count 函数
功能:
- 返回当前列表中某个成员的个数
用法:
# item:你想查询个数的元素
inttype = list.count(item)
注意:
- 如果查询的成员(元素)不存在,则返回 0
- 列表只会检查完整元素是否存在需要计算的内容
4. remove 的功能
功能:
- 删除列表中的某个元素
用法:
# item:准备删除的列表元素
list.remove(item)
注意:
- 如果删除的成员(元素)不存在,会直接报错
- 如果被删除的元素有多个,只会删除第一个
- remove 函数不会返回一个新的列表,而是在原先的列表中对元素进行删除
5. del 函数的功能
功能:
- del 把变量完全彻底删除
用法:
# string 要删除的变量
del string
6. reverse 的功能
功能:
- 对当前列表顺序反转
用法:
list.reverse()
7. sort 的功能
功能:
- 对当前列表按照一定规律进行排序
用法:
# key : 参数比较(key 涉及函数学习,我们在日后讲解当前默认不传即可
# reverse : 排序规则,reverse = True 降序,reverse = False 升序(默认)
list.sort(key = None, reverse = False)
注意:
- 列表中的元素类型必须相同,否则无法排序(报错)
8. clear 的功能
功能:
- 将当前列表中的数据清空
用法:
list.clear()
9. copy 的功能(浅拷贝)
功能:
- 将当前的列表复制一份相同的列表,新列表与旧列表内容相同,但内存空间不同
用法:
# 该函数无参数,返回一个一模一样的列表
list.copy()
copy 与二次复制的区别:
- 二次赋值的变量与原始变量享有相同内存空间
- copy 函数创建的新列表与原始列表不是一个内存空间,不同享数据变更
浅拷贝:
深拷贝:
10. extend 的功能(导入列表或元组)
功能:
- 将其他列表或元组的元素倒入到当前列表中
用法:
# iterable 要导入的列表或元组,无返回值
list.extend(iterable)
3-3 列表索引
1. 什么是索引
- 字符串,列表和元组
- 从最左边记录的位置就是索引
- 索引用数字表示,起始从 0 开始
- 字符串,列表(元组)的最大索引是他们的长度 - 1
2. 什么是切片
- 索引用来对单个元素进行访问,切片则对一定范围内的元素进行访问
- 切片通过冒号在中括号内把相隔的两个索引查找出来 [0: 10]
- 切片规则为:左含,右不含
3. 列表的索引,获取与修改
- list[index] = new_item
- 数据的修改只能在存在的索引范围内
- 列表无法通过添加新的索引方式赋值
- list.index(item)
4. pop 的功能
功能:
- 通过索引删除并获取列表的元素
用法:
# index 删除列表的第几个元素
# 函数会删除该索引的元素并返回,如果传入的 index 索引不存在则报错
list.pop(index)
5. 通过 del 删除索引
用法:
# 直接删除 无返回值
# 如果 index (索引)不存在则报错
del list[index]
6. 索引切片在元组中的特殊性
- 可以和列表一样获取索引与切片索引
- 元组函数 index 和列表用法完全一致
7. 列表之字符串切片
字符串的索引与获取:
- 一个字符对应一个索引
- 索引规则与列表相同
- 切片和索引的获取与列表相同
- 无法通过索引修改与删除,字符串不可修改
3-4 Python 字典常用方法
1. [] 添加或修改处理法
功能:
- 添加或修改字典
用法:
# 字典没有索引
# 添加或修改,根据 key 是否存在所决定
dict['name'] = 'dewei'
2. update 的功能与用法
功能:
- 添加新的字典
- 如新字典中有和原字典相同的 key ,则会被新字典覆盖
用法:
# new_dict:新的字典,该函数无返回值
dict.update(new_dict)
3. setdefault 的功能
功能:
- 获取某个 key 的 value
- 如 key 不存在字典中,将会添加 key 并将 value 设为默认值
用法:
# key:需要获取的 key
# value:如果 key 不存在,对应这个 key 存入字典的默认值
dice.setdefault(key,value)
4. 注意事项再强调
- 字典中每一个 key 一定是唯一的
- 字典中的数据量没有限制
- 字典中的 value 可以是任何 python 的内置数据类型的对象和自定义的对象
5. keys 的功能
功能:
- 获取当前字典中所有的键 (key)
用法:
# 返回一个 key 集合的伪列表,伪列表不具备列表的所有功能
dict.keys()
6. values 功能
功能:
- 获取当前字典中所有键值对中的值 (value)
用法:
# 返回一个 value 集合的伪列表,伪列表不具备列表的所有功能
dict.values()
7. 字典 key 的获取
1. [] 的获取方法:
- 字典 + 中括号内传入 key ,不进行赋值操作,即为获取
- 返回 key 对应的 value 值
例子:
name = dict['key']
2. get 功能
功能:
- 获取当前字典中指定 key 的 value
用法:
# key:需要获取 value 的 key
# default:key 不存在则返回此默认值,默认是 None,我们也可以自定义
dict.get(key,default=None)
3. [] 与 get 的区别
- [] 如果获取的 key 不存在,则直接报错
- get 如果获取的 key 不存在,则返回默认值
- 在开发中,优先使用 get 函数
8. 字典删除
1. clear功能
功能:
- 清空当前字典中所有数据
用法:
dict.clear()
2. pop 功能
功能:
- 删除字典中指定的 key ,并将其结果返回
- 如果 key 不存在则报错
用法:
# key:希望被删掉的键,返回这个 key 对应的值(value)
dict.pop(key)
3. del 在字典中的用法
功能:
- 删除字典指定的 key 或者指定的完整字典
用法:
dict = {'name' : 'xiaoming', 'age' : 33}
del dict['name'] # 删除指定 key
del dict # 删除指定字典
9. copy 的功能
功能:
- 将当前字典复制一个新的字典
用法:
# 该函数无参数
# 返回一个一模一样的内存地址不同的字典
dict.copy()
10. 字典成员运算符
1. in 与 not in 在字典中的用法
- 只能判断 key 是否存在
2. get 判断成员是否存在
11. popitem 功能
功能:
- 删除当前字典里末尾一组键值对并将其返回
用法:
# 返回被删除的键值对,用元组包裹 0 索引是 key, 1 索引是 value
dict.popitem()
注意:
- 如果字典为空,则直接报错
12. 数据类型与布尔值的关系
- 每一种数据类型,自身的值都有表示 True 与 False
- not 对于一切结果取反
Python 的集合
1. 什么是集合
- 集合(set)是一个无序的不重复的元素序列
- 常用来对两个列表进行交并差的处理性
- 和列表一样,支持所有数据类型
- 重复的元素会被去除
2. 集合与列表的区别
功能 | 列表 | 集合 |
---|---|---|
顺序 | 有序 | 无序 |
内容 | 可重复 | 不可重复 |
功能 | 用于数据的获取 | 用于数据的交集并集差集的获取 |
索引 | 有索引 | 无索引 |
符号 | [] [1, 2, 3] | {} {1, 2, 3} |
3. 集合的创建
- 通过
set
函数来创建集合,不能使用{}
来创建空集合
a_set = set() # 空集合
a_set = set([1, 2, 3]) # 传入列表或元组
b_set = {1, 2, 3} # 传入元素
c_set = {} # 空 {} 表示字典
4. 集合的增删改
4.1 add 的功能
功能:
用于在集合中添加一个元素,如果集合中已存在该元素则该函数不执行
用法:
set.add(item) # item:要添加的元素,无返回值
4.2 update 的功能
功能:
加入一个新的集合(或列表,元组,字符串),如新集合的元素在原集合中存在则无视
用法:
set.update(iterable) # iterable:集合,无返回值,直接作用于原集合
4.3 remove 的功能
功能:
将集合中的某个元素删除,如元素不存在将会报错
用法:
set.remove(item) # item:要删除的元素,无返回值,直接作用于原集合
4.4 clear 的功能
功能:
清空当前集合中的所有元素
用法:
set.clear() # 无返回值,直接作用于原集合
4.5 del 的功能
功能:
删除集合
用法:
del a_set # a_set:要删除的集合
4.6 重要说明
- 集合无法通过索引获取元素
- 集合无获取元素的任何方法
- 集合只是用来处理列表或元组的一种临时类型,他不适合存储与传输
5. 获取两个集合的差集
5.1 什么是差集
- 简单说就是 a 有的,但 b 没有的
- a, b 两个集合,由所有属于 a 且不属于 b 的元素组成的集合叫做 a 与 b 的差集
5.2 difference 的功能
功能:
返回集合的差集(即返回的集合元素包含在第一个集合中,但不包含在第二个集合中)
用法:
# b_set:当前集合需要对比的集,返回 a_set 与 b_set 的差集
a_set.difference(b_set)
示例:
a_set = {'name', 'xiaomu', 'xiaoming'}
b_set = {'xiaoming', 'xiaogang', 'xiaohong'}
a_diff = a_set.difference(b_set)
print(a_diff)
6. 获取两个集合的交集
6.1 什么是交集
- a, b 都有的就是交集
- a, b 两个集合分别拥有的相同的元素集,称为 a 与 b 的交集
6.2 intersection 的功能
功能:
返回两个或更多集合中都包含的元素,即交集
用法:
# b_set... : 与当前集合对比的 1 或多个集合,返回原始集合与对比集合的交集
a_set.intersection(b_set...)
示例:
a_set = {'Python', 'PHP', 'JAVA'}
b_set = {'HTML', 'IOS', 'Python'}
a_inter = a_set.intersection(b_set)
print(a_inter)
7. 获取两个集合的并集
7.1 什么是并集
- a, b 加在一起
- a, b 两个集合中所有的元素(去掉重复)即为 a 与 b 的交集
7.2 union 的功能
功能:
返回多个集合的并集,既包含了所有集合的元素,重复的元素只会出现一次
用法:
# b_set... : 与当前集合对比的 1 或 多个集合,返回原始集合与对比集合的并集
a_set.union(b_set...)
示例:
a_set = {'Python', 'PHP', 'JAVA'}
b_set = {'HTML', 'IOS', 'Python'}
un = a_set.union(b_set)
print(un)
8. 判断两个集合中是否有相同的元素
8.1 isdisjoint 的功能
功能:
判断两个集合是否包含相同的元素,如果没有则返回 True
, 否则返回 False
用法:
# b_set : 与当前集合用来判断的集合,返回一个布尔值 True 或 False
a_set.isdisjoint(b_set)
示例:
a_set = {'Python', 'PHP', 'JAVA'}
b_set = {'HTML', 'IOS', 'Python'}
result = a_set.isdisjoint(b_set)
print(result)
Python不同数据类型间的转换
1. 字符串与数字的转换
1.1 什么是类型转换,为何做类型转换
- 将自身数据类型变成新的数据类型,并拥有新的数据类型的所有功能的过程即为类型转换
- 为方便更好的帮助处理业务,将类型变更为更适合业务场景的类型
1.2 字符串与数字之间转换的要求
- 字符串转数字:要求是数字组成的字符串
- 数字转字符串:无要求
1.3 字符串与数字之间的转换函数
原始类型 | 目标类型 | 函数 | 举例 |
---|---|---|---|
整型 | 字符串 | str | new_str = str(123456) |
浮点型 | 字符串 | str | new_str = str(3.14) |
字符串 | 整型 | int | new_int = int( '12') |
字符串 | 浮点型 | float | new float = float('1.2' ) |
2. 字符串与列表之间的转换
2.1 字符串转列表之 split 功能
功能:
将字符串以一定规则切割转成列表
用法:
# sep:切割的规则符号,不填写,默认空格,如字符串无空格则不分割生成列表
# maxsplit: 根据切割符号切割的次数,默认-1无限制
# 返回一个列表
string.split(sep=None, maxsplit=-1)
示例:
info = 'my name is dewei'
info_list = info.split()
print(info_list)
2.2 列表转字符串之 join 功能
功能:
将列表以一定规则转成字符串
用法:
# sep: 生成字符串用来分割列表每个元素的符号
# iterable: 非数字类型的列表或元组或集合
# 返回一个字符串
'sep'.join(iterable)
示例:
test = ['a', 'b', 'c']
new_str = '.'.join(test)
print(new_str)
3. 字符串与 bytes 的转换
3.1 什么是比特类型
- 二进制的数据流 --- byte
- 一种特殊的字符串
- 字符串前 + b 标记
3.2 字符串转 bytes 的函数 - encode 功能
功能:
- 将字符串转成比特 (bytes) 类型
用法:
# encoding: 转换成的编码格式,如ascii,gbk,默认 utf-8
# errors: 出错时的处理方法,默认strict,直接抛错误,也可以选择 ignore 忽略错误
# 返回一个比特 (bytes) 类型
string.encode(encoding='utf-8', errors='strict')
示例:
str_data = 'my name is dewei'
byte_data = str_data.encode('utf-8')
print (byte_data)
3.3 bytes转字符串的函数--decode
功能:
- 将比特 (bytes) 类型转成字符串
用法:
# encoding: 转换成的编码格式,如ascii,gbk,默认 utf-8
# errors: 出错时的处理方法,默认strict,直接抛错误,也可以选择 ignore 忽略错误
# 返回一个字符串类型
bytes.decode(encoding='utf-8',errors='strict')
示例:
byte_data = b'python is good code'
str_data = byte_data.decode('utf-8')
print (str_data)
4. 元组,列表,集合间的转换
4.1 列表元组集合之间的转换函数
原始类型 | 目标类型 | 函数 | 举例 |
---|---|---|---|
列表 | 集合 | set | new_set = set([1,2,3,4,5]) |
列表 | 元组 | tuple | new_tuple = tuple([1,2,3,4,5]) |
元组 | 集合 | set | new_set = set((1,2,3,4,5)) |
元组 | 列表 | list | new_list = list((1,2,3,4,5)) |
集合 | 列表 | list | new_list = list({1,2,3,4,5}) |
集合 | 元组 | tuple | new_tuple = tuple({1,2,3,4,5}) |
Python 流程控制
1. if 语句的功能
功能:
判断一个命题的真实性,如果命题为真(True) 则执行 if 的逻辑语句
用法:
# bool_result : 判断结果的真假,布尔类型
# do : 如果布尔为 True 时执行任意代码
# if 属于关键字,没有返回值
if bool_result : # 语法块
do # 业务代码块,注意缩进
2. else 语句的功能
功能:
当 if 语句不满足时所执行的代码块的入口
用法:
# elsedo : else 语句对应的 Python 代码块
# else 属于语法,没有返回值
if bool_result : # if 语法块
do # 业务代码块,注意缩进
else :
elsedo # else 语法块,需缩进
3. elif 的功能
功能:
对于首次 if 判断不满足后,其他条件的判断语句
用法:
# elif 属于语法,没有返回值
if bool_result : # if 语法块
do # 业务代码块,注意缩进
elif bool_result : # elif 语法块
elifdo # 业务代码块,注意缩进
else :
elsedo # else 语法块,需缩进
4. 条件语句的说明
- 条件语句中满足一个条件后,将退出当前条件语句
- 每个条件语句中仅有且必须有一个 if 语句,可以有 0 个或多个 elif 语句,可以有 0 或1个 else 语句
- 每个条件语句 if 必须是第一个条件语
5. for 循环(遍历)
功能:
通过 for 关键字将列表,元组,字符串,字典中的每个元素按照序列顺序进行遍历(循环)
用法:
# iterable : 可循环的数据类型,如列表,元组,字符串,字典
# item : iterable 中的每一个元素(成员)
# : for 循环是语句,没有返回值,但在特定情况下有返回值
for item in iterable: # for 循环代码块
print(item) # 每次循环对应的代码块
6. 字典利用 items 内置函数进行 for 循环
功能:
将字典转成伪列表,每个 key,value 转成元组
用法:
# key : for 循环体中获取的字典当前元素的 key
# value : for 循环体中对应当前 key 的 value 值
# for 循环是语句,没有返回值,items 返回一个为列表
for key, value in dict.items():
print (key, value)
7. range 函数
功能:
返回的是一个一定范围的可迭代对象,元素为整型,他不是列表,无法打印信息,但可循环
用法:
# start : 开始的数字,类似索引的左边
# stop : 结束的数字,类似索引的右边
# step : 跳步,类似索引中的第三个参数
# 返回一个可迭代(循环)的以整型为主的对象
for item in range(start, stop, step=1):
print(item)
8. else 在 for 循环中的使用
- else 语句只有在 fo r循环正常退出后执行
- 循环没有报错,没有中途停止
9. 嵌套 for 循环
示例:
# 执行流程如下:首先输出 a 变量的第一个元素,然后依次输出 b 变量所有元素,输出完毕后,再输出 a 变量第二个元素,以此类推
a = [1, 2, 3]
b = [4, 5, 6]
for i in a:
print(i)
print('-------')
for j in b:
print(j)
print('--------')
10. while 循环
功能:
在满足条件下会无限循环,不满足条件后将停止循环
用法:
# bool_result : 布尔类型,此处语法与 if 完全一致
# do : while 循环体的代码块
# while 循环是语句,没有返回值
while bool_result:
do
11. continue 的功能
功能:
循环遇到 continue 将停止本次数据循环,进入下一次循环
用法:
# continue: 属于语法,不需要加 () 即可,没有返回值
while bool:
continue
for item in iterable:
continue
print(item)
示例:
# 示例:
count = 1
while count < 5:
print(count)
continue
count += 1
12. break 的功能
功能:
使循环正常停止循环(遍历),这时如果循环配合了 else 语句,else 语句将不执行
用法:
# break: 属于语法,不需要加 () 即可,没有返回值
while bool:
break
for item in iterable:
print(item)
break
示例:
# 示例:
count = 1
while count < 5:
print(count)
count += 1
break
函数的定义与使用
1. 函数的定义
- 将一件事情的步骤封装在一起并得到最终结果
- 函数名代表了这个函数要做的事情
- 函数体是实现函数功能的流程
- 方法或功能
- 函数可以帮助我们重复使用,通过函数名我们可以知道函数的作用
2. 函数的分类
- 内置函数
- 自定义函数
3. 通过关键字 def 定义函数
def name(args...):
todo something..
返回值
4. 通过关键字 def 函数执行
def say_hello():
print('今天没有程序,只有笔记')
say_hello() #函数名+小括号执行函数
5. 函数结果的返回-- return
- 将函数结果返回的关键字
- return 只能在函数体内使用
- return 支持返回所有的 python 类型
- 有返回值的函数可以直接赋值给一个变量
例子:
def add(a, b):
c = a + b
return c
result = add(a=1, b=1) # 参数按顺序传递
print(result)
6. return 与 print 的区别
- print 只是单纯的将对象打印,不支持赋值语句
- return 是对函数执行结果的返回,也支持赋值语句
7. 函数的参数
7.1 必传参数
- 函数中定义的参数没有默认值,在调用函数时如果不传入则报错
- 在定义函数的时候,参数后边没有等号与默认值
- 错误: def add (a=1,b=1) x
- 总结:在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数就是必传参数
7.2 默认参数
- 在定义函数的时候,定义的参数含有默认值,就说他是一个默认参数
7.3 不确定参数——可变参数
没有固定参数的函数,需要传递不确定参数 (不知道要传的参数名具体是什么)
def add(*args, **kwargs): pass add(1, 2, 3, name = 'dewei', age = 33)
- *args 代表: 将无参数的变量合并成元组
- **kwargs 代表将有参数与默认值的赋值语句合并成字典
7.4 参数规则
def add(a, b=1, *args, **kwargs)
- 参数的定义从左到右依次是 必传参数,默认参数,可变元组参数,可变字典参数
- 函数的参数传递非常灵活
- 必传参数与默认参数的传参多样化
8. 函数的参数类型定义
- 函数定义在 python 3.7 之后可用
- 函数不会对参数类型进行验证
# name: 参数名+冒号+类型函数
# age: 参数名+冒号+类型函数+等号+默认值
def person(name:str, age:int=33):
print(name,age)
9. 局部变量与全局变量
9.1 全局变量
- 在python脚本最上层代码块的变量
- 全局变量可以在函数内被读取使用
示例:
# coding:utf-8
name = 'dewei'
def test():
print(name)
9.2 局部变量
- 在函数体内定义的变量
- 局部变量无法在自身函数以外使用
# coding:utf-8
def test():
name = 'dewei'
print(name)
print(name)
9.3 global
功能:
- 将全局变量可以在函数体内进行修改
用法:
# coding:utf-8
name = 'dewei'
def test():
global name
name = '小杨'
test() # 改完不要忘了执行,否则输出的还是 dewei
print(name)
10. 递归函数
作用:
一个函数不停地将自己反复执行,类似于 while 循环
用法:
def test(a):
print(a)
return test(a) # 通过返回值,直接执行自身函数就达到了递归的效果
示例:
count = 0
def test():
global count
count += 1
if count != 5:
print('count条件不满足, 我要重新执行我自己!当前count是%s' % count)
return test()
else:
print('count is %s' % count)
test()
11. lambda 匿名函数
功能:
- 定义一个轻量化函数
- 即用即删除,很适合需要完成一项功能,但是此功能只在此一处使用
用法:
# 第一种方式,无参数方式
f = lambda : print('无参数方式')
f()
# 第二种方式,有参数方式
f = lambda x, y: x * y
print(f(3, 4))
Python 面向对象与异常处理机制
1. 面向对象
1.1 什么是面向对象:
- 利用 (面向)对象(属性与方法) 去进行编码的过程
- 自定义对象数据类型就是面向对象中的类 (class) 的概念
1.2 类的关键字 class
- class 来声明类,类的名称首字母大小多单词情况下每个单词首字母大写(驼峰命名)
1.3 类的定义
用法:
class Name(object):
attr = something
def func(self):
do
示例:
class Cat(object):
# 类的属性
color = 'black'
# 类的方法(函数)
def eat(self):
print('我喜欢吃鱼')
def sleep(self):
print('我要睡觉了')
cat = Cat() # 类的实例化
print(cat.color) # 通过实例化进行属性调用
cat.eat() # 通过实例化进行函数调用
1.4 类的参数 self
- self 是类函数中的必传参数,且必须放在第一个参数位置
- self 是一个对象,他代表实例化的变量自身
- self 可以直接通过点来定义一个类变量
- self 中的变量与含有 self 参数的函数可以在类中的任何一个函数内随意调用
- 非函数中定义的变量在定义的时候不用 self
1.5 类的构造函数
功能:
类中的一种默认函数, 用来将类实例化的同时, 将参数传入类中
用法:
def _init_(self, a, b):
self.a = a
self.b = b
示例:
class Like(object):
# 类的属性
age = 22
# 类的方法(函数)
def __init__(self, name):
self.name = name
def ilove(self):
return '我喜欢小刘'
like = Like(name='小杨') # 类的实例化,同时传入我的名字
print('大家好,我的名字是', like.name, like.ilove())
1.6 对象的生命周期
__开头__
结尾的类函数都是类的默认函数
2. 类中的私有函数与私有变量
2.1 什么是私有函数私有变量
- 无法被实例化后的对象调用的类中的函数与变量
- 类内部可以调用私有函数与变量
- 只希望类内部业务调用使用,不希望被使用者调用
2.2 私有函数与私有变量的定义方法
- 在变量或函数前添加
__
(2个下横线),变量或函数名后边无需添加
示例:
class Cat(object):
def __init__(self, name):
self.name = name
def run(self):
pass
def __run(self):
return f'小猫 {self.name} 开心地奔跑着'
def dump(self):
result = self.__dump() # 此处在类内调用私有函数
print(result)
def __dump(self):
return f'小猫 {self.name} 开心的跳着'
cat = Cat('羊羊羊')
# cat.__run() 实例化会报错,私有函数(方法)无法调用,有直接输出私有函数的方法,不推荐,不做展示
cat.dump() # 由 dump() 函数调用私有函数 __dump()
3. Python 中的封装
- 将不对外的私有属性或方法通过可对外使用的函数而使用(类中定义私有的,只有类内部使用,外部无法访问
- 这样做的主要原因: 保护私隐,明确区分内外
示例:
class Parent (object):
def __hello(self,data):
print(f'hello{data}')
def helloword(self):
self.__hello('world')
parent = Parent()
parent.helloword()
4. 装饰器
4.1 什么是装饰器
- 也是一种函数
- 可以接受函数作为参数
- 可以返回函数
- 接收一个函数,内部对其处理,然后返回一个新函数,动态的增强函数功能
- 将b函数在a函数中执行,在a函数中可以选择执行或不执行b函数,也可以对b函数的结果进行二次加工处理
4.2 装饰器的定义
定义:
def out(func_args): #外围函数
def inter(*args, **kwargs): # 内嵌函数
return func_args(*args, **kwargs)
return inter #外围函数返回内嵌函数
示例:
def log(func):
def wrapper():
print(f'call {func.__name__}')
func()
return wrapper
@log # 调用装饰器
def hello():
print('hello world')
hello() # 调用装饰器
4.3 装饰器的用法
- 将被调用的函数直接作为参数传入装饰器的外围函数括弧【例1】
- 将装饰器与被调用函数绑定在一起
- @ 符号 + 装饰器函数放在被调用函数的上一行,下一行创建函数只需要直接调用被执行函数即可【例2】
例 1:
def a(func):
def b(*args, **kwargs):
return func(*args, **kwargs)
return b
def c(name):
print(name)
a(c('羊羊羊'))
例 2 :
def a(func):
def b(*args, **kwargs):
return func(*args, **kwargs)
return b
@a
def c(name):
print(name)
c('羊羊羊')
5. 类的常用装饰器
5.1 classmethod 的功能
功能:
- 将类函数可以不经过实例化而直接被调用
用法:
# cls : 替代普通类函数中的 self,变为 cls,代表当前操作的是类
@classmethod
def func(cls, ...):
do
示例:
class Test_01(object):
@classmethod
def add(cls, a, b):
print(a + b)
Test_01.add(1, 2) # 无需实例化,直接调用
5.2 staticmethod 的功能
功能:
- 将类函数可以不经过实例化而直接被调用
- 被该装饰器调用的函数不许传递self或cls参数,且无法再该函数内调用其它类函数或类变量
用法:
# 函数体内无 cls 或 self 参数
@staticmethod
def func(...):
do
示例:
class Test_01(object):
@staticmethod
def add(a, b): # 无 cls 或 self 参数
print(a + b)
Test_01.add(1, 2)
5.3 property 的功能
功能:
- 将类函数的执行免去括弧,类似于调用属性( 变量 )
用法:
@property
def func(self):
do
示例:
class Test_01(object):
def __init__(self, name):
self.name = name
@property
def call_name(self):
return f'hello {self.name}'
test_01 = Test_01('小杨') # 实例化类,并传入参数
result = test_01.call_name # 使用 property 装饰器,将类函数的执行免去括弧
print(result) #
5.4 三个函数的练习
class Test_01(object):
def __init__(self, name):
self.name = name
@property
def call_name(self):
return f'hello {self.name}'
@classmethod
# cls : 替代普通类函数中的 self,变为 cls,代表当前操作的是类
def add(cls, a, b):
print(a + b)
@staticmethod
def sta_test(a, b): # 无 cls 或 self 参数
print(a + b)
# 使用 property 装饰器,将类函数的执行免去括弧
test_01 = Test_01('小杨') # 实例化类,并传入参数
result = test_01.call_name
print(result)
# 使用 classmethod 装饰器,无需实例化直接运行
Test_01.add(1, 4)
# 使用 staticmethod 装饰器,无需实例化直接运行
Test_01.sta_test(3, 4)