Python基础核心知识点(建议收藏再用)

news2024/9/29 1:28:07

目录

  • 一、python入门day1-day24
    • day01-03 编程语言
    • day04 变量
    • day05 垃圾回收机制(GC机制)
      • 1 引用计数
      • 2 标记清除
      • 3 分代回收
    • day05 程序交互与基本运算符
    • day06 可变不可变类型
    • day07 流程控制
      • 1 赋值 =
      • 2 浅拷贝 copy
      • 3 深拷贝 deepcopy
    • day08-10 基本数据类型
      • 1 字符串
      • 2 列表
      • 3 元组
      • 4 字典
      • 5 集合
      • 6 基本数据类型总结
    • day10 字符编码
      • 1 ascii表
      • 2 GBK(中国),Shift_JIS(日本)等等
      • 3 unicode
      • 4 utf-8
    • day11-12 文件操作
      • 1 读相关操作:
      • 2 写相关操作:
      • 3 文件高级操作:
    • day13-14 函数基础
    • day15 名称空间和作用域
      • 1 命名关键字参数:
      • 2 名称空间的存活时间
    • day16 闭包函数
    • day17 装饰器
      • 修正装饰器:
    • day18 迭代器+生成器
      • 1 迭代器
      • 2 生成器
    • day19 生成式
      • 1 三元表达式
      • 2 生成式
        • 2.1 列表生成式
        • 2.2 字典生成式
        • 2.3 集合生成式
        • 2.4 生成器表达式
    • day20 匿名函数
      • 1 lambda使用
      • 2 lambda与内置函数的应用
      • 3 map
      • 4 reduce
      • 5 filter
    • day21模块(略)
    • day22-24 常用模块
      • 1 time模块
      • 2 datetime模块
      • 3 random模块
      • 4 os
      • 5 sys模块
      • 6 shutil
      • 7 json&pickle
      • 8 hashlib
      • 9 logging(略)
      • 10 re(略)
        在这里插入图片描述

一、python入门day1-day24

day01-03 编程语言

python是一种强类型的解释型语言

day04 变量

变量名不能以数字开头

小整数池的范围[-5,256],pycharm里这个范围非常大

这是为了优化内存的合理安排

指向相同数字的变量名id相同

day05 垃圾回收机制(GC机制)

为了解决没有被引用的数据(垃圾)大量占用内存导致程序崩溃

1 引用计数

a = 10 表示10被a引用了1次,a = 20 表示a和10断开链接,a与20相连接20的引用计数为1,10的引用计数为0(垃圾)

存在的问题:循环引用

l1 = ['xxx']
l2 = ['yyy']
l1.append(l2)
l2.append(l1)
# l1与l2循环引用了
# 此时['xxx']被l1引用了1次,被['yyy']引用了一次,引用计数为2
# 此时['yyy']被l1引用了1次,被['xxx']引用了一次,引用计数为2

del l1
del l2
# 按照常规['xxx']['yyy']此时的引用计数为0要被清除,但是由于循环引用的问题,他们俩彼此互相引用导致引用计数失效

2 标记清除

标记清除是当内存即将被程序占满的时候,把程序停下来,进行标记清除

标记清除分为两步:

  • 标记
    • 遍历所有的GC Roots对象(栈区内所有的名字或者线程),将所有可以被直接或者间接访问到的堆区对象标记存活
  • 清除
    • 遍历堆区所有对象,没有被标记的就清除。

刚刚循环引用的地方,堆区的两个列表虽然互相引用,但是他们没有被栈区的任何对象直接或者间接访问,所以没有被标记,就被清除了。

3 分代回收

分代回收解决了引用计数的第二个问题,效率

工作原理:根据栈区中名字的使用频率为他们划分代,不同代的名字扫描频率不同。

day05 程序交互与基本运算符

/ 除,显示小数点

// 取整除,不显示小数点

解压赋值

num = [1,2,3,4]

# 全部解压
a,b,c,d = num
>>> a=1 b=2 c=3 d=4

