3 Python的数据类型
概述
在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时,不需要提前声明它的数据类型。Python会自动处理这种情况,并在需要时进行类型转换。
Python提供了丰富多样的数据类型,以满足各种不同的编程需求。理解和掌握这些数据类型的特点、属性和用法,对于编写高效、可靠的Python代码至关重要。Python中的数据类型可以分为两种:基础类型和复杂类型。基础类型包括:数字、字符串等,复杂类型包括:列表、元组、集合、字典等。
Python的数据类型可以分为两个大类:不可变数据类型和可变数据类型。
不可变数据类型是指:当该数据类型对应变量的值发生了改变,它对应的内存地址也会发生改变。不可变数据类型包括:数字、字符串、元组。比如:变量a=66后,再赋值a=88,这里实际是新生成了一个数字对象88,再让 a指向它,而原来的数字对象66被丢弃;此时并没有改变a的值,相当于新生成了a。
可变数据类型是指:当该数据类型对应变量的值发生了改变,它对应的内存地址不会发生改变。可变数据类型包括:列表、集合、字典。比如:变量a=[98, 99, 100]后,再赋值a[1]=50,只是将a的第二个元素值更改,a本身没有修改。
Number(数字)
Python中的数字支持4种类型,分别为:int、float、bool和complex。
整型(int):用于表示正整数、负整数和0,其取值范围是无限的。
浮点型(float):用于表示带有小数点的数值,浮点型的大小也是无限的,可以表示很大的浮点数。
布尔型(bool):用于表示真、假两种状态,只有两个取值:True和False,常用于逻辑运算和控制语句。
复数型(complex):由实部和虚部组成,可以用a + bj的形式表示,其中,a为实部,b为虚部。在Python中,还可以使用complex函数来创建一个复数,比如:a = complex(66, 88)。
那么,如何区分这4种数字类型呢?可以使用type函数和isinstance函数。type函数用于获取某个变量的数据类型,isinstance函数用于判断某个变量是否为某个数据类型的实例(包括父类实例和子类实例)。
a = 10
b = 6.9
c = True
d = 25 + 36j
# 输出:<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
print(type(a), type(b), type(c), type(d))# 以下均输出:True
print(isinstance(a, int))
print(isinstance(b, float))
print(isinstance(c, bool), isinstance(c, int))
print(isinstance(d, complex))
另外,布尔型是整型的子类,这也就意味着,True和False可以与数字进行算数运算。True相当于1,False相当于0。
a = True + 5
b = 9 - False
# 输出:6 9 True True
print(a, b, True == 1, False == 0)
String(字符串)
字符串是Python中的文本数据,用于表示一串字符。字符串是由单引号、双引号或三引号括起来的多个字符组成的序列,其长度(即字符数)可以是任意的。字符串从左边算起时,索引从0开始计数;从右边算起时,索引从-1开始计数。
要获取字符串的子串,可以使用变量[下标]或变量[头下标:尾下标]的格式。变量[下标]只能获取包含单个字符的字符串,变量[头下标:尾下标]能获取头下标到尾下标之间(注意:包括头下标,不包括尾下标)的字符串。头下标不写时,默认为0;尾下标不写时,默认为到最右边的所有字符。字符串的下标可以超过索引范围,超过后,会自动被限制为可用的极限值。
a = 'hello'
# 输出:hello
print(a)
# 输出:e
print(a[1])
# 输出:hell
print(a[0:-1])
# 输出:hello
print(a[0:])
# 输出:hell
print(a[:-1])
# 输出:hello
print(a[:])
# 输出:el
print(a[1:-2])
# 输出:hel
print(a[-5:3])
# 输出:hello
print(a[-16:99])
字符串还可以使用+符号进行拼接,使用*符号进行拷贝,使用\符号转义特殊字符。当然,如果不想让\符号发生转义,也是可以的:在字符串前面添加一个r或R即可,以表示后面的是一个原始字符串。
a = 'hello'
b = a + ' CSDN'
# 输出:hello CSDN
print(b)c = a * 2
# 输出:hellohello
print(c)d = 3 * a
# 输出:hellohellohello
print(d)e = 'hello\nCSDN'
# 输出:hello
#CSDN
print(e)f = r'hello\nCSDN'
# 输出:hello\nCSDN
print(f)
与C/C++、Java等语言不同,Python中的字符串不能被改变。试图向字符串的索引位置赋值时,比如:a[1]='P',会提示类似下面的错误信息:'str' object does not support item assignment。Python也没有单独的字符类型(比如:C/C++中的char类型),一个字符就是长度为1的字符串。
List(列表)
列表是Python中的有序集合数据类型,可以包含任意类型的元素(同一个列表中的数据类型可以不同)。列表是通过方括号括起来,用逗号进行分隔的元素序列,支持各种操作,包括:元素的添加、删除、修改、查找等。
与字符串一样,列表也可以被索引和截取。列表被截取后,返回一个包含所需元素的新列表。
a = [10, 20, 30, 40, 50]
# 输出:20 50 [30, 40] [30, 40, 50]
print(a[1], a[-1], a[2:-1], a[2:])
# 输出:[10, 20, 30, 40, 50]
print(a[-10:10])
列表还可以使用+符号进行拼接,使用*符号进行拷贝。如果要判断一个元素是否在列表中,可以使用in关键字。如果要遍历一个列表,则可以使用for in。反向遍历时,使用[::-1]。第一个冒号两边省略数字,表示所有元素;第二个冒号右边为-1,表示列表元素反向遍历。
a = [10, 20, 30]
# 输出:[10, 20, 30, 10, 20, 30]
print(a * 2)
# 输出:[10, 20, 30, 1, 2]
print(a + [1, 2])
# 输出:False True
print(66 in a, 20 in a)
# 正向遍历,依次输出:10 20 30
for item in a:print(item)
# 反向遍历,依次输出:30 20 10
for item in a[::-1]:print(item)
Python中包含一些全局方法,用于获取列表的元素个数、列表元素的最大值、列表元素的最小值、列表元素的总和,分别为:len、max、min、sum。
a = [10, 20, 30]
# 输出:3
print(len(a))
# 输出:30
print(max(a))
# 输出:10
print(min(a))
# 输出:60
print(sum(a))
除了全局方法,列表自身还有一些成员方法,用于对列表进行添加、插入、移除、统计、反转等操作,分别为:append、insert、remove、count、reverse等。
a = [10, 20, 30]
a.append(66)
a.append(20)
# 输出:[10, 20, 30, 66, 20]
print(a)
# 统计元素20的个数,输出:2
print(a.count(20))
# 查找第一个值匹配的元素的位置,输出:2
print(a.index(30))
# 100不在列表中,运行会报错:100 is not in list
# print(a.index(100))
# 移除最后一个元素并返回,输出:20
print(a.pop())
# 输出:[10, 20, 30, 66]
print(a)
# 在某个位置插入一个元素
a.insert(0, 99)
# 输出:[99, 10, 20, 30, 66]
print(a)
# 反转列表
a.reverse()
# 输出:[66, 30, 20, 10, 99]
print(a)
# 移除第一个值匹配的元素
a.remove(30)
# 输出:[66, 20, 10, 99]
print(a)
# 35不在列表中,运行会报错:x not in list
# a.remove(35)
# 追加另一个序列中的元素
a.extend(["hello", "CSDN"])
# 输出:[66, 20, 10, 99, 'hello', 'CSDN']
print(a)
# 清空列表
a.clear()
# 输出:[]
print(a)
注意:列表的index和remove方法在找不到元素时,运行时会报错,而不是像其他语言一样返回-1,或者什么也不做。因此,使用index和remove方法,更好的方式是像下面这样。
a = [10, 20, 30]
index = a.index(66) if 66 in a else -1
# 输出:-1
print(index)
if 20 in a:a.remove(20)
# 输出:[10, 30]
print(a)
列表的比较可以直接使用>、<、==、!=等运算符。只有当两个列表的元素个数、每个位置上的元素的类型和值都相等时,两个列表才相等。注意:不同类型的列表不能比较,运行时会报类似下面的错误信息:'<' not supported between instances of 'int' and 'str'。
a = [10, 20, 30]
b = [20, 10, 30]
# 输出:False
print(a > b)
b = [10, 20, 30]
# 输出:True
print(a == b)
b = ['hello', 'CSDN']
# 不同类型的列表比较会报错,提示:'<' not supported between instances of 'int' and 'str'
# print(a < b)
Tuple(元组)
元组与列表类似,是由小括号括起来的元素序列,通常用于表示一组固定的数据。与列表不同,元组是不可变的,也就是说,无法修改元组中的元素。
注意:当元组中只包含一个元素时,需要在该元素后面添加逗号。否则,小括号会被当作运算符使用,导致类型不正确。
a = ('hello', 'CSDN', 'Go')
# 输出:<class 'tuple'>
print(type(a))
a = ()
# 空元组,输出:<class 'tuple'>
print(type(a))
a = (66)
# 一个元素时,没有逗号,a被认为是整型,输出:<class 'int'>
print(type(a))
a = (66, )
# 一个元素时,有逗号,a被认为是元组,输出:<class 'tuple'>
print(type(a))
与字符串、列表一样,元组也可以被索引和截取,并支持+符号拼接、*符号拷贝,以及len、max、min、sum等全局方法,这里就不再赘述了。元组中的元素是不允许被修改的,尝试给其赋值(比如:a[0] = 66)会提示类似下面的错误信息:'tuple' object does not support item assignment。
a = (10, 20, 30, 40, 50)
# 输出:20 50 (30, 40) (30, 40, 50)
print(a[1], a[-1], a[2:-1], a[2:])
# 输出:(10, 20, 30, 40, 50)
print(a[-10:10])a = (10, 20, 30)
# 输出:(10, 20, 30, 10, 20, 30)
print(a * 2)
# 输出:(10, 20, 30, 1, 2)
print(a + (1, 2))
# 输出:False True
print(66 in a, 20 in a)
# 正向遍历,依次输出:10 20 30
for item in a:print(item)
# 反向遍历,依次输出:30 20 10
for item in a[::-1]:print(item)a = (10, 20, 30)
# 输出:3
print(len(a))
# 输出:30
print(max(a))
# 输出:10
print(min(a))
# 输出:60
print(sum(a))
Set(集合)
Python中的集合是由大括号括起来的无序的元素序列,不能包含重复的元素。集合支持数学中的集合运算,比如:并集、交集、差集等。要创建一个集合,可以使用大括号{}或者set函数。注意:创建一个空集合,必须使用set函数,而不能使用{},因为{}被用来创建下面将要介绍的空字典。
a = {66, 88, 99}
# 使用大括号创建集合,输出:{88, 66, 99}
print(a)
a = {66, 88, 99, 66, 88}
# 集合会自动移除重复元素,输出:{88, 66, 99}
print(a)
a = set(['a', 'b', 'c'])
# 使用set函数从列表创建集合,输出:{'a', 'c', 'b'}
print(a)
a = set('CSDN')
# 使用set函数从字符串创建集合,输出:{'S', 'N', 'D', 'C'}
print(a)
a = set()
# 使用set函数创建空集合,输出:set()
print(a)
向集合中添加元素可以使用add函数,向集合中添加元素、列表、元组、字典可以使用update函数。如果元素在集合中已存在,则不进行任何操作。从集合中移除元素可以使用remove函数和discard函数,其区别在于:如果元素不存在,remove函数会报错,而discard函数则不会报错。pop函数可以随机移除集合中的一个元素,当集合为空时,pop函数会报错。clear函数用于清空集合中的所有元素。
a = {66, 88, 99}
# 输出:3
print(len(a))
a.add(100)
# 输出:{88, 66, 99, 100}
print(a)
a.update([1, 2, 3])
# 输出:{1, 66, 99, 100, 2, 3, 88}
print(a)
a.remove(1)
# 输出:{66, 99, 100, 2, 3, 88}
print(a)
a.discard(2)
a.discard(5)
# 输出:{66, 99, 100, 3, 88}
print(a)
a.pop()
# 输出:{99, 100, 3, 88}
print(a)
a.clear()
# 输出:set()
print(a)
集合还支持数学中的集合运算,比如:并集、交集、差集等。运算符|、&、-、^分别用于计算两个集合的并集、交集、差集、异或集,对应函数union、intersection、difference、symmetric_difference。
a = set('hello')
b = set('hope')
# 计数集合a和b的并集,输出:{'e', 'p', 'h', 'o', 'l'}
print(a | b)
# 计数集合a和b的交集,输出:{'e', 'h', 'o'}
print(a & b)
# 计数在集合a,不在集合b的元素,输出:{'l'}
print(a - b)
# 计算不同时包含于集合a和b的元素,输出:{'l', 'p'}
print(a ^ b)# 计数集合a和b的并集,输出:{'e', 'p', 'h', 'o', 'l'}
print(a.union(b))
# 计数集合a和b的交集,输出:{'e', 'h', 'o'}
print(a.intersection(b))
# 计数在集合a,不在集合b的元素,输出:{'l'}
print(a.difference(b))
# 计算不同时包含于集合a和b的元素,输出:{'l', 'p'}
print(a.symmetric_difference(b))
Dictionary(字典)
字典是Python中的键值对数据类型,用于存储键值对映射关系。字典是由键值对组成的无序集合,键必须是唯一的,值可以不唯一。字典的内容在大括号{}内,键值对之间使用逗号进行分隔,键值之间使用冒号进行分隔。
a = {}
# 空字典,输出:{} 0 <class 'dict'>
print(a, len(a), type(a))
a = {'red': 6, 'blue': 9, 'green': 12}
# 输出:9
print(a['blue'])
# 键不存在时,运行会报错:KeyError: 'black'
# print(a['black'])
if 'white' not in a:print('white not in a')
# 移除某个键,必须确保键存在,否则运行时会报错
del a['green']
# 输出:{'red': 6, 'blue': 9}
print(a)
字典提供快速查找、访问键值对的功能和接口。
get(key, default=None):返回指定键的值,如果键不在字典中,则返回default设置的默认值。
setdefault(key, default=None):如果key在字典中,返回对应的值。如果不在字典中,则插入key及设置的默认值 default,并返回 default。
pop(key[,default]):删除字典key所对应的值,返回被删除的值。
popitem():返回并删除字典中的最后一对键和值。
items():返回一个键值对的视图对象。
keys():返回一个键的视图对象。
values():返回一个值的视图对象。
clear():删除字典内所有元素。
fromkeys(seq[, value]):创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。
a = {'red': 6, 'blue': 9, 'green': 12}
# 输出:9
print(a.get('blue'))
# 输出:100
print(a.get('black', 100))
# 输出:12
print(a.setdefault('green'))
# 输出:100
print(a.setdefault('white', 100))
# 输出:{'red': 6, 'blue': 9, 'green': 12, 'white': 100}
print(a)
a.pop('red')
# 输出:{'blue': 9, 'green': 12, 'white': 100}
print(a)
a.popitem()
# 输出:{'blue': 9, 'green': 12}
print(a)
# 依次输出:blue 9, green 12
for m, n in a.items():print(m, n)
# 依次输出:blue, green
for k in a.keys():print(k)
# 依次输出:9, 12
for v in a.values():print(v)
a.clear()
# 输出:{}
print(a)
a = dict.fromkeys(['lemon', 'apple', 'banana'], 99)
# 输出:{'lemon': 99, 'apple': 99, 'banana': 99}
print(a)
相关文章:

