Python 基础语法:基本数据类型(字符串)

在日常生活中,我们经常会用文字来记录事物的名称、或记录事情的发展过程等,这些文字类型的数据,就叫做字符串。在未来的写代码的工作中,无论你从事的是哪个方面的编程,字符串操作必不可少,非常重要。

1  字符串的定义和创建

1.1  字符串的定义和创建

在Python中,字符串是由一系列字符组成的不可变序列。字符串可以使用封闭的单引号、双引号或三引号(英文状态)来定义。

# 使用单引号定义字符串  
s1 = 'Hello, World!'  # 使用双引号定义字符串  
s2 = "Hello, Python!"  # 使用三引号定义多行字符串  
s3 = """  
This is a multi-line string.  
It can span multiple lines.  
"""

1.2  单引号、双引号,三引号的区别

在  Python 中,要表示字符串,必须在文字的外面加上单引号或双引号(英文的)。

print(type('Hello,World!'))  # <class 'str'>
print(type("Hello,World!"))  # <class 'str'>print(type(1))    # <class 'int'>
print(type('1'))  # <class 'str'> 加上单引号或双引号的数字也是字符串print(type(True))    # <class 'bool'>
print(type('True'))  # <class 'str'> 加上单引号或双引号的布尔值也是字符串

如果要想在字符串里显示单引号或双引号,就需要用不同的引号加以区分。

print("let's go.")   # let's go.
print('小明说:"我爱Python"')   # 小明说:"我爱Python"

也可以使用转义字符(\)来显示字符串里的单双引号。但不推荐,一是繁琐,二是看起来并不美观和自然。

print('let\'s go.')   # let's go.
print("小明说:\"我爱Python\"")   # 小明说:"我爱Python"

三引号表示多行字符串。

如果遇到一个很长的字符串,一是屏幕的宽度有限放不下,二是阅读也不方便。所以,在 python 中,建议每行的宽度最大79个字符,如果超过了79个字符,就应该考虑换行了。

但如果用双引号,你尝试回车一下把字符串换行,会提示语法错误。所以 python 用三引号来表示多行字符串,也可以用三个双引号来表示多行字符串,效果是一样的。

print('''小明说:\"我爱Python\"小明说:\"我爱Python\" 小明说:\"我爱Python\"小明说:\"我爱Python\"''')

如果在 Python 的 IDLE 里输入多行字符串,回车后显示的是 '\nhello world\nhello world\n' 这是怎么回事?

>>> '''
... hello world
... hello world
... '''
'\nhello world\nhello world\n'
>>>

这是因为我们在输入多行字符串的时候,不但输入了多行字符,而且还有敲击回车键的动作,敲击回车键这个动作虽然在屏幕上看不到,但它也是像字符一样存在的。Python  IDLE 为了让所有的字符都显示出来,就规定用 \n 来表示回车这个动作。

如果在 Python 的 IDLE 里输入 '\nhello world\nhello world\n' 这个字符串,却不会把 helllo world 进行多行显示。这是因为在这里,Python只会把把 \n 当作一个字符,而不会把它转义为回车键这个功能。

要想把 '\nhello world\nhello world\n' 这个字符串显示为多行字符串的形式,我们可以用 print() 这个函数。

>>>print("\nHello,World\nHello,World\n")Hello,World
Hello,World

单双引号也可以实现字符串换行,只要在第一行的末尾打一个反斜杠。示例如下:

>>>"hello\
world"'helloworld'

关于单双引号和三引号的区别,上面讲的比较零碎,但也比较重要,这也是一些基本常识。

1.3  转义字符

在Python中,转义字符是一种特殊的字符序列。

  • 表示一些无法 "看见" 的字符,如换行符、制表符、回车符等
  • 表示一些与语言本身有冲突的字符,单双引号字符,反斜杠字符本身等

