Python--控制台获取输入与正则表达式

  • 前言
  • 一、控制台获取输入
    • 1.1 字符串输入
    • 1.2 整数输入
    • 1.3 浮点数输入
    • 1.4 布尔值输入
    • 1.5 列表输入
    • 1.6 汇总
  • 二、正则表达式
    • 2.1 匹配数字
    • 2.2 模式检查
    • 2.3 替换字符
    • 2.4 切分字符串
    • 2.5 搜索并提取匹配的部分
    • 2.6 使用捕获组提取匹配的部分
    • 2.7 非贪婪匹配
    • 2.8 忽略大小写匹配
    • 2.9 使用预定义字符类
    • 2.10 自定义字符类
    • 2.11 零宽断言
    • 2.12 多行模式
    • 2.13 嵌入式修饰符
    • 2.14 替换时使用回调函数
    • 2.15 非捕获组
    • 2.16 前向引用(匹配重复子字符串)
    • 2.17 替换中使用命名分组引用
    • 2.18 回溯引用
    • 2.19 负向前向引用
    • 2.20 嵌入条件匹配
    • 2.21 后向引用断言
    • 2.22 零宽负向断言
    • 2.23 转义序列匹配非打印字符
    • 2.24 贪婪与非贪婪匹配
    • 2.25 汇总

前言

在Python编程中,控制台输入和正则表达式是两个重要而实用的概念。掌握这两个技巧可以帮助我们更灵活地处理用户输入以及对文本进行复杂的匹配和处理。本文中将详细介绍Python中如何通过控制台获取用户输入以及如何使用正则表达式进行文本处理。深入探讨输入类型转换、异常处理、多个输入值的存储等方面,并分享一些常见的正则表达式用法,如匹配数字、替换字符串、提取模式内容等。

一、控制台获取输入

1.1 字符串输入

# 输入字符串并赋值给变量str1:
str1 = input("请输入一个字符串: ")

1.2 整数输入

# 输入整数并赋值给变量count:
count = int(input("请输入一个整数: "))

1.3 浮点数输入

# 输入布尔值(True/False)并赋值给变量is_true:
is_true = bool(input("请输入一个布尔值(True/False): "))

1.4 布尔值输入

# 输入字符串并赋值给变量str1:
str1 = input("请输入一个字符串: ")

请注意,bool()函数将任何非空字符串解释为True,空字符串解释为False。

1.5 列表输入

# 输入多个数字以空格分隔,并将它们作为列表存储在变量list1中:
list1 = input("请输入多个数字(以空格分隔): ").split()
list1 = [int(num) for num in list1]  # 将输入的数字转换为整数类型
print(list1)

这里使用了split()方法将输入的字符串切分成一个字符串列表,并使用列表推导式将字符串转换为整数类型。

# 输入多个字符串以逗号分隔,并将它们作为列表存储在变量str_list中:
str_list = input("请输入多个字符串(以逗号分隔): ").split(',')

这里使用了split()方法将输入的字符串切分成一个字符串列表,以逗号为分隔符。

1.6 汇总

# 在Python中,可以使用input()函数从控制台获取用户的输入。然后,根据需要进行类型转换和赋值。下面是一些示例:# 输入字符串并赋值给变量str1:
str1 = input("请输入一个字符串: ")
# 输入整数并赋值给变量count:
count = int(input("请输入一个整数: "))
# 输入浮点数并赋值给变量float_num:
float_num = float(input("请输入一个浮点数: "))
# 输入布尔值(True/False)并赋值给变量is_true:
is_true = bool(input("请输入一个布尔值(True/False): "))
# 请注意,bool()函数将任何非空字符串解释为True,空字符串解释为False。# 输入多个数字以空格分隔,并将它们作为列表存储在变量list1中:
list1 = input("请输入多个数字(以空格分隔): ").split()
list1 = [int(num) for num in list1]  # 将输入的数字转换为整数类型
print(list1)
# 这里使用了split()方法将输入的字符串切分成一个字符串列表,并使用列表推导式将字符串转换为整数类型。# 输入多个字符串以逗号分隔,并将它们作为列表存储在变量str_list中:
str_list = input("请输入多个字符串(以逗号分隔): ").split(',')
# 这里使用了split()方法将输入的字符串切分成一个字符串列表,以逗号为分隔符。# 记住,在处理用户输入时要小心异常情况,例如错误的类型转换或无效的输入。

