【python基础】第16回 周总结


目录

1.数据类型内置方法

2.垃圾回收机制和字符编码

3.文件处理

4.函数

详解

1.数据类型内置方法

1.1 数据类型简介

1.内置方法可以简单的理解成是每个数据类型自带的功能(每个人的不同特长)

2.使用数据类型的内置方法统一采用句点符   数据类型.方法名()

1.2 整形内置方法

1. 关键字  int()

2. 整型就是整数 主要用于计算 没有内置方法

3. 类型转换  int(待转换的数据)

print(type(int('123')))  # 字符串 内部是纯数字情况 可以转换print(type(int('123a321')))  # 字符串里面必须是纯数字才可以转换print(type(int('123.33')))  # 小数点也不行

4. 进制转换 

'''十进制转其他进制'''
print(bin(100))  # bin() 将十进制转二进制    0b1100100  0b是二进制数的标识print(oct(100))  # oct() 将十进制转八进制    0o144      0o是八进制数的标识print(hex(100))  # hex() 将十进制转十六进制  0x64       0x是十六进制数的标识
# 如果数字前面没有任何标识 默认就是十进制
'''其他进制转十进制'''
# 自动识别进制数
print(int(0b1100100))   # 100
print(int(0o144))       # 100
print(int(0x64))        # 100
# 人为指定进制数
print(int('0b1100100', 2))  # 100
print(int('0o144', 8))  # 100
print(int('0x64', 16))  # 100

1.3 浮点型内置方法

1. 关键字 float

2. 类型转换

print(float('123'))  # 123.0
print(type(float('123')))  # float
print(float('123a123'))
print(float('123.12'))  # 可以识别一个小数点
print(float('123.123.1.2.2.2.2.2.2'))  # 不可以

3. 针对布尔值的特殊情况

print(float(True))  # 1.0
print(float(False))  # 0.0
print(int(True))  # 1
print(int(False))  # 0

1.4 字符串内置方法

1. 关键字 str

2. 类型转换  : 兼容所有数据值

3. 需要掌握的方法

s1 = 'hello jason!'
# 1.索引取值:单个字符  支持负数
print(s1[-1])  # !
# 2.切片取值:多个字符   支持负数   切片的顺序默认从左往右
print(s1[-1:-4])  # 切片的顺序默认从左往右
print(s1[-1:-4:-1])  # !no 可以通过第三个参数的正负一 控制方向
# 3.间隔/方向
print(s1[:])  # 所有
print(s1[::2])  # 针对整个字符串 隔一个取一个
print(s1[0:5:1])  # hello  默认1可以不写
# 4.统计字符串中字符的个数  len
print(len(s1))  # print(len('hello jason!'))  12  空格也算字符
# 5.移除字符串首尾指导的字符  strip
# 6.按照指定的字符切割字符串 split
info = 'jason|123|read'
'''当字符串中出现了连续的特征符号 应该考虑使用切割操作'''
res = info.split('|')  # 切割字符串之后结果是一个列表
print(res, type(res))  # ['jason', '123', 'read'] <class 'list'>
# 7.字符串大小写相关 lower upper
s2 = 'HeLLo Big BAby 666 你过的还好吗'
print(s2.lower())  # hello big baby 666 你过的还好吗
print(s2.upper())  # HELLO BIG BABY 666 你过的还好吗
print(s2.islower())  # 判断字符串中所有的字母是否是全小写  False
print(s2.isupper())  # 判断字符串中所有的字母是否是全大写  False
print('aaa'.islower())  # True
print('AAA'.isupper())  # True
# 8.字符串的格式化输出 
name = 'jason'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
# 9.统计字符串中指定字符出现的次数 count
# 10.判断字符串的开头 startswith或者结尾 endswith
# 11.字符串的替换 replace
res = 'jason jason jason SB SB SB'
print(res.replace('jason', 'tony'))  # 从左往右全部替换
print(res.replace('jason', 'tony', 1))    # 从左往右替换指定个数
# 12.字符串的拼接  支持加号拼接 支持乘号重复
# 13.判断字符串中是否是纯数字 isdigit
# 14.查找某个字符对应的索引值
'''index查找索引 如果没有则报错'''
print(res.index('d',0,5))
'''find查找索引 如果没有则返回-1'''
print(res.find('d',0,5))  # -1
# 15.正文相关操作
res = 'my name is jason'
print(res.title())  # My Name Is Jason
print(res.capitalize())  # My name is jason