3 Python的数据类型
概述 在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时&…...

new String()到底创建了几个对象
题目: new String("abc")会创建几个对象? 看字节码,就知道是两个。...

第五十五天
CSS3 ●背景 CSS3 中包含几个新的背景属性,提供更大背景元素控制: •background-image:添加背景图片。不同的背景图像和图像用逗号隔开,所有的图片中显示在最顶端的为第一张。 •background-size:指定背景图像的大…...

【推荐】深入浅出benan的生命周期
目录 1.spring 管理JavaBean的过程(生命周期) 2.spring的JavaBean管理中单例模式及原型(多例)模式 2.1 . 默认为单例,但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…...

mysql使用redis+canal实现缓存一致性
目录 一、开启binlog日志 1.首先查看是否开启了binlog 2、开启binlog日志,并重启mysql服务 二、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限 三、下载配置canal 1、下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 1.0.17 版本为例 2、 …...

9.利用matlab完成 泰勒级数展开 和 符号表达式傅里叶变换和反变换 (matlab程序)
1.简述 matlab之傅里叶变换和逆变换 首先生成一个方波(或者其他组合波形),然后对这个信号做傅里叶变换,拆解到频域,可以看到这个信号是由哪些频率的信号叠加而来。 然后把频域信号,用傅里叶逆变换恢复到时…...

