【python知识点】锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/132368704
出自【进步*于辰的博客】

相关博文:【python细节、经验】锦集。

注:本文可能不适合 0 python基础的博友,因为对于各类知识点,我阐述的宗旨是“阐明使用细节”,而不是基础知识。

文章目录

  • 1、特殊指令符
    • 1.1 `del xx`
  • 2、内置函数
  • 3、关于列表(`list`)
    • 3.1 切片示例
    • 3.2 方法
  • 4、关于元组(`tuple`)
  • 5、关于字典(`map`)
    • 5.1 概述
    • 5.2 方法
  • 6、关于集合(`set`)
    • 6.1 概述
    • 6.2 方法
  • 7、关于变量
    • 7.1 分类
    • 7.2 可变参数
      • 7.2.1 `*args`格式
      • 7.2.2 `**args`格式
      • 7.2.3 特殊用法
  • 8、关于`lambda`表达式
    • 8.1 特点
    • 8.1 用法1:简化函数
  • 9、关于面向对象
  • 最后

1、特殊指令符

1.1 del xx

1del list[索引]	# 删除列表元素
2del tuple	# 删除整个元组
3del map[key]	# 删除字典映射

2、内置函数

摘要参数说明返回值类型/返回值说明
list(tuple t)列表将元组转换成列表。注:不修改原元组
range(int max)序列最大值序列此方法作用很多,此处的作用是指定一个最大值,返回0 ~ max - 1的序列,常用于遍历
filter(a, b)a 是方法,即过滤条件;b 是序列序列过滤序列,需与lambda连用,示例见相关博文第4项