1.5 列表内置方法

1. 关键字 list

2. 类型转换  能够被for循环的数据类型都可以转换成列表

3. 方法

l1 = ['jason', 'kevin', 'oscar', 'tony']
# 1.索引取值
print(l1[-1])
# 2.切片操作
print(l1[-4:-1])
# 3.间隔/方向
print(l1[::2])
# 4.统计列表中数据值的个数
print(len(l1))  # 4
"""列表在调用内置方法之后不会产生新的值 而是修改的自身"""
l1 = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
l2 = [77, 33, 22, 44, 55, 99, 88]
# 1.统计列表中数据值的个数
print(len(l2))
'''增删改查:占据了程序的90%以上的核心操作'''
# 2.增
# 2.1尾部追加数据值append()  括号内无论写什么数据类型 都是当成一个数据值追加
# 2.2任意位置插入数据值insert()  括号内无论写什么数据类型 都是当成一个数据值插入
# 2.3 扩展列表
# new_l1 = [11, 22, 33, 44, 55]
# new_l2 = [1, 2, 3]  # [1, 2, 3, 11, 22, 33, 44, 55]
# 方式1
for i in new_l1:
    new_l2.append(i)
print(new_l2)
# 方式2
print(new_l1 + new_l2)
# 方式3(推荐使用)
new_l1.extend(new_l2)  # 括号里面必须是支持for循环的数据类型  for循环+append()
# 3.查询数据与修改数据 直接索引修改
# 4.删除数据
# 4.1 通用删除策略 del 通过索引直接修改
# 4.2 指名道姓删除remove() 括号内必须填写明确的数据值
# 4.3 先取出数据值 然后再删pop() 默认取出列表尾部数据值 然后再删 
# 5.查看数据值对于的索引值 index
# 6.统计某个数据值出现的次数 count
# 7.排序 sort() 升序 sort(reverse= Ture) 降序
# 8.翻转reverse()  
# 9.比较运算 
 > 是按照位置顺序一一比较 不同数据类型之间默认无法直接做操作

1.6 字典内置方法

1. 关键字 dict

2. 类型转换 字典很少涉及到类型转换 都是直接定义使用 K是对V的描述性性质的信息一般是字符串    K其实只要是不可变类型都可以

3. 方法

# K是对V的描述性性质的信息一般是字符串    K其实只要是不可变类型都可以
# 1.字典内k:v键值对是无序的
# 2.取值操作 get
# 3.统计字典中键值对的个数  len
# 4.修改数据  键存在则是修改
# 5.新增数据  键不存在则是新增
# 6.删除数据  del  pop  popitem(随机删除)
# 7.快速获取键 值 键值对数据   获取字典所有的k值 结果当成是列表即可
# 8.修改字典数据   键存在则是修改  键不存在则是新增  update
# 9.键存在则获取键对应的值 键不存在则设置 并返回设置的新值setdefault

1.7 元组内置方法

1. 关键字 tuple

2. 类型转换 支持for循环的数据类型都可以转元组  当元组内只有一个数据值的时候 逗号不能省略如果省略了 那么括号里面是什么数据类型就是什么数据类型
3. 索引取值
4. 统计元组内数据值的个数

5.查与改  可以查不可以改元组的索引不能改变绑定的地址

1.8 集合内置方法

1. 关键字 set

2. 类型转换  支持for循环的 并且数据必须是不可变类型

1.定义空集合需要使用关键字才可以
2.集合内数据必须是不可变类型(整型 浮点型 字符串 元组 布尔值)

3. 去重 元组会自动去重

4. 模拟两个的好友集合