# 部分解压
a,b,*_=num
>>> a=1 b=2

day06 可变不可变类型

可变类型:列表,字典(key:不可变类型,value:任意类型)

不可变类型:整形,浮点型,字符串,bool

day07 流程控制

深浅拷贝

1 赋值 =
l1 = [1,2,[3,4]]
l2 = l1
# 这时候l1 就是l2,id相同,对l1内部的可变类型不可变类型的修改都会影响l2

2 浅拷贝 copy
l1 = [1,2,[3,4]]
l2 = l1.copy()
# 把l1内部的第一层内存地址都copy给l2,l1和l2是两个id不同的列表
# 内部的可变类型其实是同一个,所以会同时修改
# 修改l1内部的不可变类型,l2不会跟着变
# 修改l1内部的可变类型,l2也会变

3 深拷贝 deepcopy
import copy 
l1 = [1,2,[3,4]]
l2 = copy.deepcopy(l1)
# 把l1内部的第一层内存地址都copy给l2,l1和l2是两个id不同的列表
# 不同的是,可变类型会在内存中复制一份,所以修改可变类型其实是不同的

这里注意的点就是可变类型的修改和不可变类型修改的区别

不可变类型直接会断开和原数据的链接,重新链接新数据

可变类型则是在原数据上进行修改

day08-10 基本数据类型

1 字符串
  • strip 去掉左右两边指定字符,默认空格(扩展:rsrip,lsrip)

  • split 从左到右以指定字符切割,默认空格,可以指定次数,默认全部(扩展rsplit,从右到左以指定字符切割)

  • lower 全大写,upper 全小写

  • srartswith 以什么为开头,endwith 以什么为结尾

  • ','join('hz') # 分隔字符串
    >>> h,z
    
    
  • replace 替换字符

  • isdigit 判断是否纯数字

  • find 查找是否有指定字符有则返回索引,无则返回-1

  • index查找是否有指定字符,有则返回索引,无则报错

  • count 统计赐重复出现的个数

2 列表
  • append 追加元素

  • extend 追加可迭代对象,会自动把可迭代对象循环添加,列表会循环添加key

  • insert 插入

  • del 常规删除,没有返回值

    • x = ['aa','bb']
      del x[0]
      
      
  • pop 索引删除,不写默认删除最后一个,返回值为删除的元素

  • remove 指名道姓删除,返回值为None

  • count 统计指定元素出现次数

  • index 查找指定元素索引

  • clear 清空索引

  • reverse 反转列表

  • sort 排序

3 元组

看做是不可修改的列表

注意:元组内必须加逗号,如果一个或者没有元素的时候元组不加逗号会看成数学的括号

  • index 查找指定元素索引
  • count 统计指定元素出现次数
4 字典
  • get 取值,和索引取的区别是get取不到返回None,索引取不到报错
  • pop 删除,返回值为key
  • popitem 随机删除,删除的键值对以(key,value)的形式返回
  • update 更新,存在则修改,不存在则新增
  • setdefault 新增,key不存在则新增,key存在则返回原来的value值

注意

python3.5之后的字典是有序字典,因为更新之后优化了内部字典的存值方式,把原来的二维数组分成了现在一个一维数组+一个二维数组,但是原本创建一个字典就会创建8个位置,现在是创建一个字典生成一个位置

5 集合

可以把可变类型转化成集合在转回来可以去重,但是这种去重是无序的

  • 关系运算
    • & 交集 共有的
    • | 合集 融合去重
    • — 差集 某个集合单有的
    • ^ 对称差集 两个集合单独有的的合集
    • > 父子集 判断是否包含
  • discard 删除,存在则删除,不存在不变化
  • remove 删除,存在则删除,不存在则报错
  • update 更新,括号内放集合,会自动与元集合取合集
  • pop 删除指定元素,并返回,不写删除第一个
  • add 添加元素,只能添加不可变类型
6 基本数据类型总结