3、关于列表(list

参考笔记二,P25.3~5。

3.1 切片示例

  1. 例:list = [1, 2, 3, 4],则list[-3:] = [2, 3, 4]list[:3] = [1, 2, 3],故:list[-3: 3] = [2, 3]。由于[2, 3] = [2, 3, 4] 并 [1, 2, 3],因此,list[-3: 3] = list[-3:] 并 list[:3]
  2. 例;list[a: b: x],其中,a 是起始索引,b 是终止索引,x 是步长。若x > 0,则从左往右切片;否则,从右往左切片。

:实际切片内容并不一定是按照[a, b)(即 a → b)或(b, a](即 b → a)规则进行切片。由于a/b/x三者都有“正负”2种情形,因此实际的切片情况很多,我暂且没有找到规律,因此只能按照示例1的“拆分”方法进行分析。
具体方法:

1、将 [a: b: x] 拆分d成 [a: : x][: b: x];
2、计算[a: : x]:a 为起始索引,若x > 0,则向右取所有;否则,向左取所有。得到:[list[a], ...];
3、计算[: b: x]:b 为终止索引,同理,得到:[..., list[b]];
4、结果:取两者交集.

3.2 方法

摘要参数说明返回值类型/返回值说明
append(Object o)追加一个元素
extend(List it)追加列表
insert(int i, Object o)插入元素
pop(int i)返回被删除元素删除元素。若不指定,则删除最后一个元素
remove(Object o)移除匹配的第一个元素
index(Object o)索引查找匹配的第一个元素。若找不到,则报错
reverse()反转列表。相当于list[::-1]
count(Object o)int计数
sort()排序,默认升序。注:列表所有元素类型必须一致

注:

  1. 列表元素类型可混搭
  2. 切片时,若索引超出范围,不报错。

4、关于元组(tuple

参考笔记二,P33.1。

概述:

  1. 元组自创建后无法修改;
  2. 若元组只有一个元素,则末尾必须添加一个",",否则其类型就不是元组,而是此元素类型;
  3. 元组无法修改,但基本支持列表拥有的查询系列方法,如:count()index(),故元组的查询效率高于列表(元组的作用之一)。

示例:

t = (2023)
print(type(t))
t = (2023,)
print(type(t))
print(t.count(2023))
print(t.index(2023))

打印结果:
在这里插入图片描述

5、关于字典(map

参考笔记二,P33.2。

5.1 概述

  1. 添加映射时,若 key 已存在,则覆盖 value;
  2. 用“{}”表示空字典;
  3. 访问不存在的 key 时,报错;
  4. 当为不存在的 key 赋值时,添加此映射;

示例:

m = {}
print(type(m))  # 打印:<class 'dict'>
m = {"name" : 'yuchen',"year" : 2023
}
# print(m['age']) # 报错:KeyError

5.2 方法

1clear():清空字典,无返回值。

2copy():复制字典,属“浅复制”。

3fromkeys(a, b):创建字典。
注:a 是序列,b 是默认值(可不指定)。
示例:

m = {}  # 空字典l = [2, 0, 2, 3]
m = m.fromkeys(l)   # 使用列表构建字典
print(m)
m = m.fromkeys(l, 0)    # 指定所有映射的 value 为 0,即默认值
print(m)t = (2023,)
m = m.fromkeys(t)   # 使用元组构建字典
print(m)s = set([2, 0, 2, 3])
m = m.fromkeys(s)   # 使用集合构建字典
print(m)

打印结果:
在这里插入图片描述

4get(a, b):获取 value。
注:a 是 key,b 是默认值(当 key 不存在时作为返回值,可不指定)。若 key 不存在,则返回None

5keys():返回包含字典所有 key 的“列表”。
注:表面上看是列表,实则不是,用type()即可验证,在某些情况下类似列表。此方法常用于判断字典是否包含某个 key。

6values():返回包含字典所有 value 的“列表”。

7items():类似java中的map.entrySet(),常用宇遍历字典。

6、关于集合(set

参考笔记二,P33.3。

6.1 概述

  1. 无重复值;
  2. 定义集合必须使用set()方法;
  3. 构造有元素集合时,可以使用任意序列;
  4. 集合不能使用“*”或“连接”;
  5. 集合常用宇数字意义上的集合操作,如:交集&、并集|、对称差集^,列表则不行。

示例:

s = set()
print(s)
print(type(s))s1 = set((2, 0, 2, 3))
print(s1)
s2 = set(['c', 's', 'd', 'n'])
print(s2)s3 = s1 & s2    # 返回两集合相同元素的集合
print(s3)
s3 = s1 | s2    # 返回两集合所有元素合集(若有相同元素,仅保留一个)
print(s3)
s3 = s1 - s2    # 等同于 s1 - (s1 & s2),即:返回s1去除s1与s2相同元素后的集合
print(s3)
s3 = s1 ^ s2    # 等同于 (s1 - s2) | (s2 - s1)
print(s3)

打印结果:
在这里插入图片描述

6.2 方法

摘要参数说明返回值类型/返回值说明
add(Object o)追加元素
remove(Object o)移除元素。若元素不存在,报错

7、关于变量

参考笔记二,P34.8。

7.1 分类

  1. 必须参数:指方法调用时必须指定的参数;(其实就如 java 中的实参,要求个数、类型对应)
  2. 关键字参数:指方法调用时通过形参名=值的方式指定实参,故可忽略实参顺序;
  3. 默认参数:指方法定义时已指定默认值的参数,且必须定义在最后;(调用时可不指定)
  4. 可变参数:指不能在定义方法时确认参数的个数和内容(类型)所使用的参数;
  5. 组合参数。

7.2 可变参数

7.2.1 *args格式

接收“序列”,相当于 java 中的可变参数,args的类型是“元组”。

示例:

def show(*args):for e in args:print(e)# 如 java 中的”xx...“,会将一组数自动封装成数组,在此处是序列
show(2023, 'csdn')# java 中的可变参数也可这样定义实参,不过不允许直接这样初始化(也有点多此一举)
# 而在此处,尽管 [2023, 'csdn'] 是一个序列,但 args 仅将其视为一个元素,因此无法遍历(直接打印出“[2023, 'csdn']”)
show([2023, 'csdn'])# (2023, ), ('csdn',)是两个元组,最后,args 会封装成 ((2023, ), ('csdn',))
show((2023, ), ('csdn',))

打印结果:
在这里插入图片描述
改进:(为调用show([2023, 'csdn'])时,能遍历其内元素)

def show(*args):for e in args:if isinstance(e, list):for i in e:print(i)else:print(e)

打印结果:
在这里插入图片描述

7.2.2 **args格式

表示“字典”(固定),实参必须是关键字参数(也可是字典,但需要使用**标识,往下看)。

示例:

def show(**args):# 因为 args 固定为字典,因此可调用成员方法 items()for k,v in args.items():print(k, v)show(year=2023, flag='csdn')

打印结果:
在这里插入图片描述

7.2.3 特殊用法

(我暂且不知如何描述,看示例)

1、上述*args的示例也可这样改:

l = [2023, 'csdn']
show(*l)
# 或:
show(*range(10))

即指明其是一个列表,这样*args就不会将其视为一个元素。

总结:若实参是一组数,如:1, 2, 3,则*args可将其封装成元组;若实参为序列,如:{1, 2, 3}range(10),则*args会将其视为一个元素或报错(此时就需采用此特殊用法)。

2**args的实参可使用字典,上述**args的示例可这样改:

m = {'year': 2023,'flag': "csdn"
}
show(**m)

即指明其是一个字典。

注:*args**args连用,也可使用此特殊用法进行指定。不过,顺序不可调换,使用关键字参数也不行。

8、关于lambda表达式

参考笔记二,P34.10。

8.1 特点

  1. lambda 语句块只会执行一次,不存在被外部程序反复调用可能;
  2. 在某些函数必须使用函数作为参数,但是函数本身十分简单且只有一处使用。

8.1 用法1:简化函数

示例:

def calculate(x, y):return x + y, x - yt = calculate(10, 20)

lambda 改进:

f = lambda x, y: [x + y, x - y]	# 相当于方法定义
print(type(f))	# 打印:<class 'function'>
t = f(10, 20)

(冒号):左边是参数列表,右边是返回值。

9、关于面向对象

参考笔记二,P35.13。

(注:以下阐述都基于类。)

1、构造方法__init__(self)的返回值必须是None,即无返回值,(指无返回值,并不是说需要手动指定return None

2、所有方法的第1个参数都是self,代指实例,可更名;

3、在所有方法中,由self定义的变量都是成员变量;而直接定义的变量不是成员变量,仅是局部变量,其生命周期仅在函数内,在方法外定义的变量是类变量;
示例:

# 此示例中的3个 name 是3个变量,即3个定义,没有重赋值
class Platform:name = 'csdn'   # 定义类变量def __init__(self, name):self.name = 'bilibili'  # 定义成员变量self.name = name    # 为成员变量 name 重赋值# 这不是为类变量/成员变量 name 重赋值,而是定义局部变量# 因此在此示例中,在类外无法访问name = '博客园'print(Platform.name)    # 访问类变量,打印:csdn# 实例化。实例化时,由于仅定义了一个带有一个参数的构造方法,因此需要指定一个实参
p1 = Platform("开源中国")
print(p1.name)  # 访问成员变量,打印:开源中国

4、在变量前加__(双下划线)表示私有变量。在 java 中,私有成员变量的作用域为当前类,而 python 中私有实例变量(即成员变量)的作用域为所有方法(因为第2点);
示例:

class Platform:def __init__(self, name):self.__name = namedef getName(self):return self.__namep1 = Platform('csdn')
print(p1.getName()) # 打印:csdn

5、在方法前加__表示私有方法,私有方法只能在类内部调用,实例不能直接调用;(此性质与 java 相同)
示例:

class Platform:def __init__(self, name):self.__name = namedef __getName(self):return self.__namedef toString(self):print('name = ' + self.__getName())p1 = Platform('csdn')
p1.toString()   # 打印:name = csdn

最后

本文中的举例是为了方便大家理解、以及阐述相关知识点而简单举出的,不一定有实用性,也不一定有针对性,比如:集合运算&,目的是获取两集合相同元素,而第6.1项的示例中我没有刻意去定义s1s2包含了相同元素。我之所以如此:

  1. 这些细节很简单,大家在其他编程语言或课程、书本或资料上肯定或多或少接触过或完全知道,因此没必要特意举例;
  2. 本文阐述的宗旨是“阐明使用细节”,而对于其他附属知识并不一定会细致说明。

因此,一些细节需要大家自行测试或查找资料。

本文持续更新中。。。

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

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

相关文章

MyBatis入门配置及CURD实现

目录 一、MyBatis简介 1. 什么是 MyBatis ? 2. MyBatis的特性 3. 什么是持久层框架&#xff1f; 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件…

Vue2-配置脚手架、分析脚手架、render函数、ref属性、props配置项、mixin配置项、scoped样式、插件

&#x1f954;:总有一段付出了没有回报的日子 是在扎根 更多Vue知识请点击——Vue.js VUE2-Day6 配置脚手架脚手架结构render函数vue.js与vue.runtime.xxx.js的区别引入render函数为什么要引入残缺的vue呢&#xff1f; 脚手架默认配置ref属性props配置项传递数据接收数据注意点…

NLP序列标注问题,样本不均衡怎么解决?

【学而不思则罔&#xff0c;思而不学则殆】 1.问题 NLP序列标注问题&#xff0c;样本不均衡怎么解决&#xff1f; 2.解释 以命名实体识别&#xff08;NER&#xff09;为例&#xff0c;这个样本不均衡有两种解释&#xff1a; &#xff08;1&#xff09;实体间类别数量不均衡…

华为网络篇 RIP的负载均衡-29

难度2复杂度2 目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP是使用跳数&#xff08;经过路由的数量&#xff09;作为metric值的&#xff0c;当网络上存在去往目标的路由有两条以上都是相同metric时&#xff0c;就出现了流量负载均衡。…

未来网络的选择:100G光模块与400G光模块的对比

随着互联网的快速发展和数据传输需求的不断增长&#xff0c;光通信技术在网络领域中扮演着至关重要的角色。光模块是光通信系统中的核心组件之一&#xff0c;而100G光模块和400G光模块是目前应用广泛的两种主要类型。本文将对这两种光模块进行详细的区别对比。 一、传输速率 …

【周末闲谈】关于“数据库”你又知道多少?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言数据库数据库的五大特点数据库介绍数据库管理系统&a…

34.Netty源码之Netty如何处理网络请求

highlight: arduino-light 通过前面两节源码课程的学习&#xff0c;我们知道 Netty 在服务端启动时会为创建 NioServerSocketChannel&#xff0c;当客户端新连接接入时又会创建 NioSocketChannel&#xff0c;不管是服务端还是客户端 Channel&#xff0c;在创建时都会初始化自己…

Python web实战之细说 Django 的单元测试

关键词&#xff1a; Python Web 开发、Django、单元测试、测试驱动开发、TDD、测试框架、持续集成、自动化测试 大家好&#xff0c;今天&#xff0c;我将带领大家进入 Python Web 开发的新世界&#xff0c;深入探讨 Django 的单元测试。通过本文的实战案例和详细讲解&#xff…

SystemVerilog之接口详解

1.入门实例 测试平台连接到 arbiter的例子&#xff1a;包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重&#xff0c; 是轮询还是自定义 grant表示仲裁出来的是哪一个&#xff0c;也即只有0&#xff0c;1&am…

C#程序配置读写例子 - 开源研究系列文章

今天讲讲关于C#的配置文件读写的例子。 对于应用程序的配置文件&#xff0c;以前都是用的ini文件进行读写的&#xff0c;这个与现在的json类似&#xff0c;都是键值对应的&#xff0c;这次介绍的是基于XML的序列化和反序列化的读写例子。对于ini文件&#xff0c;操作系统已经提…

python采集京东商品详情页面数据,京东API接口,京东h5st签名(2023.08.20)

一、原理与分析 1、目标页面 https://item.jd.com/6515029.html 在chrome中打开&#xff0c;按f12键进入开发者模式&#xff0c;找到商品详情数据接口&#xff0c;如下&#xff1a; 2、URL链接&#xff1a; https://api.m.jd.com/?appidpc-item-soa&functionIdpc_detail…

Axios跨域请求处理

问题背景&#xff1a; vue 项目用 axios 进行请求的时候&#xff0c;总是报“Access to XMLHttpRequest at ‘http://localhost:8889/api/login’ from origin ‘http://localhost:8080……’”的错误 实际上就是前后端分离的情况下&#xff0c;发生了跨域的问题 跨域定义&…

【Linux取经路】解析环境变量,提升系统控制力

文章目录 一、进程优先级1.1 什么是优先级&#xff1f;1.2 为什么会有优先级&#xff1f;1.3 小结 二、Linux系统中的优先级2.1 查看进程优先级2.2 PRI and NI2.3 修改进程优先级2.4 进程优先级的实现原理2.5 一些名词解释 三、环境变量3.1 基本概念3.2 PATH&#xff1a;Linux系…

APSIM模型参数优化 批量模拟丨气象数据准备、物候发育和光合生产、物质分配与产量模拟、土壤水分平衡算法、土壤碳氮平衡模块、农田管理模块等

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

JDK中的Timer总结

目录 一、背景介绍二、思路&方案三、过程1.Timer关键类图2.Timer的基本用法3.结合面向对象的角度进行分析总结 四、总结五、升华 一、背景介绍 最近业务中使用了jdk中的Timer&#xff0c;通过对Timer源码的研究&#xff0c;结合对面向对象的认识&#xff0c;对Timer进行针…

pytorch 42 C#使用onnxruntime部署内置nms的yolov8模型

在进行目标检测部署时,通常需要自行编码实现对模型预测结果的解码及与预测结果的nms操作。所幸现在的各种部署框架对算子的支持更为灵活,可以在模型内实现预测结果的解码,但仍然需要自行编码实现对预测结果的nms操作。其实在onnx opset===11版本以后,其已支持将nms操作嵌入…

小程序体验版不存在 无法体验

1、权限问题&#xff1a; 1、开发者有所有权限。 2、小程序访问路径也是正确的。 该有的权限都有了。 2、解决办法&#xff1a; 打开微信公众平台&#xff0c;左侧菜单【设置】- 【第三方设置】&#xff0c;取消授权即可。

数据结构 - 语句的频度和时间复杂度

一、语句频度&#xff1a; 算法的运行时间 Σ每条语句的执行次数X该语句执行一次所需的时间每条语句的执行次数&#xff0c;也称为&#xff1a;语句的频度结合上面两点&#xff0c;可知&#xff1a;算法的运行时间 Σ每条语句的频度X该语句执行一次所需的时间 二、语句执行…

Linux内核源码分析-内存管理

Linux内核内存布局 64位Linux系统一般使用48位表示虚拟地址空间&#xff0c;45位表示物理地址。通过命令&#xff1a;cat /proc/cpuinfo。查看Linux内核位数和proc文件系统输出系统软硬件信息如下&#xff1a; x86_64架构体系内核分布情况 通过 cat /proc/meminfo 输出系统架…

论文笔记 Graph Attention Networks

2018 ICLR 1 intro 1.1. GCN的不足 无法完成inductive任务 inductive任务是指&#xff1a; 训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图上进行&#xff0c;测试阶段需要处理未知的顶点。GGN 的参数依赖于邻接矩阵A/拉普拉斯矩阵L&#xff0c;所以换了…