二、正则表达式

2.1 匹配数字

# 导入re模块:
import re
# 匹配字符串中的数字:
pattern = r'\d+'  # 匹配连续的数字
text = "abc123def456ghi"
result = re.findall(pattern, text)
print(result)  # 输出: ['123', '456']

2.2 模式检查

# 检查字符串是否符合特定的模式:
pattern = r'^[A-Za-z0-9]+$'  # 检查是否只包含字母和数字
text = "abc123"
result = re.match(pattern, text)
if result:print("字符串符合要求")
else:print("字符串不符合要求")

2.3 替换字符

# 替换字符串中的部分内容:
pattern = r'\s+'  # 匹配连续的空格
text = "Hello   World"
new_text = re.sub(pattern, ' ', text) #表示把多个空格替换成一个空格
print(new_text)  # 输出: "Hello World"

2.4 切分字符串

# 切分字符串:
pattern = r'[,\s]+'  # 匹配逗号或空格
text = "apple,banana,orange"
result = re.split(pattern, text)
print(result)  # 输出: ['apple', 'banana', 'orange']

2.5 搜索并提取匹配的部分

# 搜索并提取匹配的部分:
pattern = r'\d{3}-\d{4}-\d{4}'  # 匹配电话号码的模式
text = "我的电话号码是:123-4567-8901"
result = re.search(pattern, text)
if result:print(result.group())  # 输出: '123-4567-8901'

注意: re.search() 与re.match()返回第一个匹配项,与 re.search() 不同的是,re.match() 方法只匹配字符串的开头部分。因此,如果需要输出所有匹配项,应该使用 re.findall() 方法。

2.6 使用捕获组提取匹配的部分

# 使用捕获组提取匹配的部分:
pattern = r'(\d{3})-(\d{4})-(\d{4})'  # 匹配电话号码的模式,并使用捕获组分别提取区号、中间号和尾号
text = "我的电话号码是:123-4567-8901"
result = re.search(pattern, text)
if result:area_code = result.group(1)middle_number = result.group(2)last_number = result.group(3)print(area_code, middle_number, last_number)  # 输出: '123', '4567', '8901'    

2.7 非贪婪匹配

# 非贪婪匹配(匹配最短的字符串):
pattern = r'<.*?>'  # 非贪婪匹配尖括号之间的内容
text = "<p>这是一个段落</p><p>另一个段落</p>"
result = re.findall(pattern, text)
print(result)  # 输出: ['<p>', '</p>', '<p>', '</p>']

2.8 忽略大小写匹配

# 忽略大小写匹配:
pattern = r'python'
text = "Python is a programming language"
result = re.findall(pattern, text, re.IGNORECASE)
print(result)  # 输出: ['Python']

2.9 使用预定义字符类

# 使用预定义字符类:
pattern = r'\w+'  # 匹配字母、数字和下划线
text = "Hello 123_world*&"
result = re.findall(pattern, text)
print(result)  # 输出: ['Hello', '123_world']

2.10 自定义字符类

# 自定义字符类:
pattern = r'[aeiou]'  # 匹配元音字母
text = "apple orange banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['a', 'e', 'o', 'a', 'a']

2.11 零宽断言

# 零宽断言(Lookahead/Lookbehind):零宽断言允许你在匹配字符串时指定一些条件,但不会将这些条件包含在最终的匹配结果中。例如,可以使用正向零宽断言来匹配前面是特定模式的文本:
pattern = r'\w+(?=ing)'  # 匹配以 "ing" 结尾的单词的前面部分
text = "running jumping swimming"
result = re.findall(pattern, text)
print(result)  # 输出: ['runn', 'jump']

2.12 多行模式

# 多行模式:使用多行模式可以处理多行文本,其中 ^ 和 $ 元字符匹配每行的开头和结尾。通过传递 re.MULTILINE 标志给 re.compile() 函数或使用 re.M 缩写标志来启用多行模式:
pattern = r'^\d+$'  # 匹配只包含数字的行
text = "123\nabc\n456\n789"
result = re.findall(pattern, text, re.MULTILINE)
print(result)  # 输出: ['123', '456', '789']