不包含集合

  • 按照存值个数区分
    • 只能存一个值:数字,字符串
    • 可以存多个值:字典,列表,元组
  • 按访问方式区分
    • 直接访问:数字
    • 顺序访问/索引访问:字符串,列表,元组
    • key访问:字典
  • 可变不可变区分
    • 可变:列表,字典,集合
    • 不可变:数字,元组,字符串

day10 字符编码

1 ascii表

只有英文字符与数字的一一对应关系

一个英文字符对应一个字节(bytes),一个字节等于8个bit,8个bit最多包含256个数字

2 GBK(中国),Shift_JIS(日本)等等

只有对应国家的文字和英文字符与数字的一一对应关系

2字节代表一个汉字

3 unicode

此时只能转换成对应字符编码的二进制,当出现unicode的时候开始统一

所有存在的文字都有与数字的一一对应关系,而传统的GBK等字符编码也能在unicode内找到对应关系

4 utf-8

当我们出现要输入多国语言的时候,unicode就会显得很臃肿

utf-8会显得更灵活

utf-8是针对unicode的可变长度字符编码,一个英文字符占一个bytes,一个汉字占3个,生僻字占更多

day11-12 文件操作

with 上下文资源管理,会自动帮我们在次级代码结束后关闭文件

显示模式:t文本模式(默认),b二进制

操作模式:r只读(默认),w只写,a只追加,+全都能读能写

1 读相关操作:
  • readline 一次读一行
  • readlines 把文件内容按照换行符为分隔返回列表
  • read 读取全部内容
2 写相关操作:
  • write 写入全部内容
  • writelines 是readlines的反操作

flsh 刷新

3 文件高级操作:

f.seek(n,模式) n代表移动的字节数

  • 0模式,参照物是文件的开头
  • 1模式,参照物是光标当前所在位置
  • 2模式,参照物是文件末尾,n为负数倒着移动
  • f.tell()得到当前光标所在位置

day13-14 函数基础

函数的返回值如果是多个元素,会自动放在一个元组内

day15 名称空间和作用域

1 命名关键字参数:

在传参时,*后面的都是命名关键字参数

特点是必须要以关键字传参方式传

2 名称空间的存活时间
  • 内置名称空间,解释器启动则存活,解释器关闭则销毁
  • 全局名称空间,文件执行则存活,文件关闭则销毁
  • 局部名称空间,调用函数时存活,调用完毕后销毁

day16 闭包函数

定义:是内嵌函数,引用了外部名称空间的名字

day17 装饰器

定义:给其他函数添加额外功能的工具

开放封闭原则:对扩展功能开放,对修改内部代码封闭(多处引用,修改可能会导致错乱)

无参装饰器只要两层函数,调用装饰器的时候不能加括号

有参装饰器需要在无参装饰器外面再加一层函数用于接收参数

修正装饰器:

functools模块下提供的一个装饰器,可以让我们在使用装饰器的时候让原函数看起来还和原来一样

