python 之数据类型(四)

news/2024/4/18 20:29:35/文章来源:https://blog.csdn.net/weixin_43482612/article/details/130325644

1、字符串(String)

使用双引号或者单引号中的数据,就是字符串
注:python中使用三引号时允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其它特殊符号

a='''
a
c
g'''
print(a)运行结果:
a
c
g

1、下标

所谓‘下标’,就是编号,就好比超市中存储柜的编号,通过这个编号就能找到相应的存储空间
列表与元祖支持下标索引,字符串实际上就是字符的数组,所以也支持下标索引
python中下标从0开始,如果想取出部分字符,可以通过下表的方法,如:

name = 'abcdef '
print(name[0])
print(name[1])运行结果:
a
b

2、切片

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元祖都支持切片操作
切片的语法:[起始:结束:步长]
注意:选取的区间属于左闭右开型,即从‘起始’位开始,到‘结束’位的前一位结束(不包含结束位本身)。如:

name = 'abcdef'
print('字符串name: ' + name)
print('name[0:3]的结果为: ' + name[0:3])  # 取下标 0~2 的字符
print('name[0:5]的结果为: ' + name[0:5])  # 取下标 0~4 的字符
print('name[3:5]的结果为: ' + name[3:5])  # 取下标 3、4 的字符
print('name[2:]的结果为: ' + name[2:])  # 取下标 2 开始到最后的字符
print('name[1:-1]的结果为: ' + name[1:-1])  # 取下标从 2 开始到倒数第2个字符之间的字符
print('name[:3]的结果为: ' + name[:3])  # 取下标 0~2 的字符
print('name[::2]的结果为: ' + name[::2])  # 取下标从 0 开始,步长为 2 的字符
print('name[::-2]的结果为: ' + name[::-2])  # 取下标从最后一个字符开始,步长为 -2(倒着取)的字符
print('name[5:1:2]的结果为: ' + name[5:1:2])  # 正向取 下标为 5~2 步长为 2 的字符
print('name[5:1:-2]的结果为: ' + name[5:1:-2])  # 倒着取下标为 5~2 且步长为 2 的字符
print('name[1:5:2]的结果为: ' + name[1:5:2])  # 取下标为 1~4 步长为 2 的字符运行结果:
字符串name: abcdef
name[0:3]的结果为: abc
name[0:5]的结果为: abcde
name[3:5]的结果为: de
name[2:]的结果为: cdef
name[1:-1]的结果为: bcde
name[:3]的结果为: abc
name[::2]的结果为: ace
name[::-2]的结果为: fdb
name[5:1:2]的结果为: 
name[5:1:-2]的结果为: fd
name[1:5:2]的结果为: bd

2、列表(List)

nameList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
print(nameList[0])
print(nameList[1])
print(nameList[2])运行结果:
xiaoWang
xiaoZhang
xiaoHua

1、列表的循环遍历

1、使用 for 循环
nameList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
for name in nameList:print(name)
运行结果:
xiaoWang
xiaoZhang
xiaoHua
2、使用 while 循环
nameList=['xiaoWang','xiaoZhang','xiaoHua']
length=len(nameList)
i=0
while i<length:print(nameList[i])i+=1运行结果:
xiaoWang
xiaoZhang
xiaoHua

2、列表的相关操作

1、添加元素(‘增’ append,extend,insert)
1、通过 append 可以向列表添加元素
# 定义变量 A
A = ['xiaoWang','xiaoZhang','xiaoHua']
print('---添加之前列表 A 的数据---')
for a in A:print(a)
# 提示并添加元素
name = input('请输入要添加的学生姓名: ')
A.append(name)
print('---添加之后列表 A 的数据---')
for a in A:print(a)运行结果:
---添加之前列表 A 的数据---
xiaoWang
xiaoZhang
xiaoHua
请输入要添加的学生姓名: 张三
---添加之后列表 A 的数据---
xiaoWang
xiaoZhang
xiaoHua
张三
2、通过 extend 可以将另一个集合的元素逐一添加到列表中
a=[1,2]
b=[3,4]
a.append(b)
print(a)
a.extend(b)
print(a)运行结果:
[1, 2, [3, 4]]
[1, 2, [3, 4], 3, 4]
3、insert(index,object) 在指定位置 index 前插入元素 object
a = [0, 1, 2]
a.insert(1, 3)
print(a)运行结果:
[0, 3, 1, 2]
2、修改元素(‘改’)