2.13 嵌入式修饰符

# 嵌入式修饰符:可以在正则表达式中使用嵌入式修饰符来改变匹配的行为。例如,使用 (?i) 来忽略大小写匹配:
pattern = r'(?i)python'  # 忽略大小写匹配 "python"
text = "Python is a programming language"
result = re.findall(pattern, text)
print(result)  # 输出: ['Python']

2.14 替换时使用回调函数

# 替换时使用回调函数:使用 re.sub() 函数进行替换时,可以传递一个回调函数来处理每个匹配项,并返回替换后的结果。这允许你根据匹配到的内容动态生成替换值:
def replace_func(match):num = int(match.group(0))return str(num*2)pattern = r'\d+'
text = "123423w 2w 3yui 4 5"
result = re.sub(pattern, replace_func, text)
print(result) #246846w 4w 6yui 8 10

2.15 非捕获组

# 非捕获组:有时你可能需要使用括号进行分组,但不需要捕获该组的内容。在这种情况下,可以使用非捕获组 (?:...):
pattern = r'(?:https?://)?(www\.[A-Za-z]+\.[A-Za-z]+)'
text = "Visit my website at www.example.com"
result = re.findall(pattern, text)
print(result)  # 输出: ['www.example.com']

2.16 前向引用(匹配重复子字符串)

# 前向引用:前向引用允许你引用之前已经匹配的内容。这在匹配重复的子字符串时非常有用:
pattern = r'(\w+)\s+\1'  # 匹配重复的单词
text = "apple apple banana banana cherry cherry"
result = re.findall(pattern, text)
print(result)  # 输出: ['apple', 'banana', 'cherry']

2.17 替换中使用命名分组引用

# 替换中使用命名分组引用:可以使用命名分组 (P<name>...) 来指定一个命名的捕获组,并在替换时使用 \\g<name> 引用该组的内容:
pattern = r'(?P<first>\d+)\s+(?P<second>\d+)'
text = "10 20"
result = re.sub(pattern, '\\g<second> \\g<first>', text)
print(result)  # 输出: "20 10"

2.18 回溯引用

# 回溯引用:使用回溯引用可以匹配重复的模式,并在替换时保留其中一个副本:
pattern = r'(\d+)-\1'  # 匹配连续重复的数字,例如 "22-22"
text = "11-11 22-22 33-33"
result = re.findall(pattern, text)
print(result)  # 输出: ['11', '22', '33']

2.19 负向前向引用

# 负向前向引用:负向前向引用允许你指定一个模式,该模式不能在当前位置之后出现。可以使用 (?!...) 来表示负向前向引用:
pattern = r'\b(?!un)\w+\b'  # 匹配不以 "un" 开头的单词
text = "happy unhappy apple banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['happy', 'apple', 'banana']

2.20 嵌入条件匹配

# 嵌入条件匹配:使用 (?if:...) 来实现条件匹配。可以根据条件选择不同的模式进行匹配:
pattern = r'(?i)(?:(?<=Mr\.)|(?<=Ms\.)|(?<=Mrs\.))\s\w+'
text = "Hello Mr. Smith, Ms. Johnson, and Mrs. Davis"
result = re.findall(pattern, text)
print(result)  # 输出: ['Smith', 'Johnson', 'Davis']

2.21 后向引用断言

# 后向引用断言:使用 (?<=(...)) 来实现后向引用断言,即在匹配的位置之前必须满足某个条件:
pattern = r'\b(\w+)\b(?<=(ing))'  # 匹配以 "ing" 结尾的单词中的前面部分
text = "running jumping swimming"
result = re.findall(pattern, text)
print(result)  # 输出: ['runn', 'jump']

2.22 零宽负向断言

# 零宽负向断言:使用 (?<!...) 来实现零宽负向断言,即在当前位置之前不能满足某个条件:
pattern = r'(?<!un)\b\w+\b'  # 匹配不以 "un" 开头的单词
text = "happy unhappy apple banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['happy', 'apple', 'banana']