from functools import wraps
def timer(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('run time is %s' %(stop_time-start_time))
        return res
    return wrapper

用print(help(func))来判断是否和原函数一致

day18 迭代器+生成器

1 迭代器

可迭代对象:内置有__iter__方法的对象

可迭代对象转换成迭代器对象:使用__iter__方法

迭代器对象:内置有__iter____next__方法的对象

可迭代对象:列表,字符串,字典,元组,集合,文件对象

迭代器对象:文件对象

迭代器的优点:

  • 为序列和非序列类型提供了一种统一的取值方式
  • 惰性计算,同一时间只存在一个数据,不会影响内存,其他数据类型存就是整体存

迭代器的缺点:

  • 除非取完整个迭代器,不然不知道迭代器长度
  • 无法控制取值,永远只能取下一个,如果要重新开始只能重新定义一个迭代器对象
2 生成器

生成器就是自定义迭代器,有yeild关键字的函数调用不会执行,会返回一个生成器,通过yeild关键字在指定位置挂起函数,通过__next__方法来继续执行函数直到下一次挂起或者return,yeild可以接受参数,也可以和return一样返回参数。

day19 生成式

1 三元表达式
条件成立时运行的代码 if 条件 else 条件不成立时运行的代码

2 生成式
2.1 列表生成式
l = ["a","b","c2","adsa","z"]
#需求:把列表内长度大于1的值添加到新列表new_l中
new_l = [i for i in l if len(i)>1]

2.2 字典生成式
d = {"a":1,"b":2,"c":3} # 这个d只要是个可迭代对象即可
#生成一个新的字典,key是d中的所有key,value为none
new_d = {key:None for key in d }

2.3 集合生成式
# 生成一个包含数字1-9的集合
s ={i for i in range(1,10)}

2.4 生成器表达式
g = (i for i in range(10) if i >3)

day20 匿名函数

1 lambda使用
lambda 参数1,参数2... : 返回值

2 lambda与内置函数的应用
dict1 = {"hz":10011,"lxt":1234,"hzxc":101}
res = max(dict1,key=lambda k:dict1[k])
print(res)

3 map
# 映射:把一个可迭代对象的每一个值拿出来作为函数的参数运行一次,把得到的值合并起来生成一个迭代器
l = [1,2,3,4]
res = map(lambda x:x**2,l)

4 reduce
#reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值
from functools import  reduce
l = [1,2,3,4]
res = reduce(lambda x,y:x+y,l,1)
>>> 11
# 如果有初始值就会把初始值作为第一个参数传入,然后取出可迭代对象的第一个值作为第二个参数传入,得到的返回值作为下一次函数运行时的x,再把可迭代对象的第二个参数传入,一直调用函数直到可迭代对象循环结束

5 filter
#过滤列表l
l = [1,2,3,4]
res = filter(lambda x:x>3,l)
#filter会迭代列表l把得到的值传给匿名函数,如果得到结果为真,则过滤出该元素,得到一个迭代器
res >>> 4

day21模块(略)

day22-24 常用模块

1 time模块
  • time.time() 时间戳:从1970年到现在的秒数
  • time.strftime() 格式化时间
  • time.locatime() 结构化时间(共9个元素)

注意:结构化时间可以和时间戳互相转换,结构化时间也可以和格式化时间互相转换

2 datetime模块

datetime.datatime.now()获取当前时间,精确到毫秒,格式化时间

3 random模块
  • random.random() 取0到1之间的小数

  • random.randint(1,3) 取大于等于1,小于等于3的整数

  • random.randrange(1,3) 取大于等于1,小于3的整数

  • random.choice([1,2,3,4,5,6]) 列表或元组内部随机取一个元素

  • random.sample([1,2,3,4,5,6],n) 列表或元组内部随机取n个元素组合成列表

  • random.uniform(1,3) 取大于1小于3的小数

  • l1 = [1,2,3,4,5]
    random.shuffle(l1)
    # 把一个列表打乱
    
    
4 os
  • os.path.getsize(‘文件路径’) 计算该文件大小
  • os.path.dirname/basename(‘文件路径’) 获得该文件的父级目录/获得该文件的文件名
  • os.path.isfile(r’文件路径’) 是否是一个存在的文件,返回布尔值
  • os.path.isdir(r’文件路径’) 是否是一个存在的目录,返回布尔值
  • os.path.abspath(__file__) 获取当前文件路径
  • os.path.dirname(‘文件路径’) 获取当前文件路径的父级路径
  • os.mkdir(‘dirname’) 生成单级目录;相当于shell中mkdir dirname
  • os.path.exists(‘文件路径’) 如果path存在,返回True;如果path不存在,返回False
5 sys模块

sys.path.append(‘文件路径’) 给环境变量列表添加一个路径

通常用于解决跨文件导包的问题

6 shutil

用于拷贝文件

  • shutil.copy(文件1,文件2) 拷贝文件和权限
  • shutil.copy2(文件1,文件2) 拷贝文件和状态信息
7 json&pickle
  • json.loads(‘数据’) 序列化
  • json.dumps(‘数据’) 反序列化
  • pickle.loads(‘数据’) 序列化
  • pickle.dumps(‘数据’) 反序列化

两者的区别:json序列化成json数据可以供所有语言反序列化,pickle转化成pickle格式只能供python反序列化

8 hashlib

hash算法的模块

hash值的特点:

  • 只要传的值一样,用同样的hash算法得到的hash值必定一样
    • 可用于传输密码和验证文件的完整性
  • 不能由hash值反解成原来的内容
  • 只要hash算法不变,无论检验的内容由多大,hash值都是定长

基本操作:

import hashlib
pwd = 123456789
# 实例化md5对象,可以传任意参数,参数会跟着数据一起加密简称 加盐
m = hashlib.md5('盐')
m.update(pwd.encode('utf-8'))
pwd_md5 = m.hexdigest()

最后这里给大家免费分享一份Python学习资料,包含了视频、源码、课件,希望能够帮助到那些不满现状,想提示自己却又没用方向的朋友,也可以和我一起来交流呀!

编辑资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1caf6cc3f64c43b2be373713c7b101e5.pn
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES数据类型学习之keyword和text以及查询条件match和term

es(4)—查询条件match和term_es match term-CSDN博客 参考文章如上。开始学习 1.text和keyword的学习 直接上官网Text type family | Elasticsearch Guide [7.17] | Elastic Text type family The text family includes the following field types: …

默克索引轻松搞定,快速查找!

在化学、药学和生物科学领域,有一部被广泛认可的权威工具书——《默克索引》(Merck Index)。自1889年首次出版以来有130多年的历史,《默克索引》一直被视为化学品、药物和生物制品的关键物理、药理和历史信息的最权威、最可靠的来…

Ubuntu22.04安装NVIDIA Driver和CUDA

Ubuntu22.04安装NVIDIA Driver和CUDA 1.安装NVIDIA Driver(1).卸载Ubuntu自带的驱动程序:(2).禁用nouveau:(3).安装相应的NVIDIA Driver: 2.安装CUDA(1).下载并安装CUDA:(2).配置环境变量: 本文记录了在 "Ubuntu22.04"上安装 "NVIDIA D…

百度关掉Ai智能回答(保姆级技术文,解决过程完整记录)

随着AI时代到来,百度也是不肯落于人后,在其搜索页面推出了AI自动回答。点到这里的你想必正因此懊恼,你说它怎么切入不好,非得搞个东西在那一直跳,顶着下面的内容哐哐直跳,你想好好浏览内容还得等它跳消停了…

C++(week15): C++提高:(四)并发服务器架构模型

文章目录 一、五种网络IO模型1.数据传输过程2.两组重要概念3.五种网络IO模型(1)阻塞式IO(2)非阻塞式IO(3)IO多路复用(4)信号驱动IO(5)异步IO 4.五种网络IO模型的对比5.举例说明 二、并发服务器模型1.循环式迭代式模式2.并发式服务器3.prefork服务器4.反应式服务器 (Reactor)5.反…

协同过滤推荐算法(包括传统协同过滤、矩阵分解、NeuralCF)

一、什么是协同过滤推荐算法 传统的协同过滤(Collaborative Filtering, CF)是一种推荐系统技术,它基于用户的历史行为数据来预测用户对未评分项目的潜在兴趣。 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出…

IPD如何通过数字化项目管理平台落地实施?

随着市场竞争的日益激烈,企业对于产品研发的效率和质量逐渐提高,越来越多的企业关注到IPD(Integrated Product Development),希望参考IPD体系的方法理念和实践经验,从而帮助企业快速响应市场变化、缩短产品开发周期、提升产品开发…

step9:设置软件初始状态获取时不发送配置指令

文章目录 文章介绍问题描述效果图 解决办法下拉框控件ComboBox切换开关组件Switch数值微调框控件SpinBox 文章介绍 问题描述 虚拟端口(硬件)发送信号给客户端电脑,会设置此时硬件的各种基础参数, 客户端软件被设置基础参数之后&a…

计算机视觉——凸包计算

现在有一大堆点,然后你要找出一个可以围住这些点且面积最小的凸多边形,这个凸多边形称为凸包。 显而易见,如果要面积最小,那凸包的顶点势必得是这一大堆点的几个点,你也可以想成是用一条橡皮筋把这些点圈起来。 先把各…

什么是云原生?(一)

1. 前言 停下手头的工作,让你的同事定义“云原生”一词。你很可能会得到几个不同的答案。 1.1 让我们从一个简单的定义开始: 云原生架构和技术是一种设计、构建和操作在云中构建并充分利用云计算模型的工作负载的方法。 1.2 云原生计算基金会给出了官方…

easyexcel使用教程--导入导出简单案例

java中操作excel的库是poi,但是poi有很多问题,使用复杂,内存占用大等,阿里开源了一个操作excel的库叫easyexcel,它基于poi做了很多优化,平时读写excel建议使用这个库 文档地址: 关于Easyexcel | Easy Excel 官网 写入excel 在…

操作无法完成错误0x000006ba?教你几种全面解析与解决方案指南

错误代码0x000006ba通常与 Windows 操作系统中的远程过程调用(RPC)服务有关。当你在尝试执行某些操作,如连接到网络共享、运行某些网络服务或使用依赖于 RPC 的应用程序时,可能会遇到这个错误。接下来就和大家聊聊操作无法完成错误…

“揭秘CentosChina爬虫项目:掌握Scrapy框架的必备技巧与数据库设计“

Centoschina 项目要求 爬取centoschina_cn的所有问题,包括文章标题和内容 数据库表设计 库表设计: 数据展示: 项目亮点 低耦合,高内聚。 爬虫专有settings custom_settings custom_settings_for_centoschina_cncustom_settin…

鸿蒙(API 12 Beta2版)媒体开发【使用OHAudio开发音频播放功能(C/C++)】

OHAudio是系统在API version 10中引入的一套C API,此API在设计上实现归一,同时支持普通音频通路和低时延通路。仅支持PCM格式,适用于依赖Native层实现音频输出功能的场景。 使用入门 开发者要使用OHAudio提供的播放或者录制能力&#xff0c…

根据 IP 地址配置子网示例(下挂 hub 接不同 vlan 终端)

我们一般根据端口配置子网比较简单,但是如果换接口,就又要到交换机上重新配置端口所属 vlan 了,紧急情况下,还是比较耽误时间的。但如果根据IP地址配置 vlan,则可以插在交换机上任意端口,排障时比较节省时间…

部分PC制造商不会帮助英特尔第13/14代酷睿延保 对用户来说可能是个问题

早前英特尔已经宣布大部分第 13/14 代酷睿桌面处理器将可以获得延长保修服务,即后续使用出现非人为损坏的问题后,用户都可以联系英特尔换一颗新处理器。然而英特尔承担责任不代表对用户来说就高枕无忧,例如只有盒装版处理器才能直接联系英特尔…

MySQL数据库分区

文章目录 1. 分区的基本概念2. 分区的类型3. 在 MySQL 中实现分区3.1 创建分区表3.2 插入数据3.3 查询数据3.4 修改分区3.5 查看分区信息 4. 具体示例4.1 范围分区 (Range Partitioning)4.2 列表分区 (List Partitioning)4.3 哈希分区 (Hash Partitioning)4.4 键分区 (Key Part…

Win32注册表操作

注册表的概念 注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…

【Redis 进阶】Redis 典型应用 —— 分布式锁

一、什么是分布式锁 在一个分布式的系统中,也会涉及到多个节点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制, 避免出现类似于 “线程安全” 的问题。 而 Java 的 synchronized 或者 C 的 std::mutex,这样的锁都是只能在当前进程…

Embedding技术之Word Embedding

Word Embedding是什么? Word Embedding——词嵌入是将单词映射为数值向量,以捕捉单词间的语义和句法关系,为自然语言处理任务提供有效的特征表示。——自然语言处理——Word2Vec、GloVe、FastText。 Word Embedding属于静态向量&#xff0c…