修改元素的时候,要通过下标来确定修改的是那个元素,然后才能进行修改

# 定义变量 A
A = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
print('---修改之前列表 A 的数据---')
for a in A:print(a)
# 修改元素
A[1] = 'xiaoLu'
print('---修改之后列表 A 的数据---')
for a in A:print(a)运行结果:
---修改之前列表 A 的数据---
xiaoWang
xiaoZhang
xiaoHua
---修改之后列表 A 的数据---
xiaoWang
xiaoLu
xiaoHua
3、查找元素(‘查’ in,not in,index,count)

所谓的查找,就是看看指定的元素是否存在
python中查找的常用方法为:
in(存在):如果存在结果为 True,否则结果为 False
not in(不存在):如果不存在结果为 True,否则结果为 False

# 待查找的列表
nameList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
# 获取用户要查找的名字
name = input('请输入要查找的姓名: ')
# 查找是否存在
if name in nameList:print('找到了相同的名字')
else:print('没有找到相同的名字')运行结果:
请输入要查找的姓名: xiaoWang
找到了相同的名字

index 和 count 与字符串中的用法相同

a = ['a', 'b', 'c', 'a', 'b']
print(a.index('a', 1, 4))  # 注意是左闭右开区间
print(account('b'))运行结果:
3
2
4、删除元素(‘删’ del,pop,remove)
1、del:根据下标进行删除
movieName=['加勒比海盗','骇客帝国','第一滴血','指怀王','霍比特人']
print('---删除之前---')
for name in movieName:print(name)
del movieName[2]
print('---删除之后---')
for name in movieName:print(name)
2、pop:删除最后一个元素
movieName=['加勒比海盗','骇客帝国','第一滴血','指怀王','霍比特人']
print('---删除之前---')
for name in movieName:print(name)
movieName.pop()
print('---删除之后---')
for name in movieName:print(name)
3、remove:根据元素的值进行删除
movieName=['加勒比海盗','骇客帝国','第一滴血','指怀王','霍比特人']
print('---删除之前---')
for name in movieName:print(name)
movieName.remove('指怀王')
print('---删除之后---')
for name in movieName:print(name)
5、排序(sort、reverse)

sort 方法是将 list 按特定顺序重新排列,默认为由小到大,参数 reserve =True 可以将排序改为倒序
reverse 方法是将 list 逆置

a = [1, 4, 2, 3]
print(a)
a.reverse()
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)运行结果:
[1, 4, 2, 3]
[3, 2, 4, 1]
[1, 2, 3, 4]
[4, 3, 2, 1]

3、列表的嵌套

类似 while 循环的嵌套,列表也是支持嵌套的
一个列表中的元素又是一个列表,那么这就是列表的嵌套

schoolName = [['北京大学', '清华大学'],['南京大学', '天津大学', '天津师范大学'],['山东大学', '中国海洋大学']
]
print(schoolName)运行结果:
[['北京大学', '清华大学'], ['南京大学', '天津大学', '天津师范大学'], ['山东大学', '中国海洋大学']]

3、集合(Set)

集合是一个无序不重复元素的序列,基本功能是进行成员关系测试和删除重复元素,可以使用大括号 {} 或者 set() 函数创建集合(注意:创建一个空集合必须用set() 而不是 {} ,因为 {} 是用来创建一个空字典

student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student)  # 输出集合,重复的元素被自动去掉运行结果:
{'Jack', 'Tom', 'Jim', 'Rose', 'Mary'}

1、成员测试

student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
if 'Rose' in student:print('Rose 在集合中')
else:print('Rose 不在集合中')运行结果:
Rose 在集合中

2、set 可以进行集合运算