2.23 转义序列匹配非打印字符

# 非打印字符:可以使用转义序列来匹配非打印字符,如制表符 \t、换行符 \n 等:
pattern = r'abc\tdef\nghi'
text = "abc\tdef\nghi"
result = re.findall(pattern, text)
print(result)  # 输出: ['abc\tdef\nghi']

2.24 贪婪与非贪婪匹配

# 贪婪与非贪婪匹配:在重复模式中,默认情况下是贪婪匹配,尽可能多地匹配。但可以使用 ? 来指定非贪婪匹配,尽可能少地匹配:
s = "aaaabaaaa"
pattern = r'a.*a'  # 贪婪匹配模式
match = re.search(pattern, s)
if match:print(match.group())  # 输出:'aaaabaaaa's = "aaaabaaaa"
pattern = r'a.*?a'  # 非贪婪匹配模式
match = re.search(pattern, s)
if match:print(match.group())  # 输出:'aaa'

2.25 汇总

# 在Python中,可以使用正则表达式模块re来进行字符串的匹配和处理。下面是一些常见的正则处理示例:
# 导入re模块:
import re
# 匹配字符串中的数字:
pattern = r'\d+'  # 匹配连续的数字
text = "abc123def456ghi"
result = re.findall(pattern, text)
print(result)  # 输出: ['123', '456']# 检查字符串是否符合特定的模式:
pattern = r'^[A-Za-z0-9]+$'  # 检查是否只包含字母和数字
text = "abc123"
result = re.match(pattern, text)
if result:print("字符串符合要求")
else:print("字符串不符合要求")# 替换字符串中的部分内容:
pattern = r'\s+'  # 匹配连续的空格
text = "Hello   World"
new_text = re.sub(pattern, ' ', text) #表示把多个空格替换成一个空格
print(new_text)  # 输出: "Hello World"# 切分字符串:
pattern = r'[,\s]+'  # 匹配逗号或空格
text = "apple,banana,orange"
result = re.split(pattern, text)
print(result)  # 输出: ['apple', 'banana', 'orange']# 搜索并提取匹配的部分:
pattern = r'\d{3}-\d{4}-\d{4}'  # 匹配电话号码的模式
text = "我的电话号码是:123-4567-8901"
result = re.search(pattern, text)
if result:print(result.group())  # 输出: '123-4567-8901'# 使用捕获组提取匹配的部分:
pattern = r'(\d{3})-(\d{4})-(\d{4})'  # 匹配电话号码的模式,并使用捕获组分别提取区号、中间号和尾号
text = "我的电话号码是:123-4567-8901"
result = re.search(pattern, text)
if result:area_code = result.group(1)middle_number = result.group(2)last_number = result.group(3)print(area_code, middle_number, last_number)  # 输出: '123', '4567', '8901'    # 非贪婪匹配(匹配最短的字符串):
pattern = r'<.*?>'  # 非贪婪匹配尖括号之间的内容
text = "<p>这是一个段落</p><p>另一个段落</p>"
result = re.findall(pattern, text)
print(result)  # 输出: ['<p>', '</p>', '<p>', '</p>']# 忽略大小写匹配:
pattern = r'python'
text = "Python is a programming language"
result = re.findall(pattern, text, re.IGNORECASE)
print(result)  # 输出: ['Python']# 使用预定义字符类:
pattern = r'\w+'  # 匹配字母、数字和下划线
text = "Hello 123_world*&"
result = re.findall(pattern, text)
print(result)  # 输出: ['Hello', '123_world']# 自定义字符类:
pattern = r'[aeiou]'  # 匹配元音字母
text = "apple orange banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['a', 'e', 'o', 'a', 'a']# 零宽断言(Lookahead/Lookbehind):零宽断言允许你在匹配字符串时指定一些条件,但不会将这些条件包含在最终的匹配结果中。例如,可以使用正向零宽断言来匹配前面是特定模式的文本:
pattern = r'\w+(?=ing)'  # 匹配以 "ing" 结尾的单词的前面部分
text = "running jumping swimming"
result = re.findall(pattern, text)
print(result)  # 输出: ['runn', 'jump']# 多行模式:使用多行模式可以处理多行文本,其中 ^ 和 $ 元字符匹配每行的开头和结尾。通过传递 re.MULTILINE 标志给 re.compile() 函数或使用 re.M 缩写标志来启用多行模式:
pattern = r'^\d+$'  # 匹配只包含数字的行
text = "123\nabc\n456\n789"
result = re.findall(pattern, text, re.MULTILINE)
print(result)  # 输出: ['123', '456', '789']# 嵌入式修饰符:可以在正则表达式中使用嵌入式修饰符来改变匹配的行为。例如,使用 (?i) 来忽略大小写匹配:
pattern = r'(?i)python'  # 忽略大小写匹配 "python"
text = "Python is a programming language"
result = re.findall(pattern, text)
print(result)  # 输出: ['Python']# 替换时使用回调函数:使用 re.sub() 函数进行替换时,可以传递一个回调函数来处理每个匹配项,并返回替换后的结果。这允许你根据匹配到的内容动态生成替换值:
def replace_func(match):num = int(match.group(0))return str(num*2)pattern = r'\d+'
text = "123423w 2w 3yui 4 5"
result = re.sub(pattern, replace_func, text)
print(result) #246846w 4w 6yui 8 10# 非捕获组:有时你可能需要使用括号进行分组,但不需要捕获该组的内容。在这种情况下,可以使用非捕获组 (?:...):
pattern = r'(?:https?://)?(www\.[A-Za-z]+\.[A-Za-z]+)'
text = "Visit my website at www.example.com"
result = re.findall(pattern, text)
print(result)  # 输出: ['www.example.com']# 前向引用:前向引用允许你引用之前已经匹配的内容。这在匹配重复的子字符串时非常有用:
pattern = r'(\w+)\s+\1'  # 匹配重复的单词
text = "apple apple banana banana cherry cherry"
result = re.findall(pattern, text)
print(result)  # 输出: ['apple', 'banana', 'cherry']# 替换中使用命名分组引用:可以使用命名分组 (P<name>...) 来指定一个命名的捕获组,并在替换时使用 \\g<name> 引用该组的内容:
pattern = r'(?P<first>\d+)\s+(?P<second>\d+)'
text = "10 20"
result = re.sub(pattern, '\\g<second> \\g<first>', text)
print(result)  # 输出: "20 10"# 回溯引用:使用回溯引用可以匹配重复的模式,并在替换时保留其中一个副本:
pattern = r'(\d+)-\1'  # 匹配连续重复的数字,例如 "22-22"
text = "11-11 22-22 33-33"
result = re.findall(pattern, text)
print(result)  # 输出: ['11', '22', '33']# 负向前向引用:负向前向引用允许你指定一个模式,该模式不能在当前位置之后出现。可以使用 (?!...) 来表示负向前向引用:
pattern = r'\b(?!un)\w+\b'  # 匹配不以 "un" 开头的单词
text = "happy unhappy apple banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['happy', 'apple', 'banana']# 嵌入条件匹配:使用 (?if:...) 来实现条件匹配。可以根据条件选择不同的模式进行匹配:
pattern = r'(?i)(?:(?<=Mr\.)|(?<=Ms\.)|(?<=Mrs\.))\s\w+'
text = "Hello Mr. Smith, Ms. Johnson, and Mrs. Davis"
result = re.findall(pattern, text)
print(result)  # 输出: ['Smith', 'Johnson', 'Davis']# 后向引用断言:使用 (?<=(...)) 来实现后向引用断言,即在匹配的位置之前必须满足某个条件:
pattern = r'\b(\w+)\b(?<=(ing))'  # 匹配以 "ing" 结尾的单词中的前面部分
text = "running jumping swimming"
result = re.findall(pattern, text)
print(result)  # 输出: ['runn', 'jump']# 零宽负向断言:使用 (?<!...) 来实现零宽负向断言,即在当前位置之前不能满足某个条件:
pattern = r'(?<!un)\b\w+\b'  # 匹配不以 "un" 开头的单词
text = "happy unhappy apple banana"
result = re.findall(pattern, text)
print(result)  # 输出: ['happy', 'apple', 'banana']# 非打印字符:可以使用转义序列来匹配非打印字符,如制表符 \t、换行符 \n 等:
pattern = r'abc\tdef\nghi'
text = "abc\tdef\nghi"
result = re.findall(pattern, text)
print(result)  # 输出: ['abc\tdef\nghi']# 贪婪与非贪婪匹配:在重复模式中,默认情况下是贪婪匹配,尽可能多地匹配。但可以使用 ? 来指定非贪婪匹配,尽可能少地匹配:
s = "aaaabaaaa"
pattern = r'a.*a'  # 贪婪匹配模式
match = re.search(pattern, s)
if match:print(match.group())  # 输出:'aaaabaaaa's = "aaaabaaaa"
pattern = r'a.*?a'  # 非贪婪匹配模式
match = re.search(pattern, s)
if match:print(match.group())  # 输出:'aaa'

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

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