f1 = {'jason', 'tony', 'oscar', 'jerry'}
f2 = {'kevin', 'jerry', 'jason', 'lili'}
# 1.求f1和f2的共同好友
print(f1 & f2)  # {'jason', 'jerry'}
# 2.求f1/f2独有好友
print(f1 - f2)  # {'oscar', 'tony'}
print(f2 - f1)  # {'lili', 'kevin'}
# 3.求f1和f2所有的好友
print(f1 | f2)  # {'jason', 'kevin', 'lili', 'oscar', 'jerry', 'tony'}
# 4.求f1和f2各自独有的好友(排除共同好友)
print(f1 ^ f2)  # {'kevin', 'lili', 'tony', 'oscar'}
# 5.父集 子集
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {3, 2, 1}
print(s1 > s2)  # s1是否是s2的父集  s2是不是s1的子集
print(s1 < s2)

1.9 可变与不可变类型

为什么字符串调用内置方法是产生新的值  列表调用内置方法是改变自身

1. 可变类型 list 值改变(内置方法) 内存地址可以不变 

2. 不可变类型 str  int  float 值改变(内置方法) 内存地址肯定变

2.垃圾回收机制和字符编码

2.1 垃圾回收机制

1. 引用计数 

当数据值身上的引用计数不为0表示该数据值还有用 不会被删
当数据值身上的引用计数为0则会被垃圾回收机制回收

2. 标记清除

专门用于解决循环引用的问题 将内存中程序产生的所有数据值全部检查一遍
是否存在循环引用打上标记 之后一次性清除

3. 分代回收

标记清除每隔一段时间就需要将所有的数据排查一遍 资源消耗过大
为了减轻垃圾回收机制的资源损耗 开发了三代管理,越往下检测的频率越低!!!

2.2 字符编码

1. 简介 

只有文本文件才有字符编码的概念

计算机内部存取数据的本质>>>:二进制  计算机只认识0和1 存在一个人类字符与数字的转换关系

转换关系不能随便更改 应该有统一的标准,字符编码表>>>:记录了人类的字符与数字的对应关系

2. 发展史

一家独大:

计算机是有美国人发明的 美国人需要让计算机识别英文字符,英文所有的字符加起来不超过127个(2的七次方) 但是美国人考虑到后续可能出现新的字符所以加了一位以备不时之需(2的八次方),ASCII码:内部只记录了英文字符与数字的对应关系

群雄割据:

中国 需要让计算机识别中文 需要开发一套中文的编码表,GBK码:内部记录了中文字符、英文字符与数字的对应关系 例 韩国 Euc_Kr,日本 shift_JIS

天下一统:

万国码(unicode):兼容万国字符,所有的字符全部使用2bytes起步存储
utf家族(针对unicode的优化版本)>>>:utf8,内存使用unicode 硬盘使用utf8
英文还是采用1bytes,其他统一采用3bytes

3. 编码实操

解决乱码问题 :

当初以什么编码存的就以什么编码解

编码与解码:

编码(人类的字符>>>计算机的字符),将人类的字符按照指定的编码转换成计算机可以识别的数字

解码(计算机的字符>>>人类的字符),将计算机能够识别的数字按照指定的编码转成人类可以读懂的字符

解释器层面:

python2默认的编码是ASCII码
1. 文件头  # coding:utf8
2. 定义字符串  需要在字符串的前面加u
ps:为什么要这么做 因为木有办法 是补救措施   python3默认的编码是utf8码

3.文件处理

3.1 文件简介

1. 文件操作:

通过编写代码自动操作文件读写

2. 什么是文件:

双击文件图标是从硬盘加载数据到内存,写文件之后保存其实就是将内存中的数据刷到硬盘,文件其实是操作系统暴露给用户操作计算机硬盘的快捷方式之一

3. 如何操作代码:

open(文件路径,读写模式,字符编码)

方式1
f = open()

f.close()

方式2

with open() as 变量名:

子代码运行结束之后自动调用close()方法

4. 针对文件路径需要注意 :

可能存在特殊含义(字母与撬棍的组合)在字符串的前面加字母r即可取消特殊含义