a = set('abracadabra')
b = set('alacazam')
print(a)
print(b)
print(a - b)  # a 和 b 的差集
print(a | b)  # a 和 b 的并集
print(a & b)  # a 和 b 的交集
print(a ^ b)  # a 和 b 中不同时存在的元素运行结果:
{'a', 'c', 'b', 'd', 'r'}
{'a', 'm', 'l', 'c', 'z'}
{'b', 'd', 'r'}
{'a', 'm', 'l', 'c', 'z', 'b', 'd', 'r'}
{'a', 'c'}
{'m', 'b', 'l', 'z', 'r', 'd'}

4、元祖(Tuple)

python 的元祖与列表类似,不同之处在于元祖的元素不能修改。元祖使用小括号,列表使用中括号。

1、访问元祖

aTuple = ('at', 77, 99.9)
print(aTuple)
print(aTuple[0])
print(aTuple[1])
print(aTuple[2])运行结果:
('at', 77, 99.9)
at
77
99.9

2、修改元祖

元组中的元素值是不允许修改的,但我们可以对元祖进行连接组合

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
tup1[0] = 100
tup3 = tup1 + tup2
print(tup3)运行结果:
TypeError: 'tuple' object does not support item assignment
(12, 34.56, 'abc', 'xyz')

3、删除元祖

元组中的元素值是不允许删除的,但我们可以使用 del 语句来删除整个元祖

tup = ('a','b',1,2)
del tup
print('删除后的元祖tup:')
print(tup)运行结果:
删除后的元祖tup:
NameError: name 'tup' is not defined

5、字典(Dictionary)

字典和列表一样,也能存储多个数据。
列表中找某个元素时,是根据下标进行的
字典的每个元素由2部分组成:键和值,字典中找某个元素时,是根据键

1、根据键访问值

info = {'name': '张三', 'id': 100, 'sex': '男', 'address': '北京'}
print(info['name'])
print(info['address'])运行结果:
张三
北京

若访问不存在的值,则会报错

info = {'name': '张三', 'id': 100, 'sex': '男', 'address': '北京'}
info['age']运行结果:
KeyError: 'age'

若我们不确定字典中是否存在某个键而又想获取其值时,可以使用 get方法,还可以设置默认值

info = {'name': '张三', 'id': 100, 'sex': '男', 'address': '北京'}
age = info.get('age')
print(type(age))
age = info.get('age', 18)  # 若 info 中不存在 age 这个键,则返回默认值 18
print(age)运行结果:
<class 'NoneType'>
18

2、修改元素

字典的每个元素中的数据是可以修改的,只要通过 key 找到,即可修改

info = {'name': '张三', 'id': 100, 'sex': '男', 'address': '北京'}
newId = input('请输入新的学号:')
info['id'] = int(newId)
print('修改之后的 id 为 %d' % info['id'])运行结果:
请输入新的学号:001
修改之后的 id1

3、添加元素

如果在使用 变量名[‘键’]=数据 时,这个键在字典中不存在,那么就会新增这个元素

info = {'name': '张三', 'sex': '男', 'address': '北京'}
print('id 为 %d' % info['id'])  # 程序会终止运行,因为访问了不存在的减
newId = input('请输入新的学号:')
info['id'] = int(newId)
print('添加之后的 id 为 %d' % info['id'])运行结果:
KeyError: 'id'
请输入新的学号:001
添加之后的 id1

4、删除元素

对字典进行删除操作有以下几种:del、clear()

1、del:删除指定的元素
info = {'name': '张三', 'sex': '男', 'address': '北京'}
print('删除前 %s' % info['name'])
del info['name']
print('删除后 %s' % info['name'])运行结果:
删除前 张三
KeyError: 'name'
2、del: 删除整个字典
info = {'name': '张三', 'sex': '男', 'address': '北京'}
print('删除前 %s' % info)
del info
print('删除后 %s' % info)运行结果:
删除前 {'name': '张三', 'sex': '男', 'address': '北京'}
NameError: name 'info' is not defined
3、clear :清空整个列表
info = {'name': '张三', 'sex': '男', 'address': '北京'}
print('清空前 %s' % info)
info.clear()
print('清空后 %s' % info)运行结果:
清空前 {'name': '张三', 'sex': '男', 'address': '北京'}
清空后 {}