相关文章

【Java高级技术】单元测试——概述和快速入门

单元测试——概述和Junit框架快速入门 1.概述 就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其进行正确性测试 可以用来对方法进行测试&#xff0c;它是第三方公司开源出来的&#xff08;很多开发工具已经集成了Junit框架&#xff0c;比如I…

【计算机】CPU,芯片以及操作系统概述

1.CPU 什么是CPU? CPU&#xff08;Central Processing Unit&#xff09;是计算机系统的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元&#xff0c;相当于系统的“大脑”。 CPU的工作流程&#xff1f; CPU 的工作流程分为以下 5 个阶段&#xff1a;取指令…

苹果ios系统ipa文件企业签名是什么?优势是什么?什么场合需要应用到?

企业签名是苹果开发者计划中的一种签名类型&#xff0c;允许企业开发者签署和分发企业内部使用的应用程序&#xff0c;而无需通过App Store进行公开发布。通过企业签名&#xff0c;企业可以在内部部署自己的应用程序&#xff0c;以满足特定的业务需求。 企业签名能够做到以下…

【JVM】 类加载机制、类加载器、双亲委派模型详解

文章目录 前言一、类加载机制二、类加载器三、双亲委派模型总结 前言 &#x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 &#x1f4d7;小陈还在持续努力学习编程, 努力通过博客输出所学知识 &#x1f4d8;如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 &#x1f4d…