转义字符以反斜杠(\)开头,后跟一个或多个字符。Python中的常见转义字符包括:

  1. \n:换行符,表示新的一行开始。
  2. \t:制表符,表示一个水平制表位置(通常等于8个空格)。
  3. \\:反斜杠字符本身,用于表示文件路径中的目录分隔符等。
  4. \":双引号字符,用于在字符串中包含双引号。
  5. \':单引号字符,用于在字符串中包含单引号。
  6. \r:回车符,表示将光标移动到行首。

注意:在Python中,换行符(\n)和回车符(\r)主要用于控制字符串中的换行和回车动作,以及在文件操作中指定行结束符。不过,需要注意的是,Python中的字符串和文件操作默认使用换行符(\n)作为行结束符,而不是回车符(\r)。

1.4  原始字符串

原始字符串(raw string)是Python中的一种字符串字面量形式,其特点是其中的反斜杠 \ 被视为普通字符,而不是转义字符的开头。这意味着在原始字符串中,你可以直接写入反斜杠而无需使用双反斜杠 \\ 进行转义。

原始字符串通过在字符串字面量前加上小写字母 rR 来定义。例如:


normal_string = "This is a string with an escaped backslash: \\"  raw_string = r"This is a raw string with a literal backslash: \"

原始字符串在处理包含大量反斜杠的字符串时特别有用,例如正则表达式或文件路径。在这些情况下,使用原始字符串可以避免频繁地转义反斜杠。

print('c:\northwind\northwest')
'''
orthwind
orthwest
'''
print('c:\\northwind\\northwest')
# c:\northwind\northwestprint(r'c:\northwind\northwest')
# c:\northwind\northwest

上面的例子中,第一例子里的的反斜杠是普通字符,但 print() 函数却把 \n 当成了换行符。要想正确显示路径,需要对这个普通字符 \ ,进行转义,如 \\。

而第二个例子,使用了 r'c:\northwind\northwest' 这意味着在原始字符串中,可以直接写入反斜杠而无需使用双反斜杠 \\ 进行转义。