3.2 文件的读写模式

1. r” 在字符串前面加r 为了取消撬棍与字母的组合产生特殊含义,尤其是在填写文件路劲的时候推荐加上r

2. with语法支持一次性打开多个文件

3. 补全python语法 但是不执行任何操作,pass 推荐使用,… 不推荐使用

4. 通常情况下英语单词的结尾如果加上了able表示具备该单词描述的能力

5. r    只读模式 默认的模式

使用该模式打开的文件只能读取内容 不能做其他操作(写)

文件路径不存在: r模式直接报错,文件路径存在: r模式会打开文件等待读取文件内容

6. w   只写模式

使用该模式打开的文件只能写内容 不能做其他操作(读)

文件路径不存在: w模式会自动创建该文件,文件路径存在: w模式会先清空该文件内容 之后等待填写新内容

7. a   只追加模式

使用该模式打开的文件默认是在末尾追加新的内容 不能做其他操作(读)

 文件路径不存在: a模式会自动创建该文件,文件路径存在: a模式不会先清空该文件内容 只在在文件末尾等待填写新内容

3.3 文件的操作模式

1. t   文本模式

文件操作的默认模式  r    rt ,   w    wt,   a    at

只能操作文本文件,必须指定encoding参数,读写都是以字符串为单位

2. b   二进制模式

rb wb ab  必须自己指定 不能省略

能够操作所有类型的文件,不需要指定encoding参数,读写都是以bytes为单位

3.4 文件操作的方法

1. read() 一次性读取文件内容并且光标会停留在文件末尾 继续读则为空
“””当文件数据较大的时候 不推荐一次性读取”””
for line in f:
print(line) 文件对象支持for循环一次只读一行
2. readline() 一次只读一行内容
3. readlines() 按照行的方式读取所有的内容并组织成列表返回
4. readable() 判断当前文件是否可读
5. writable() 判断当前文件是否可写
6. write() 填写文件内容
7. writelines() 支持填写容器类型(内部可以存放多个数据值的数据类型)多个数据值
8. flush() 将内存中的文件数据立刻刷到硬盘(主动按ctrl+s)

3.5 文件光标的移动

1. 在文本模式下read括号内的数字表示读取几个字符,在二进制模式下read括号内的数字表示读取几个字节(英文一个字节 中文三个字节)

2. tell() 获取光标移动的字节数

3. seek(offset,whence)     offset 控制光标移动的位移量(字节)  whence 模式

0 基于文件开头移动多少字节
1 基于光标当前所在位置移动多少字节
2 基于文件末尾移动多少字节
1和2只能在二进制模式下使用 0无所谓

3.6 文件数据的修改

1. 机械硬盘存储数据的原理

数据的修改 其实是覆盖写,数据的删除 占有态自由态

2. 代码修改文件的方式

覆盖写:先读取文件内容到内存 在内存中完成修改 之后w模式打开该文件写入

优点:硬盘只占用一块空间
缺点:数据量较大的时候会造成内存溢出

重命名:先读取文件内容到内存 在内存中完成修改 之后保存到另外一个文件中,再将原文件删除 将新的文件重命名为原文件

优点:不会造成内存溢出
缺点:有那么一段时间需要占用硬盘两个地方的空间(可能) 也可能是在内存中创建没有刷到硬盘

4.函数

4.1 函数简介

1. 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数必须要先定义 之后才能使用。

没有函数(没有工具),每次使用某个工具的时候都需要现场制作
有函数(有工具),提前准备好工具 用的时候直接使用即可

2. 函数的定义(提前准备工具的过程)

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()

def my_func():
pass
函数的使用(开始选择工具并使用)
my_func() 使用函数 我们更加习惯说成 调用函数 函数调用

4.2 函数的语法结构

def 函数名(参数1,参数2):
    '''函数注释'''
    函数体代码
    return 返回值