【改进哈里鹰算法(NCHHO)】使用混沌和非线性控制参数来提高哈里鹰算法的优化性能,解决车联网相关的路由问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

嵌入式Linux应用开发-驱动大全-同步与互斥①

嵌入式Linux应用开发-驱动大全-同步与互斥① 第一章 同步与互斥①1.1 内联汇编1.1.1 C语言实现加法1.1.2 使用汇编函数实现加法1.1.3 内联汇编语法1.1.4 编写内联汇编实现加法1.1.5 earlyclobber的例子 1.2 同步与互斥的失败例子1.2.1 失败例子11.2.2 失败例子21.2.3 失败例子3…

【无标题】如何去掉柱状图后面的网格以及如何为柱状图设置指定颜色

在绘制柱状图时&#xff0c;通过 plt.grid(False) 可以去掉图中的网格线。将这行代码添加在 plt.show() 之前&#xff0c;即可在保存图片时去掉网格线。 import seaborn as sns import numpy as np import matplotlib.pyplot as plt import random# 准备数据 x_data [ASSISTm…

Vue3 defineProps使用

MyTag.vue <script setup> import { ref, nextTick, defineProps, defineEmits } from "vue"; const props defineProps({flag: Boolean,title: String, }); // 写成这样也可以 // const props defineProps(["flag", "title"]);const e…

互联网Java工程师面试题·MyBatis 篇·第二弹

目录 16、Xml 映射文件中&#xff0c;除了常见的 select|insert|updae|delete标签之外&#xff0c;还有哪些标签&#xff1f; 17、Mybatis 的 Xml 映射文件中&#xff0c;不同的 Xml 映射文件&#xff0c;id 是否可以重复&#xff1f; 18、为什么说 Mybatis 是半自动 ORM 映射…

2023年中国体育赛事行业现状及趋势分析:体育与科技逐步融合,推动产业高质量发展[图]