5、len:返回字典中键值对的个数

info = {'name': '张三', 'sex': '男', 'address': '北京'}
print('info 中键值对的个数为:'+str(len(info)))运行结果:
info 中键值对的个数为:3

6、keys:返回一个包含字典所有 key 的可迭代对象

info = {'name': '张三', 'sex': '男', 'address': '北京'}
print(info.keys())运行结果:
dict_keys(['name', 'sex', 'address'])

7、values:返回一个包含字典所有 value 的可迭代对象

info = {'name': '张三', 'sex': '男', 'address': '北京'}
print(info.values())运行结果:
dict_values(['张三', '男', '北京'])

8、items:返回一个包含所有(键,值)元祖的可迭代对象

info = {'name': '张三', 'sex': '男', 'address': '北京'}
print(info.items())运行结果:
dict_items([('name', '张三'), ('sex', '男'), ('address', '北京')])

6、遍历

通过 for…in… 的语法结构,我们可以遍历字符串、列表、元祖、字典等数据结构

1、字符串遍历

s = 'hello world'
for c in s:print(c, end=' ')运行结果:
h e l l o   w o r l d 

2、列表遍历

list = [1, 2, 3, 4, 5]
for l in list:print(l, end=' ')运行结果:
1 2 3 4 5 

3、元组遍历

tp = (1, 2, 3, 4, 5)
for t in tp:print(t, end=' ')运行结果:
1 2 3 4 5 

4、字典遍历

1、遍历字典的 key(键)
dt = {'name': '张三', 'sex': '男', 'address': '北京'}
for key in dt.keys():print(key)运行结果:
name
sex
address
2、遍历字典的 value(值)
dt = {'name': '张三', 'sex': '男', 'address': '北京'}
for value in dt.values():print(value)运行结果:
张三
男
北京
3、遍历字典的项(元素)
dt = {'name': '张三', 'sex': '男', 'address': '北京'}
for item in dt.items():print(item)运行结果:
('name', '张三')
('sex', '男')
('address', '北京')
4、遍历字典的 key-value(键值对)
dt = {'name': '张三', 'sex': '男', 'address': '北京'}
for key, value in dt.items():print(key, value)运行结果:
name 张三
sex 男
address 北京

5、带下标索引的遍历

chars = ['a', 'b', 'c', 'd']
i = 0
for c in chars:print('%d: %s' % (i, c))i += 1运行结果:
0: a
1: b
2: c
3: d

6、enumerate()函数

用于将一个可遍历的数据对象(如列表、元祖、字符串)组合为一个索引序列,同时列出数组和数据下标,一般用在 for 循环当中

chars = ['a', 'b', 'c', 'd']
for i, c in enumerate(chars):print(i, c)运行结果:
0 a
1 b
2 c
3 d

7、公共方法

1、运算符

运算法描述支持的数据类型
+合并字符串、列表、元组
*复制字符串、列表、元组
in元素是否存在字符串、列表、元组、字典
not in元素是否不存在字符串、列表、元组、字典
1、+
print('hello' + 'world')
print([1, 2] + [3, 4])
print(('a', 'b') + ('c', 'd'))运行结果:
helloworld
[1, 2, 3, 4]
('a', 'b', 'c', 'd')
2、*
print('ab' * 4)
print([1, 2] * 4)
print(('a', 'b') * 4)运行结果:
abababab
[1, 2, 1, 2, 1, 2, 1, 2]
('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b')
3、in
print('he' in 'hello world')
print(3 in [1, 2])
print(4 in (1, 2, 3, 4))
print('name' in {'name': '张三', 'age': 24})运行结果:
True
False
True
True
4、not in
print('he' not in 'hello world')
print(3 not in [1, 2])
print(4 not in (1, 2, 3, 4))
print('name' not in {'name': '张三', 'age': 24})运行结果:
False
True
False
False