1. def
是定义函数的关键字
2. 函数名
与变量名的命名一致 尽量做到见面知意
3. 括号
在定义函数的时候函数名后面必须跟括号
4. 参数
定义函数括号内可以写参数(个数不固定) 也可以不写参数,用于接收外界传递给函数体代码内部的数据
5. 函数注释
类似于说明书 用于介绍函数的主题功能和具体用法
6. 函数体代码
整个函数最核心的区域(逻辑代码)
7. return
控制函数的返回值,调用函数之后返回值如何理解,使用函数之后有没有相应的反馈!!!

4.3 函数的定义与调用(函数名加括号执行优先级最高(定义阶段除外))

1.函数必须先定义后使用,定义函数的代码必须要在调用函数的代码之前先运行即可
2.定义函数使用def关键字 调用函数使用函数名加括号(可能需要添加额外的参数)
3.函数在定义阶段只检测函数体代码语法 不执行函数体代码,只有在调用阶段才会真正的执行函数体代码
4.函数名到底是什么东西:函数名绑定的是一块内存地址 里面存放了函数体代码,要想运行该代码 就需要调用函数>>>:函数名加括号

4.4 函数的分类

1. 内置函数  解释器提前帮你定义好的函数 用户可以直接调用   如len()

内置函数可以直接调用,但是数据类型的内置方法(函数)必须使用数据类型点的方式才可以调用,相当于是数据类型独有的一些内置方法

2. 自定义函数

空函数:

函数体代码使用pass顶替 暂时没有任何功能,主要用于前期的项目搭建 提示主要功能

无参函数:

函数定义阶段括号内没有填写参数,无参函数直接函数名加括号即可调用

有参函数:

函数定义阶段括号内填写参数,有参函数调用需要函数名加括号并且给数据值

4.5 函数的返回值

1. 返回值就是调用函数之后产生的结果 可有可无,获取函数返回值的方式是固定的,变量名 = 函数(),上述方式有则获取 没有则默认接收None

2. 函数体代码没有return关键字:默认返回None

3. 函数体代码有return关键字:后面不写 也返回None

4. 函数体代码有return关键字:return后面写什么就返回什么(如果是数据值则直接返回 如果是变量则需要找到对应的数据值返回)

5. 函数体代码有return关键字并且后面写了多个数据值(名字) 逗号隔开:默认情况下回自动组织成元组返回

6. 函数体代码遇到return关键字会立刻结束函数体代码的运行

4.6 函数的参数

1. 参数有两大类

形式参数: 函数在定义阶段括号内填写的参数 简称为’形参’

实际参数:函数在调用阶段括号内填写的参数 简称为’实参’

形参与实参关系:形参相当于是变量名,实参相当于是数据值,在函数调用阶段形参会临时与实参进行绑定 函数运行结束立刻解除,动态绑定 动态解除

2. 位置参数

位置形参:在函数定义阶段括号内从左往右依次填写的变量名称之为位置形参

位置实参:在函数调用阶段括号内从左往右依次填写的数据值称之为位置实参

实参可以是数据值也可以是绑定了数据值的变量名,给位置形参传值得时候必须个数一致 多一个不行 少一个也不行

3. 关键字实参

在函数调用阶段括号内以什么等于什么的形式传值称之为关键字实参,指名道姓的给形参传值(打破了位置的限制),位置实参必须在关键字实参的前面,无论是形参还是实参 都遵循短的(简单)在前面 长的(复杂)在后面,同一个形参在一次调用中只能传一次值

4. 默认值参数

在函数定义阶段括号内以什么等于什么的形式填写的形参称之为默认值形参

在函数定义阶段就给形参绑定值 后续调用阶段就可以不传,调用阶段不传值就使用默认的 传了就用传了的,简单的在左边 复杂的在右边

5. 可变长参数

可以打破形参与实参的个数限制 随意传值   * 和 **可以连用

*在形参中的作用  接收多余的位置参数并组织成元组的形式赋值给*后面的变量名

**在形参中的作用 接收多余的关键字参数并组织成字典的形式赋值给**后面的变量名

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/272816.html

(0)
上一篇 2022年7月9日
下一篇 2022年7月9日

相关推荐

发表回复

登录后才能评论