print(r'let's go.')

但像上面这个例子,使用原始字符串是不正确的,因为 let's 中的单引号与字符串的单引号产生了矛盾。所以这个单引号需要进行转义 \' 。

2  字符串的索引和切片

2.1  字符串的索引

字符串是由若干个字符组成了,每个字符在字符串中都有一个数字(索引)与它对应,字符串每个字符的索引从左到右分别的 0,1,2,3,...

字符的索引也可以用负数表示,从字符串末尾开始计数,最后一个字符用 -1 表示,倒数第二个字符用 -2 表示,以此类推。如下图:

字符串HELLO
索引01234
-5-4-3-2-1

我们可以通过索引访问字符串中的特定字符。

s = 'abcdefg'  # 索引访问  
print(s[0])  # 输出 'a'  
print(s[-1]) # 输出 'g'  

2.2  字符串的切片

字符串的切片操作是Python中非常基础且强大的功能,它允许我们获取字符串的子串。以下是进行字符串切片操作时需要注意的一些关键点:

2.2.1  切片的语法
str[起始 : 结束 : 步长]

起始和结束是可选的,如果不指定,则默认为字符串的开始和结束。步长也是可选的,如果不指定,则默认为1。

s = 'abcdefg'# 切片操作
print(s[1:6])  # 输出 'bcdef'  取出索引是1至5的字符,不包含索引6
print(s[1:6:2])  # 输出 'bdf'  取出索引是1、3、5的字符
print(s[:3])  # 输出 'abc'  取出索引是0至2的字符
print(s[3:])  # 输出 'defg' 取出索引是3至最后的字符
2.2.2  不包含结束位置

切片操作返回的字符串不包括结束位置指定的字符。换句话说,切片操作的范围是从起始位置到结束位置的前一个字符。

s = 'abcdefg'  # 切片操作  
print(s[1:4])  # 输出 'bcd'  
2.2.3  负索引

可以使用负索引从字符串的末尾开始计数。例如,-1表示最后一个字符,-2表示倒数第二个字符,以此类推。

s = 'abcdefg'# 切片操作
print(s[-4:-1])  # 输出 'def'
2.2.4  负步长

当步长为负数时,切片操作会从右向左进行。此时,起始位置应该在结束位置的右边,否则切片出来的结果为空集。

s = 'abcdefg'# 切片操作
print(s[5:1:-1])  # 输出 'fedc'

我们可以使用了负步长进行字符串的反转。 

s = 'abcdefg'# 切片操作
print(s[::-1])  # 输出 'gfedcba'
2.2.5  空切片

如果起始位置大于结束位置,或者步长为0,切片操作会返回空字符串。

掌握这些切片操作的注意点,可以帮助我们更准确地从字符串中提取所需的信息,提高代码的效率和可读性。

3  字符串的运算

3.1  字符串的拼接

字符串的加法(+)是字符串拼接最常用的一种。

str1 = 'Hello'
str2 = ','
str3 = 'World'
print(str1+str2+str3)  # Hello,World
3.2  字符串的重复

字符串的乘法(*)可以实现字符串重复。

str = '我爱你!'
print(str*3)  # 我爱你!我爱你!我爱你!

字符串的常用方法

Python的字符串对象提供了许多内置方法,用于执行各种字符串操作。

4.1  字符串的大小写转换方法
s = 'Hello World's_upper = s.upper()  # 转换为大写
s_lower = s.lower()  # 转换为小写print(s_upper)  # 输出 'HELLO WORLD'
print(s_lower)  # 输出 'hello world'
4.2  字符串的查找与替换

字符串的查找与替换是字符串处理中常见的操作,对于编程和数据处理工作来说至关重要。

在Python中,字符串的查找和替换可以通过多种方式实现,包括使用内置方法和正则表达式。下面是具体的例子和解释。

4.2.1  字符串的查找
  • 使用 find() 方法:find() 方法返回指定子串在字符串中首次出现的索引。如果未找到子串,则返回 -1
s = "Hello, world!"  
index = s.find("world")  
print(index)  # 输出: 7  index = s.find("Python")  
print(index)  # 输出: -1
  •  使用 index() 方法:index() 方法与 find() 类似,但如果在字符串中未找到子串,它会引发一个 ValueError 异常。
s = "Hello, world!"  
index = s.index("world")  
print(index)  # 输出: 7  # 这会抛出 ValueError  
# index = s.index("Python")

需要注意的是,find()index()在功能上相似,但它们在未找到子串时的行为略有不同。find()会返回-1,而index()会抛出一个异常。

  • 使用正则表达式 (re 模块):对于更复杂的查找需求,你可以使用正则表达式。正则表达式是一种强大的文本处理工具,它允许你定义复杂的搜索模式,并在字符串中查找匹配这些模式的子串。
import res = "Hello, world! This is a Python string."match = re.search(r"Python", s)
if match:print("Found:", match.start())  # 输出: 26  
else:print("Not found")

re.search(pattern,string)函数用于在字符串中查找第一个匹配正则表达式的子串。如果找到匹配项,它会返回一个匹配对象;否则返回None

import re  pattern = r'\d+'  # 匹配一个或多个数字  
string = '123 dollars is the price.'  match = re.match(pattern, string)  
if match:  print('Found:', match.group())  # 输出: Found: 123  
else:  print('Not found')

re.match(pattern, string)函数尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。

import re  pattern = r'\b\w+\b'  # 匹配一个或多个单词字符组成的单词  
string = 'Hello, world! This is a test.'  matches = re.findall(pattern, string)  
print(matches)  # 输出: ['Hello', 'world', 'This', 'is', 'a', 'test']

re.findall(pattern, string)函数用于查找字符串中所有匹配正则表达式的子串,并返回一个包含这些子串的列表。

import re  pattern = r'\b\w+\b'  # 匹配一个或多个单词字符组成的单词  
string = 'Hello, world! This is a test.'  matches = re.finditer(pattern, string)  
for match in matches:  print(match.group())  # 输出每个匹配的单词

re.finditer()函数与re.findall()类似,但它返回一个迭代器,其中每个元素都是一个匹配对象。

  • 大小写敏感与不敏感查找:字符串的查找操作通常是大小写敏感的,这意味着它会区分大写和小写字母。然而,有些方法或函数允许你指定查找操作是否对大小写敏感。例如,在Python中,你可以通过将字符串转换为全小写或全大写来进行不区分大小写的查找。或者使用正则表达式时,可以指定忽略大小写的标志。
4.2.2  字符串的替换

字符串的替换涉及到在找到特定子串或字符后,将其替换为另一个子串或字符。这也是字符串处理中常见的操作之一。

  • 使用 replace() 方法:replace() 方法返回一个新的字符串,其中所有出现的指定子串都被替换为另一个子串。原始字符串不会被改变(因为字符串在Python中是不可变的)。
s = "Hello, world!"  
new_s = s.replace("world", "Python")  
print(new_s)  # 输出: Hello, Python!  # 也可以指定替换次数  
new_s = s.replace("l", "x", 1)  
print(new_s)  # 输出: Hexlo, world!
  • 使用正则表达式 (re 模块):使用 re.sub() 方法可以进行基于正则表达式的替换。对于更复杂的替换需求,同样可以使用正则表达式。通过正则表达式,你可以定义复杂的匹配模式,并指定如何将匹配到的子串替换为新的子串。这个方法接受一个正则表达式模式、一个替换字符串和一个原始字符串作为参数,并返回替换后的新字符串。
import re  s = "Hello, world! This is a Python string."  
new_s = re.sub(r"Python", "Ruby", s)  
print(new_s)  # 输出: Hello, world! This is a Ruby string.

re.sub() 的第一个参数是正则表达式模式,第二个参数是替换字符串,第三个参数是原始字符串。你也可以提供第四个参数来限制替换次数。

  • 全局替换与局部替换:在进行字符串替换时,你可能需要替换所有匹配的子串(全局替换),或者只替换第一个匹配的子串(局部替换)。这通常可以通过设置替换方法的参数来实现。例如,在Python的replace()方法中,如果你不提供替换次数的参数,那么它会默认替换所有匹配的子串。如果你提供了一个具体的次数参数,那么它只会替换指定次数的匹配子串。

综上所述,字符串的查找与替换是字符串处理中的基本操作,不同的编程语言提供了丰富的方法和函数来支持这些操作。在实际应用中,你可以根据具体需求选择合适的方法来实现字符串的查找与替换功能。

4.3  字符串的分割

字符串的分割方法主要有以下几种:

字符串的分割方法主要有以下几种:

  • 使用split()方法split()方法可以将一个字符串按照指定的分隔符切分成多个子串,并返回一个列表。如果不指定分隔符,则默认按照所有的空字符(包括空格、换行、制表符等)进行分割。split()方法一次只可以使用一个符号进行字符串分割操作。
​s = 'apple,banana,cherry'  
list_s = s.split(',')  # 分割字符串  
print(list_s)  # 输出 ['apple', 'banana', 'cherry']  
  • 使用正则表达式模块re.split()方法:当需要在字符串中根据多个字符或复杂的模式进行分割时,可以使用re.split()方法。它接受一个正则表达式作为分隔符,并返回分割后的字符串列表。
import re
e = "852317006@qq.com"
e_list = re.split('@|\.', e)
print(e_list)  # 输出 ['852317006', 'qq', 'com']

上例中,'@|\.' 是一个正则表达式,其中 | 表示“或”的意思,因此它会匹配 @ 或者 .字符。 .在正则表达式中是一个特殊字符,表示匹配任何字符(除了换行符),所以要在 . 前面加上反斜杠\来进行转义,使其表示实际的 .字符。

  • 使用字符串的partition()rpartition()方法partition()方法根据指定的分隔符将字符串划分为三部分,并返回一个包含这三部分的元组。分隔符前的内容为元组的第一个元素,分隔符本身为第二个元素,分隔符后的内容为第三个元素。如果没有找到分隔符,则返回原始字符串和两个空字符串。rpartition()partition()类似,但它是从字符串的右侧开始搜索分隔符。
e = "852317006@qq.com"
e_tuple = e.partition('@')
print(e_tuple)  # 输出 ('852317006', '@', 'qq.com')right_e_tuple = e.rpartition('@')
print(right_e_tuple)  # # 输出 ('852317006', '@', 'qq.com')no_separator_tuple = e.partition(',')
print(no_separator_tuple)  # 输出 ('852317006@qq.com', '', '')

以上是几种常见的字符串分割方法,它们可以根据不同的需求灵活选择。在使用时,要注意理解各种方法的特点和用法,以确保得到正确的分割结果。

4.4  字符串的连接

字符串的连接方法有多种,以下是其中的几种常见方法:

  • 使用加号(+):在Python中,可以直接使用加号(+)来连接两个或多个字符串。例如:

s1 = "hello"  
s2 = "world"  
s3 = s1 + " " + s2  
print(s3)  # 输出:hello world

需要注意的是,虽然加号(+)在这里看起来像运算符重载,但实际上在Python中,字符串的连接是通过加号(+)这个语法糖来实现的,而不是真正的运算符重载。

  • 使用join方法:字符串对象有一个join()方法,可以接受一个字符串列表,然后用调用该方法的字符串依次连接列表中每一个元素。例如:
str_list = ['hello', 'world']s1 = ' '.join(str_list)  # 用空格连接列表中的字符串
print(s1)  # 输出:hello worlds2 = '-'.join(str_list)  # 用 - 连接列表中的字符串
print(s2)  # 输出:hello-world

 在这个例子中,空格字符串' '和 '-' 被用作连接符,将列表中的每个字符串连接起来。

  • 使用format方法:Python的字符串 format 方法也可以用于字符串的连接和格式化。例如:

name = "Alice"  
age = 25  
s = "My name is {} and I am {} years old.".format(name, age)  
print(s)  # 输出:My name is Alice and I am 25 years old.

在这个例子中,大括号{}是占位符,format方法会根据传入的参数依次替换这些占位符。

  • 使用f-string:在Python 3.6及以上版本,可以使用f-string进行字符串的格式化,它提供了一种简洁且易读的方式来嵌入表达式到字符串字面量中。例如: 
name = "Alice"  
age = 25  
s = f"My name is {name} and I am {age} years old."  
print(s)  # 输出:My name is Alice and I am 25 years old.

在这个例子中,大括号{}内部直接写入了变量名,Python会自动用这些变量的值替换掉大括号。

以上就是一些常见的字符串连接方法,每种方法都有其适用的场景,可以根据具体需求选择使用。

4.5  除字符串的空白字符
s = '   hello world   '  
s_strip = s.strip()  # 去除字符串两侧的空白字符  
print(s_strip)  # 输出 'hello world'

除了strip()方法用于去除字符串两侧的空白字符外,还有lstrip()rstrip()分别用于去除左侧和右侧的空白字符。 

4.6  字符串与字节串的转换

字符串和字节串(bytes)是两种不同的数据类型,有时需要进行转换。

s = 'hello'  
bytes_s = s.encode('utf-8')  # 字符串转换为字节串  
print(bytes_s)  # 输出 b'hello'  str_s = bytes_s.decode('utf-8')  # 字节串转换为字符串  
print(str_s)  # 输出 'hello'
4.7  is*系列方法

这些方法用于检查字符串的某些特性。

s = 'hello'  
print(s.isalpha())  # 检查字符串是否只包含字母,返回 True 或 False  
print(s.isdigit())  # 检查字符串是否只包含数字,返回 True 或 False  
print(s.islower())  # 检查字符串是否全部小写,返回 True 或 False  
print(s.isupper())  # 检查字符串是否全部大写,返回 True 或 False  
print(s.isspace())  # 检查字符串是否只包含空白字符,返回 True 或 False
4.8  其他常用方法
s = 'hello world'  # 返回字符串的长度  
print(len(s))  # 输出 11  # 返回字符串的副本,其中所有小写字符转换为大写,所有大写字符转换为小写  
print(s.swapcase())  # 输出 'hELLO wORLD'  # 返回字符串的副本,其中开头和结尾的指定前缀和后缀被移除  
print(s.strip('he '))  # 输出 'llo world'  # 检查字符串是否以指定的前缀或后缀结尾  
print(s.startswith('hello'))  # 输出 True  
print(s.endswith('world'))  # 输出 True  

字符串是Python中非常基础和重要的数据类型之一,掌握其基本操作和常用方法对于编写高效、清晰的代码至关重要。通过本教程的学习,你应该对Python中的字符串有了更深入的了解,并能够在实际编程中灵活运用。记得在实践中不断尝试和探索,以加深对字符串处理的理解和应用能力。

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

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

相关文章

linux系统安装docker

docker安装 docker安装自带源安装docker版本和官方源安装国内源安装新版docker生产docker的环境配置登入登出docker hub国内镜像源 docker安装 自带源安装 CentOS 7 中 Docker 的安装: Docker 软件包已经包括在默认的 CentOS-Extras 软件源(联网使用centos7u2自带网络Yum源)里…

计算机网络(基础篇)复习笔记——体系结构/协议基础(持续更新中......)

目录 1 计算机网络基础相关技术Rip 路由更新操作 2 体系结构(OSI 7层, TCP/IP4层)应用层运输层网络层IPv4无分类域间路由选择 CIDRIPV6 数据链路层循环冗余校验CRC协议设备 物理层传输媒体信道复用技术宽带接入技术数据通信 3 网络局域网(以太网Ethernet) 4 通信过程编码:信道极…

vue router 解决路由带参数跳转时出现404问题

我的页面是从一个vue页面router跳转到另一个vue页面&#xff0c;并且利用windows.open() 浏览器重新创建一个页签。但是不知道为什么有时候可以有时候又不行&#xff0c;经过反复测试与分析&#xff0c;最终发现是因为有一个参数的值里包含了小数点., 小数点是浏览器合法字符&a…

Pytest测试中的临时目录与文件管理!

在Pytest测试框架中&#xff0c;使用临时目录与文件是一种有效的测试管理方式&#xff0c;它能够确保测试的独立性和可重复性。在本文中&#xff0c;我们将深入探讨如何在Pytest中利用临时目录与文件进行测试&#xff0c;并通过案例演示实际应用。 为什么需要临时目录与文件&a…

#KEIL使用

关于在调试时&#xff0c;有些局部变量值无法在窗口中查看报错“not in scope"&#xff0c;是被优化掉了&#xff0c;降低优化等级即可。 参考博客&#xff1a; KeilMDK 开发过程中遇到一些奇怪问题记录_keil遇到了不正当的冲突-CSDN博客

Java高频面试之异常篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 finally 块中的代码什么时候被执行&#xff1f; &#xff08;1&#xff09;如果try{}语句块中有return语句&#xff0c;而finally{}语句块中没有return语句时&#xff0c;finally{}块中的代码在return语…

全国保护性耕作/常规耕作农田分类数据集

基于Sentinel-2遥感产品&#xff0c;使用来自文献调研和目视解译产生的保护性/常规耕作样本点&#xff0c;通过交叉验证方法训练随机森林分类器&#xff0c;生成了2016-2020年全国保护性耕作/常规耕作农田分类数据集。分类代码&#xff1a;0值代表非农田&#xff0c;1值表示第一…

“轻松入门Electron:一步步构建梦想中的桌面软件

在数字化的浪潮中&#xff0c;桌面应用依旧占据着其独特而重要的位置&#xff0c;不论是在企业解决方案、专业工具软件还是个性化应用领域中都是如此。随着技术的演进&#xff0c;创建这些应用的过程已经变得更为简单和可行&#xff0c;尤其是随着Electron等框架的出现。Electr…

k8s中pod组件简介

背景 k8s中pod是很重要的概念&#xff0c;他是k8s调度的最小单位&#xff0c;和我们以往的以docker容器为调度单位是不一样的&#xff0c;那么为什么k8s会以pod为调度单位而不是以更小的docker容器为调度单位呢? pod组件 pod是一个逻辑的概念&#xff0c;其中可以包含多个d…

R语言及其开发环境简介

R语言及其开发环境简介 R 语言历史 R 语言来自 S 语言&#xff0c;是 S 语言的一个变种。S语言由贝尔实验室研究开发&#xff0c;著名的 C 语言、Unix 系统也是贝尔实验室开发的。R 属于 GNU 开源软件&#xff0c;最初发布于1997年&#xff0c;实现了与 S 语言基本相同的功能…

【异常处理】sbt构建Chisel库时出现extracting structure failed:build status:error的解决办法

文章目录 报错背景&#xff1a;解决思路&#xff1a;①IDEA中配置本地的SBT进行下载②更改下载源为华为的镜像站1. 修改sbtconfig.txt2. 增加repositories文件 ③查看报错信息 总结整理的Scala-Chisel-Chiseltest版本信息对应表 报错背景&#xff1a; 最近在写Chisel时&#x…

K8s-MySQL主从集群

K8s-MySQL主从集群 引言 该案例代码均可从https://github.com/WeiXiao-Hyy/k8s_example 获取&#xff0c;欢迎Star&#xff01; 需求 一个“主从复制”的MySQL集群有一个主节点Master有多个从节点Slave从节点需要能水平扩展所以写操作只能在主节点上执行读操作可以在所有节点…

Java组合模式在项目中使用场景

组合模式 一、介绍二、人员管理系统使用案例 一、介绍 将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用都是相同的。 组合模式主要由以下几个部分构成&#xff1a; Component&#xff08;组件&#xff09;&#xff1a;定义…

Navicat Premium:掌控数据库的强大工具

在当今数字化的时代&#xff0c;数据管理变得越来越重要。无论您是数据库管理员、开发人员还是普通用户&#xff0c;找到一个高效、易用的数据库管理工具是至关重要的。Navicat Premium for Mac/Win 就是这样一款强大的多协议数据库管理工具&#xff0c;它将为您的数据库管理体…

突破编程_C++_设计模式(组合模式)

1 组合模式的基本概念 C中的组合模式是一种对象结构型模式&#xff0c;它将多个对象组合成树形结构&#xff0c;以表示具有整体-部分关系的层次结构。在这个模式中&#xff0c;对单个对象&#xff08;叶子对象&#xff09;与组合对象&#xff08;容器对象&#xff09;的使用具…

HPE ProLiant MicroServer Gen8 RAID 1 扩容、故障恢复探索

声明&#xff1a;本探索只针对HP Microserver Gen8 Smart Array B120i板载阵列卡组建RAID 1&#xff08;不是RAID 10&#xff09;&#xff0c;不同阵列卡结果可能会不同&#xff0c;请谨慎操作&#xff0c;本人不对你操作后导致的任何数据丢失或者损失承担任何责任&#xff0c;…

kafka Interceptors and Listeners

Interceptors ProducerInterceptor https://www.cnblogs.com/huxi2b/p/7072447.html Producer拦截器(interceptor)是个相当新的功能&#xff0c;它和consumer端interceptor是在Kafka 0.10版本被引入的&#xff0c;主要用于实现clients端的定制化控制逻辑。 对于producer而言&…

Java SE入门及基础(29)

第三节 访问修饰符 1. 概念 访问修饰符就是控制访问权限的修饰符号 2. 类的访问修饰符 类的访问修饰符只有两种&#xff1a;public 修饰符和默认修饰符&#xff08;不写修饰符就是默认&#xff09; public 修饰符修饰类表示类可以公开访问。默认修饰符修饰类表示该类只能…

融资项目——网关微服务

1. 网关的路由转发功能 在前后端分离的项目中&#xff0c;网关服务可以将前端的相关请求转发到相应的后端微服务中。 2. 网关微服务的配置 首先需要创建一个网关微服务&#xff0c;并添加依赖。 <!-- 网关 --><dependency><groupId>org.springframework.cl…

wpf中的Border和Background

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Border和Background是两个非常重要的属性&#xff0c;它们通常用于定义用户界面元素的外观样式。 Border&#xff1a; Border 是一个控件&#xff0c;它本身是一个装饰器&#xff0c;允许您为任何…