注意:in,not in 在对字典操作时,判断的是字典的键

2、python 内置函数

方法描述
len(item)计算容器中元素个数
max(item)返回容器中元素最大值
min(item)返回容器中元素最小值
del(item)删除变量

range()函数返回的是一个可迭代的对象
range(stop)
range(start,stop[,step])

for i in range(5):print(i, end=' ')
print()
for i in range(1, 5, 1):print(i, end=' ')
print()
for i in range(1, 5, 2):print(i, end=' ')运行结果:
0 1 2 3 4 
1 2 3 4 
1 3 

列表推导式
所谓的列表推导式,就是指的轻量级循环创建列表

a = [x for x in range(4)]
print(a)
b = [x for x in range(1, 4)]
print(b)
c = [x for x in range(1, 10) if x % 2 == 0]
print(c)
d = [(x, y) for x in range(1, 3) for y in range(3)]
print(d)运行结果:
[0, 1, 2, 3]
[1, 2, 3]
[2, 4, 6, 8]
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

8、引用

在 python 中,值是靠索引来传递的
我们可以用 id() 来判断两个变量是否为同一个值的引用,我们可以将 id 值理解为那块内存的地址标示

可变类型和不可变类型

可变类型:值可以改变
List(列表)、Dictionary(字典)、Set(集合)
以列表为例,如下:

a = ['a', 'b', 'c']
b = a
print(a)
print(b)
print(id(a))
print(id(b))
a.append('d')
print(a)
print(b)
print(id(a))
print(id(b))运行结果:
['a', 'b', 'c']
['a', 'b', 'c']
1307459048192
1307459048192
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']
1307459048192
1307459048192

不可变类型:值不可以改变
Number(数字)、String(字符串)、Tuple(元祖)
以字符串为例,如下:

a='helloworld'
b=a
print('a = '+a)
print('b = '+b)
print(id(a))
print(id(b))
a='你好'
print('a = '+a)
print('b = '+b)
print(id(a))
print(id(b))运行结果:
a = helloworld
b = helloworld
1894198703984
1894198703984
a = 你好
b = helloworld
1894198795824
1894198703984

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

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

相关文章

一文让你熟练使用 JSONObject 和 JSONArray

依赖 导入阿里的 fastjson 依赖。 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>类型转换 String 与 JSON 相互转换 通过 JSONObject.parseObject…

面试2个月没有一个offer?阿里技术官的800页知识宝典打破你的僵局~

在经历了一波裁员浪潮后&#xff0c;大环境似乎有所好转&#xff0c;但对于面试者来说&#xff0c;面试愈发困难&#xff0c;现在面试官动不动就是底层原理&#xff0c;动不动就是源码分析&#xff0c;面试一定会抓你擅长的地方&#xff0c;一直问&#xff0c;问到你不会为止。…

集成学习(Ensembles)

Ensembles 前言EnsemblesAveraging,StackingWhy does averaging work?如何理解&#xff1a;In practice errors won’t be completely independent due to noise in the labels Random ForestsDoes averaging work if you use trees with the same parameters?Bootstrap Samp…

【手把手做ROS2机器人系统开发一】开发环境搭建

【手把手做ROS2机器人系统开发一】开发环境搭建 目录 【手把手做ROS2机器人系统开发一】开发环境搭建 一、专栏介绍&#xff1a; 二、开发环境搭建&#xff1a; 1.Ubuntu系统安装 2.ROS2系统环境安装 3.测试系统运行 一、专栏介绍&#xff1a; 大家好&#xff0c;今天给大家…

自然语言处理基本任务综述

文章目录 1.多语言分词2.词性标注3.命名实体识别4.中心词提取5.依存句法分析6.文本纠错7.文本摘要8.文本相似度9.情感分析10.文本分类11.词向量 1.多语言分词 ​ 在自然语言处理中&#xff0c;分词&#xff08;Tokenization&#xff09;是指将自然语言文本中的连续字符序列划分…

VRP开源的算例资源