体育赛事运营是指组织体育赛事或获取赛事版权&#xff0c;并进行赛事推广营销、运营管理等一系列商业运作的运营活动。体育赛事运营相关业务主要包括赛事运营与营销、赛事版权运营两个部分。 体育赛事运营行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#x…

5.外部中断

中断初始化配置步骤&#xff1a; IO口初始化配置 开启中断总允许EA 打开某个IO口的中断允许 打开IO口的某一位的中断允许 配置该位的中断触发方式 中断函数&#xff1a; #pragma vector PxINT_VECTOR __interrupt void 函数名(void){}#pragma vector PxINT_VECTOR __int…

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 的架构设计。 版本 0.16.1 技术栈 Vite React TypeScript Yarn Husky。 脚手架原来是用的是 Create React App&#xff0c;但这个脚手架已经不维护了&#xff0c;一年多没发布新版本了。 目前市面上比较流行的 React 脚手架是 Vite&…

RabbitMQ的基本介绍

什么是MQ 本质是一个队列&#xff0c;只不过队列中存放的信息是message罢了&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递信息。在互联网架构中&#xff0c;MQ是一种非常常见的上下游“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后&#xff0c;信息发送…

嵌入式Linux应用开发-驱动大全-同步与互斥④

嵌入式Linux应用开发-驱动大全-同步与互斥④ 第一章 同步与互斥④1.5 自旋锁spinlock的实现1.5.1 自旋锁的内核结构体1.5.2 spinlock在UP系统中的实现1.5.3 spinlock在SMP系统中的实现 1.6 信号量semaphore的实现1.6.1 semaphore的内核结构体1.6.2 down函数的实现1.6.3 up函数的…

户用储能争斗:华宝新能“稳”、正浩科技“快”、安克创新“急”

便携式储能市场一片红海&#xff0c;户用储能&#xff08;家用储能&#xff09;成为储能企业新的“格斗场”。 过去两年&#xff0c;房车游、户外旅行、露营等旅游项目热度攀升&#xff0c;户外用电需求与日俱增&#xff0c;嗅觉敏锐的资本方相继加码便携储能市场&#xff0c;越…

玩转Mysql系列 - 第26篇:聊聊mysql如何实现分布式锁?

这是Mysql系列第26篇。 本篇我们使用mysql实现一个分布式锁。 分布式锁的功能 分布式锁使用者位于不同的机器中&#xff0c;锁获取成功之后&#xff0c;才可以对共享资源进行操作 锁具有重入的功能&#xff1a;即一个使用者可以多次获取某个锁 获取锁有超时的功能&#xff…

【贪心的商人】python实现-附ChatGPT解析

1.题目 贪心的商人 知识点:贪心 时间限制:1s 空间限制: 256MB 限定语言:不限 题目描述: 商人经营一家店铺,有number种商品,由于仓库限制 每件商品的最大持有数量是item[index], 每种商品的价格在每天是item_price[item_index][day], 通过对商品的买进和卖出获取利润,请给…

去外地旅游遇到的问题和心得

去外地旅游核心的问题是&#xff1a;住、行、食三块&#xff0c;由于去一个陌生的城市&#xff0c;一切都不熟悉&#xff0c;也没有认识的人&#xff0c;所以一切都需要自己解决&#xff0c;而住、行、食就成最核心的问题&#xff0c;下面分别说明&#xff1a; 1 住&#xff0…

WordPress批量给没有图片的文章自动添加图片配图

每次写文章配图巨麻烦&#xff0c;特别是有些人批量采集文章&#xff0c;不可能一个个去配图&#xff0c;那么有没有什么方法能批量给WordPress没有图片的文章自动添加图片&#xff0c;并且还要自动识别该文章有没有图片&#xff0c;如果没有图片才自动配图&#xff0c;如果有图…

用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4

由于单一系统和专有协议&#xff0c;数据集成和处理是工业物联网&#xff08;IIoT&#xff0c;又名工业 4.0 或自动化工业&#xff09;中的巨大挑战。Apache Kafka、其生态系统&#xff08;Kafka Connect、KSQL&#xff09;和 Apache PLC4X 是以可扩展、可靠和灵活的方式实现端…