文字点选验证码识别(上)-YOLO位置识别
声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 文章中没有代码,只有过程思路,请大家谨慎订阅。…...

ssh远程连接慢解决方法
一、关闭SERVER上的GSS认证 将GSSAPIAuthentication改为no ,如果在配置文件中,以下值是被注释的就拿掉注释,因为默认开关就是yes # vi /etc/ssh/sshd_config GSSAPIAuthentication no二、关闭SERVER上DNS反向解析 在linux中,默认就是开启了S…...

10.4K Star!程序员为程序员针对性优化的开源免费笔记
平时我一直用Notion来记录内容为主,但也一直关注着其他开源产品。上周正好看到一款非常受欢迎的开源免费笔记,今天就推荐给大家:VNote。 VNote一个由程序员为程序员打造的开源笔记应用,基于Qt开发,专注于使用 Markdown…...

ppt中线材相交接的地方,如何绘画
ppt中线材相交接的地方: 在ppt中绘画线材相互交接的地方: 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下,在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小,鼠标放在“黄色点”位置…...

[VS/C++]如何更好的配置DLL项目中的成品输出
注意,解决方案与项目不放在同一个文件夹中,即不选中图中选项 直入主题 首先右键项目选择属性,或者选中项目然后AltEnter 选择配置属性下的常规 分别在四种配置中编辑输出目录如下 注意,四种配置要分别配置,一个个来…...