VRP开源的算例资源 开源的算例资源 开源的MIP算例网址 1. MISOCP网址 Benchmark instances&#xff1a;多种问题的算例数据 TSP算例网址 VRP标杆算例网址 1. Networking and Emerging Optimization发布的VRP算例 2. PRP算例 3. 一个学者的主页上的算例 4. Chair in L…

MySQL-----复合查询

文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…

医药之家:19家医药企业获机构调研,8家公司接待超100家

据医药之家了解&#xff0c;4月17日至21日&#xff0c;两市约113家公司接受了机构调研&#xff0c;其中有19家为医药生物公司。从这19家医药生物公司的调研榜单来看&#xff0c;8家公司近5日接待机构家数超100家&#xff0c;分别是长春高新、国际医学、美好医疗、迪瑞医疗、祥生…

【中标通知】塔望咨询中标新疆农发集团 品牌规划建设项目

【新疆农发集团供应链有限公司-品牌建设项目】于2022年5月正式启动。 本次项目2022年4月6日招标结果正式公示。【塔望咨询】凭借3W消费战略方法体系和专注食品行业丰富的品牌项目经验&#xff0c;中标新疆农发集团供应链有限公司兵团红品牌规划建设项目。 中标结果公告 新疆农…

天梯赛 L3-025 那就别担心了

原题链接&#xff1a; PTA | 程序设计类实验辅助教学平台 题目描述&#xff1a; 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题&#xff0c;其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”&#xff0c;即从某个命题出发的所有推理路径都会将结…

用java 实现二叉树创建

二叉树是数据结构中的一个重要的概念&#xff0c;二叉树的概念最早由 Linus Torvalds在1958年提出。他给出了一个树形数据结构&#xff0c;可以用来存储二叉树。每个节点的左子树和右子树都是空&#xff0c;中间层是子树。在一个给定的空间中&#xff0c;每一个节点都有两个左右…

相机雷达联合标定cam_lidar_calibration

文章目录 运行环境&#xff1a;1.1 ROS环境配置1&#xff09;工作空间创建和编译2&#xff09;官方数据集测试环境 2.1 在线标定1&#xff09;数据类型2&#xff09;标定板制作3&#xff09;配置文件4&#xff09;开始标定5&#xff09;完整实现步骤 3.1 python版本选择3.2 rvi…

4年的测试工程师,你遇到过自身瓶颈期吗?又是怎样度过的?

从毕业到现在已经快4年啦&#xff0c;一直软件测试行业混迹。我不是牛人&#xff0c;但是自我感觉还算是个合格的测试工程师&#xff0c;有必要写下自己将近4年来的经历&#xff0c;给自我以提示&#xff0c;给刚入行的朋友提供点参考。 貌似这一点适应的行业最广&#xff0c;…

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0≤n≤1000 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来&#xff0c;随着高校规模的逐步扩大&#xff0c;学生对高校自习室座位的需求也在不断增加。然而&#xff0c;一些高校仍然采用人工管理学院自习室座位&#xff0c;这大大降低了管理效率。显然&#xff0c;开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

Junit 5 如何使用 Guice DI

Guice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说&#xff0c;这个工具更加小巧&#xff0c;我们可以在测试中直接使用。 Junit 5 在 Junit 中使用就没有那么方便了&#xff0c;因为 Junit 没有 Guice 的注解。 你需要手动写一个类&#xff0c;在这个类中&a…

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;的概念早在20世纪60年代就被提出&#xff0c;但由于当时的技术水平无法满足相关应用的需求&#xff0c;这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展&#xff0c;虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计&#xff0c;让我学到了更多的知识&#xff0c;而且在设计中会有一些问题出现&#xff0c;最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发&#xff0c;使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag")&#xff1b;根据语义&#xff0c;函数提供了修改v1&#xff0c;判断v2是否等于11.28125&#xff0c;如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型&#xff0c;提高会议沟通效率。使用此模型&#xff0c;主要是有三步&#xff1a; 第一步&#xff1a;倾听&#xff0c;项目经理需要保持中立的立场&#xff0c;不先表态&#xff0c;让团队成员畅…