REC 系列 Visual Grounding with Transformers 论文阅读笔记
REC 系列 Visual Grounding with Transformers 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 视觉定位3.2 视觉 Transformer 四、方法4.1 基础的视觉和文本编码器4.2 定位编码器自注意力的文本分支文本引导自注意力的视觉分支 4.3 定位解码器定位 query 自注意力编码器-解…...

Linux常用命令总结
Linux是一种自由和开放源代码的操作系统,它被广泛用于服务器和其他大型系统中。然而,如果你刚开始使用Linux,可能会对如何有效地操作感到困惑。这篇文章将介绍一些常用的Linux命令,帮助你更好地理解和使用这个强大的系统。 文件和…...

Scratch 之 制作超丝滑 FNF 推条
这个教程是不用画笔的,所以不用担心推条是最后一层了! 导入素材 你以为真是这样吗?NO,NO,NO,其实是这样的 没错,中间是空的!中间是空的!中间是空的!…...

java通过反射,动态调用指定注解的方法
SpringBootTest RunWith(SpringRunner.class) public class AnnoTest {Autowiredprivate ApplicationContext applicationContext;Testpublic void test(){// 获取有指定注解的BeanMap<String, Object> annotationMap applicationContext.getBeansWithAnnotation(CacheC…...

QT学习方法
1 .类的学习方法 第一步:从UI文件中,找到界面的类—QMainWindow第二步:在Qt Creator工具中,找到“帮助”按钮,进入到帮助菜单界面,在选择"索引",在Look for:输入类名,找到类名,双击条目中的类名,在右侧会显示出来类的详细内容第三步:在右侧,可根据内容目录…...

C++中的类型擦除技术
文章目录 一、C类型擦除Type Erasure技术1.虚函数2.模板和函数对象 二、任务队列1.基于特定类型的方式实现2.基于任意类型的方式实现 参考: 一、C类型擦除Type Erasure技术 C中的类型擦除(Type Erasure)是一种技术,用于隐藏具体类…...

激光雷达 01 线数
一、线数 对于 360 旋转式和一维转镜式架构的激光雷达来说,有几组激光收发模块,垂直方向上就有几条线,被称为线数。这种情况下,线数就等同于激光雷达内部激光器的数量[参考]。 通俗来讲,线数越高,激光器的…...

PHP 公交公司充电桩管理系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP 公交公司充电桩管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88220946 论文下…...

HTML <strong> 标签
定义和用法 以下元素都是短语元素。虽然这些标签定义的文本大多会呈现出特殊的样式,但实际上,这些标签都拥有确切的语义。 我们并不反对使用它们,但是如果您只是为了达到某种视觉效果而使用这些标签的话,我们建议您使用样式表&a…...

机器学习笔记 - 使用 ResNet-50 和余弦相似度的基于图像的推荐系统
一、简述 这里的代码主要是基于图像的推荐系统,该系统利用 ResNet-50 深度学习模型作为特征提取器,并采用余弦相似度来查找给定输入图像的最相似嵌入。 该系统旨在根据所提供图像的视觉内容为用户提供个性化推荐。 二、所需环境 Python 3.x tensorflow ==2.5.0 numpy==1.21.…...

Codeforces Round 881 Div.3
文章目录 贪心:A. Sasha and Array Coloring结论:B. Long Long性质:C. Sum in Binary Treedfs求叶子数量:D. Apple Tree二分与前缀和:E. Tracking Segments 贪心:A. Sasha and Array Coloring Problem - A…...

Kubernetes(K8s)从入门到精通系列之十六:linux服务器安装minikube的详细步骤
Kubernetes K8s从入门到精通系列之十六:linux服务器安装minikube的详细步骤 一、安装Docker二、创建启动minikube用户三、下载minikube四、安装minikube五、将minikube命令添加到环境变量六、启动minikube七、查看pods,自动安装kubectl八、重命名minikube kubectl --为kubect…...

JDBC配置文件抽取-spring11
改成context,到这里我们context命名空间就引入完毕,加载我们外部properties配置文件: 用它:第一个属性,第二个类型 在未加载路径下: 现在我已经把spring加载到配置文件里了。 现在我需要在这个位置引入proper…...

el-form组件相关的一些基础使用
el-checkbox 01.description 多选单选框 02.场景举例 需要对每一条数据展示她的某些状态是否存在 03.代码展示 <el-checkbox v-model"query.isAutoAccptncsign" true-label1 false-label0 :disabled"ifReview?true:false">自动发起承兑应答</…...

全新 – Amazon EC2 M1 Mac 实例
去年,在 re: Invent 2021 大会期间,我写了一篇博客文章,宣布推出 EC2 M1 Mac 实例的预览版。我知道你们当中许多人请求访问预览版,我们尽了最大努力,却无法让所有人满意。不过,大家现在已经无需等待了。我很…...

java # Servlet
一、什么是Servlet? Servlet是javaEE规范之一。规范就是接口。JavaWeb三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。Servlet是运行在服务器上的一个Java小程序,它可以接收客户端发送来的请求,并响应数据给客户端。…...

Linux内核的两种安全策略:基于inode的安全与基于文件路径的安全
实现系统安全的策略 在Linux中,一切且为文件,实现系统安全的策略主要可分为两种:基于inode的安全、基于文件路径的安全。 基于inode的安全 为文件引入安全属性,安全属性不属于文件内容,它是文件的元数据,…...

有哪些前端开发工具推荐? - 易智编译EaseEditing
在前端开发中,有许多工具可以帮助你更高效地进行开发、调试和优化。以下是一些常用的前端开发工具推荐: 代码编辑器/集成开发环境(IDE): Visual Studio Code:功能强大、轻量级的代码编辑器,支…...

【JAVA】抽象类与接口
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 抽象类与接口 1. 抽象类1.1 抽象类的概念…...