学习日志011--模块,迭代器与生成器,正则表达式

news2024/12/23 4:35:55

一、python模块

在之前学习c语言时,我们学了分文件编辑,那么在python中是否存在类似的编写方式?答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处:

  1. 提高代码的可维护性‌:当代码被分成多个文件时,每个文件可以专注于实现特定的功能或模块。这使得查找和修复错误变得更加容易。可以更方便地对代码进行局部修改,而不需要浏览整个项目的代码。

  2. 增强代码的可读性‌:分文件编程允许开发者使用描述性的文件名,这些文件名能够清晰地传达文件内容或功能。每个文件的内容更加专注和精简,减少了代码的复杂性,使得其他开发者更容易理解代码的逻辑。

  3. 促进代码重用‌:将通用功能或模块独立成单独的文件,可以在多个项目或程序之间重用这些代码,而无需复制粘贴。通过导入所需的模块,可以轻松地复用代码,减少重复劳动和潜在的错误。

  4. 便于团队协作‌:在大型项目中,多个开发者可以同时编辑不同的文件,而不需要担心相互之间的冲突。使用版本控制系统(如Git)时,分文件编程使得跟踪变化、合并代码和解决冲突更加容易。

  5. 提高程序的加载速度‌:在需要时动态地导入模块,可以减少程序启动时的加载时间,因为只有在需要时才加载相关的代码。这对于大型应用程序尤其重要,可以显著提高程序的响应速度。

  6. 组织代码结构‌:通过将代码分成不同的文件,可以更容易地组织代码的结构,使其符合逻辑和功能上的划分。这有助于实现更清晰的层次结构和模块化设计。

  7. 便于单元测试‌:分文件编程使得为每个模块或功能编写单元测试变得更加容易。这有助于确保代码的正确性,并在修改代码时快速发现问题。

  8. 减少命名冲突‌:将代码分成不同的文件(模块)可以减少变量、函数和类名之间的命名冲突。每个文件可以有自己的命名空间,使得代码更加清晰和易于管理。

分文件编辑在Python编程中是一种非常有益的做法。它不仅提高了代码的质量,还使得开发和维护过程更加高效和顺畅。而这些一个个文件则在python称为模块

import

分文件编辑(模块)的关键字--import

不同文件在同一目录下时,可以直接使用import来引用该模块的内容,包括不限于函数,变量等

在Python中,如果你想要在同一个目录(文件夹)下导入一个模块,你需要确保几个关键点:

  1. 模块文件‌:确保你想要导入的文件是一个有效的Python模块,即以.py为扩展名,并且包含了你想要导入的函数、类或变量。

  2. init.py‌:如果你的模块位于一个包(包含多个模块的目录)中,确保包的目录中有一个__init__.py文件。这个文件可以是空的,但它的存在会告诉Python这个目录应该被视为一个包。对于Python 3.3及以后的版本,即使没有__init__.py文件,包导入也可以工作,但最好还是包含这个文件以保持兼容性。

  3. 导入语句‌:使用正确的导入语句。如果你想要导入同目录下的module_name.py文件中的内容,你可以简单地使用:

    import module_name
    

    或者,如果你想要导入该模块中的特定函数、类或变量,你可以使用:

    from module_name import specific_function_or_class
    

 包

什么是包

当我们使用模块的内容写代码时非常爽,可是当我们回头读代码时,看着一行行的import难免战战兢兢汗如雨下。为了让模块的引用更简洁,更直观。我们将类似的模块放入同一个文件夹内,并创建一个__init__.py作为标识符。这样的一个文件夹被称为包。这锅__init__是不是很熟悉,我们在创建类的时候也遇见过他哦

要在你的Python程序中使用包中的模块,你需要使用import语句来导入它们。你可以导入整个模块,也可以从模块中导入特定的函数、类或变量。

例如,要导入module1并使用function1,你可以这样做:

import mypackage.module1

mypackage.module1.function1()
# 输出: This is function1 from module1.

 或者,你可以直接从module1中导入function1

from mypackage.module1 import function1

function1()
# 输出: This is function1 from module1.

要导入子包中的模块,你可以使用类似的语法:

import mypackage.subpackage.module3

mypackage.subpackage.module3.function3()
# 输出: This is function3 from subpackage.module3.

或者

from mypackage.subpackage import module3

module3.function3()
# 输出: This is function3 from subpackage.module3.

在大多数情况下,只要你的包和模块位于你的脚本或当前工作目录的某个子目录中,Python就应该能够找到它们。在导入包或模块时,Python会按照sys.path列表中的目录顺序来查找它们。如果Python找不到你想要导入的包或模块,你可能需要将包含它们的目录添加到sys.path中。 

import sys

print(sys.path)

 输入这串代码后,你会得到一些文件目录

D:\\xn\\hqyj\\pythonProject\\.venv\\Lib\\site-packages'

其中这样的路径,打开后,就是存放包的地方。我们平时下载的包都存在这,你要是想的话也可以将自己定义的包放在这,这样以后不论在电脑哪里编写文件,都可以访问他们.

内置

除了自己编写或从网上下载外,python中还附带丰富的内置模块供给我们使用。

模块名称

模块描述

os

os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。

sys

sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。

time

time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。

datetime

datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。

math

math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。

json

json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。

numpy

一个用于维度数组计算的库

opencv

一个用于计算机视觉的库

matplotlib

一个用于数据可视化的库(绘图)

scikit-learn

一个用于机器学习的库

tensorflow

一个用于深度学习的库

threading

一个用于设置多线程的库

二、迭代器与生成器。

迭代器

还记得我们学习高阶函数时的map()函数吗?那是留下了一个问题,map返回了一个迭代器对象。什么是迭代器,今天我们就将解答这个问题。

迭代器是一种集合,和我们之前学的列表,集合,元组类似。不同的是我们无法直接去看到他,只有在运行时才会出现。应为他的这种特性,在编写程序时可以节省大量的内存空间,而列表等数据类型,在定义时就确认大小了。此外一个迭代器类型包含__iter__,和__next__两种方法。从他们的宛若单链表名字上我们还可以看出迭代器的特性--不可回退性。那让我们来定义一个迭代器吧

class My_iter:
    def __init__(self,start,stop,step):
        self.start = start
        self.stop = stop
        self.step = step

    def __iter__(self):
        return self

    def __next__(self):
        if self.start < self.stop:
            x = self.start
            self.start += self.step
            return x
        else:
            raise StopIteration("迭代已完成")
my_iter = My_iter(1,10,2)
try:
    while True:
        print(next(my_iter))
except Exception as e:
    print(e)

这里我仿照range编写了一个简单的迭代器__init__来接受实例的数值,__iter__用来返回自生,__next__来推进迭代器.RAISE用来抛出异常,这样子死循环时,当迭代器结束时,循环也跟着结束。根据需要可以进行更改,但一定不要少了__iter__,__next__

生成器

在python中,使用了 yield 的函数就被称为——生成器。
yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。
与普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单的理解【生成器就是一个迭代器】。
每次使用yield语句生产一个值之后,函数都将暂停执行【内存释放出来】,等待再次唤醒。
yield语句和return语句的差别就在于yield语句返回的是可迭代对象,而return返回的是不可迭代对象。
每次调用生成器的next()方法或者使用for或while循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇见yield语句。 

def create1(n):
    while n>0:
        yield n
        n -= 1
create_iter = create1(10)
for i in create_iter:
    print(i)

三、正则表达式

正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本处理工具,用于搜索、匹配和替换文本中的字符组合。它最初是由数学家Stephen Kleene在20世纪50年代提出的,作为描述字符串集合的一种方式,后来被广泛应用于编程语言和文本编辑器中。

正则表达式由一系列特殊字符和普通字符组成,这些特殊字符称为元字符(metacharacters),它们具有特殊的含义,用于匹配不同类型的字符或字符组合。例如,. 匹配任意单个字符,* 匹配前一个字符零次或多次,+ 匹配前一个字符一次或多次,[abc] 匹配方括号内的任意一个字符,`` 匹配字符串的开始,$ 匹配字符串的结束等。

通过组合这些元字符和普通字符,可以创建出复杂的模式来匹配特定的文本。例如,正则表达式 \d{3}-\d{2}-\d{4} 可以匹配美国社会保险号码的格式(如 123-45-6789),其中 \d 表示匹配任意数字,{3}、{2} 和 {4} 分别表示匹配前一个字符3次、2次和4次。

正则表达式在编程中非常有用,特别是在文本处理、数据验证、网络爬虫、日志分析等领域。许多编程语言都支持正则表达式,如Python、JavaScript、Java、Perl等,它们通常提供了内置的库或函数来处理正则表达式。

学习和使用正则表达式需要一定的时间和实践,因为正则表达式的语法和规则相对复杂。但是,一旦掌握了它的基本原理和常用模式,就可以大大提高文本处理的效率和准确性。

python中正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。

re.match()

re.match() 是 Python 中正则表达式模块 re 的一个函数,用于从字符串的开始位置匹配正则表达式。如果匹配成功,它返回一个匹配对象;否则,它返回 None

import re

# 基本格式
match_object = re.match(pattern, string, flags=0)

pattern是正则表达式,string是字符串,flags是可选参数,用来实现复杂的功能

import re

pattern = r'\d+'  # 匹配一个或多个数字
string = '123abc'

match_object = re.match(pattern, string)

if match_object:
    print('匹配成功:', match_object.group())  # 输出: 匹配成功: 123
else:
    print('匹配失败')

在这个例子中,正则表达式 \d+ 匹配一个或多个数字。由于字符串 '123abc' 以数字开头,所以匹配成功,并返回匹配对象。使用 group() 方法可以获取匹配的文本。 

 失败的情况

import re

pattern = r'\d+'
string = 'abc123'

match_object = re.match(pattern, string)

if match_object:
    print('匹配成功:', match_object.group())
else:
    print('匹配失败')  # 输出: 匹配失败

使用的标志

import re

pattern = r'[A-Z]+'  # 匹配一个或多个大写字母
string = 'Hello123'

# 使用 re.IGNORECASE 标志,使匹配不区分大小写
match_object = re.match(pattern, string, re.IGNORECASE)

if match_object:
    print('匹配成功:', match_object.group())  # 输出: 匹配成功: H
else:
    print('匹配失败')

re.search()

 re.search() 是 Python 中正则表达式模块 re 的另一个核心函数。与 re.match() 不同的是,re.search() 会在整个字符串中搜索与正则表达式匹配的第一个位置,而不是仅仅从字符串的开始位置进行匹配。如果找到匹配项,它会返回一个匹配对象;否则,返回 None

import re

# 基本格式
match_object = re.search(pattern, string, flags=0)

示例

import re

pattern = r'\d+'  # 匹配一个或多个数字
string = 'abc123def'

match_object = re.search(pattern, string)

if match_object:
    print('匹配成功:', match_object.group())  # 输出: 匹配成功: 123
else:
    print('匹配失败')

在这个例子中,正则表达式 \d+ 匹配一个或多个数字。字符串 'abc123def' 中包含数字 '123',所以 re.search() 找到匹配项并返回匹配对象。

使用标志

import re

pattern = r'[a-z]+'  # 匹配一个或多个小写字母
string = '123ABCdef'

# 使用 re.IGNORECASE 标志,使匹配不区分大小写
match_object = re.search(pattern, string, re.IGNORECASE)

if match_object:
    print('匹配成功:', match_object.group())  # 输出: 匹配成功: ABC
else:
    print('匹配失败')

在这个例子中,虽然字符串 '123ABCdef' 中首先出现的是数字和大写字母,但由于使用了 re.IGNORECASE 标志,正则表达式 [a-z]+ 也能匹配到大写字母(实际上匹配到了 'ABC',因为它是第一个出现的小写或大写字母序列)。注意,这里的匹配是从左到右进行的,所以它会匹配到第一个符合条件的序列。

 re.findall()

re.findall() 是 Python 中正则表达式模块 re 提供的一个函数,用于在整个字符串中查找所有与正则表达式匹配的子串,并将它们作为一个列表返回。如果没有找到任何匹配项,它将返回一个空列表。 

import re

# 基本格式
matches = re.findall(pattern, string, flags=0)

查找所有匹配项

import re

pattern = r'\d+'  # 匹配一个或多个数字
string = 'abc123def456ghi789'

matches = re.findall(pattern, string)
print(matches)  # 输出: ['123', '456', '789']

 在这个例子中,正则表达式 \d+ 匹配一个或多个数字。字符串 'abc123def456ghi789' 中包含三个数字序列 '123''456' 和 '789',所以 re.findall() 返回一个包含这些匹配项的列表。

使用标志

import re

pattern = r'[a-z]+'  # 匹配一个或多个小写字母
string = 'Hello123World456'

# 使用 re.IGNORECASE 标志,使匹配不区分大小写
matches = re.findall(pattern, string, re.IGNORECASE)
print(matches)  # 输出: ['Hello', 'World']

 三者区别

  1. re.match 从首字母匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None。
  2. re.search 匹配整个字符串,直到找到一个对应匹配【若有多个,也只返回第一个】。
  3. re.findall 返回匹配到的所有子串。

可选修饰符

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。如 re.I | re.M 被设置成 I 和 M 标志:

修饰符

描述

re.I

使匹配对大小写不敏感。

re.L

做本地化识别(locale-aware)匹配。

re.M

多行匹配,影响 ^ 和 $。

re.S

使 . 匹配包括换行在内的所有字符。

re.U

根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B。

re.X

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

import re
s = 'Good good study, Day day up'
ret = re.findall('good', s, re.I)
print(ret)

 正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式。

  1. 字母和数字表示他们自身。
  2. 一个正则表达式模式中的字母和数字匹配同样的字符串。
  3. 多数字母和数字前加一个反斜杠时会拥有不同的含义。
  4. 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
  5. 反斜杠本身需要使用反斜杠转义。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来匹配字符串中字符组合的模式。它主要用于搜索、替换和解析字符串。正则表达式由一些普通字符和特殊字符(称为元字符)组成,这些特殊字符赋予了正则表达式强大的匹配能力。

以下是一些常见的正则表达式模式和元字符的简介:

  1. 普通字符‌:

    • 普通字符(如字母、数字、标点符号等)在正则表达式中匹配它们自身。
    • 例如,正则表达式 abc 会匹配字符串中的 abc
  2. 元字符‌:

    • .:匹配除换行符 \n 之外的任何单个字符。
    • ``:匹配字符串的开始位置。
    • $:匹配字符串的结束位置。
    • *:匹配前面的字符零次或多次。
    • +:匹配前面的字符一次或多次。
    • ?:匹配前面的字符零次或一次。
    • {n}:匹配前面的字符恰好 n 次。
    • {n,}:匹配前面的字符至少 n 次。
    • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
    • []:匹配方括号中的任意一个字符。例如,[abc] 匹配 ab 或 c
    • |:表示或运算,例如 a|b 匹配 a 或 b
    • ():用于分组和捕获。例如,(abc) 会捕获匹配到的 abc
import re

s1 ='AuhewoBhsoh023'

try:
    def fun1(s:str):
        ret = re.match(r"[A-Z][a-z]*",s)
        if ret:
            print(ret.group())
        else:
            print("匹配不成功")


    fun1(s1)
except Exception as e:
    print(e)

from re import match


def fun_1(s):
    ret = match(r"[a-zA-Z]+[\w]",s)
    if ret:
        print(ret.group())
    else:
        print("没有匹配到")

s="_23onf"
fun_1(s)
import re
def fun3(pwd):
    ret = re.match(r'^\w{8,20}5$',pwd)
    if ret:
        print(ret.group())
    else:
        print("密码不正确")

fun3("111122233344455")

  1. 转义字符‌:

    • \:用于转义元字符,使其匹配自身。例如,\. 匹配点字符 .
  2. 字符类‌:

    • \d:匹配任意一个数字,相当于 [0-9]
    • \D:匹配任意一个非数字字符,相当于 [0-9]
    • \w:匹配任意一个字母、数字或下划线,相当于 [A-Za-z0-9_]
    • \W:匹配任意一个非字母、非数字或非下划线字符,相当于 [A-Za-z0-9_]
    • \s:匹配任意一个空白字符(包括空格、制表符、换行符等)。
    • \S:匹配任意一个非空白字符。
​
import re
s = '__ 0434p波野菠萝- %^&*'
re1 = re.findall('.',s)
print(re1)

re2 = re.findall(r'\d',s)
print(re2)

re3 = re.findall(r'\D',s)
print(re3)

re4 = re.findall(r'\w',s)
print(re4)

re5 = re.findall(r'\W',s)
print(re5)

re6 = re.findall(r'[_&]',s)
print(re6)

​
  1. 量词‌:

    • *?+???:非贪婪匹配,尽可能少地匹配字符。
    • {n,m}?:非贪婪匹配,匹配至少 n 次,但不超过 m 次,尽可能少地匹配。
  2. 断言‌:

    • ``:匹配字符串的开始(前面没有其他字符)。
    • $:匹配字符串的结束(后面没有其他字符)。
    • \b:匹配一个单词边界,即单词和空格之间的位置。
    • \B:匹配非单词边界的位置。
  3. 捕获与分组‌:

    • (pattern):捕获匹配 pattern 的子串。
    • (?:pattern):非捕获组,匹配 pattern 但不捕获。
import re

#匹配出163、126、qq邮箱
myemail = '2042856895@qq.com'
ret = re.match(r'^\w{4,20}@(163|126|qq)\.com$', myemail)
print(ret.group())

#匹配出<html><h1>www.bawei.com</h1></html>
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><h1>www.hqyj.com</h1></html>")
print(ret.group())

#匹配出<html><h1>www.bawei.com</h1></html>
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.hqyj.com</h1></html>")
print(ret.group())
  1. 替换与分组引用‌:

    • 在替换字符串中,\1\2 等表示捕获组的引用。

正则表达式具有强大的灵活性和表达能力,但也因此可能变得复杂和难以阅读。在编写正则表达式时,建议逐步构建和测试,以确保其正确性和性能

re.split函数

功能是分割

import re
s = 'user:zhangsan pwd:888666'
ret = re.split(r':| ', s)
print(ret)

re.sub函数

功能是替换

import re
s = 'i am zhangsan, i am 18 year, i like eat'
ret = re.sub(r"i", "I", s)
print(ret)


 

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

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

相关文章

CSS 语法规范

基本语法结构 CSS 的基本语法结构包含 选择器 和 声明块,两者共同组成 规则集。规则集可以为 HTML 元素设置样式,使页面结构和样式实现分离,便于网页的美化和布局调整。 CSS 规则集的结构如下: selector {property: value; }选择器(Selector) 选择器用于指定需要应用…

Bag Graph: Multiple Instance Learning Using Bayesian Graph Neural Networks文献笔记

基本信息 原文链接&#xff1a;[2202.11132] Bag Graph: Multiple Instance Learning using Bayesian Graph Neural Networks 方法概括&#xff1a;用图&#xff08;贝叶斯GNN框架&#xff09;来建模袋之间的相互作用&#xff0c;并使用图神经网络&#xff08;gnn&#xff09…

Spark 共享变量:广播变量与累加器解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

【Linux网络编程】简单的UDP网络程序

目录 一&#xff0c;socket编程的相关说明 1-1&#xff0c;sockaddr结构体 1-2&#xff0c;Socket API 二&#xff0c;基于Udp协议的简单通信 一&#xff0c;socket编程的相关说明 Socket编程是一种网络通信编程技术&#xff0c;它允许两个或多个程序在网络上相互通信&…

Kafka入门:Java客户端库的使用

在现代的分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而Apache Kafka以其高吞吐量、可扩展性和容错性而广受欢迎。本文将带你了解如何使用Kafka的Java客户端库来实现生产者&#xff08;Producer&#xff09;和消费者&#xff08;Consumer&#xff09;的基…

STM32设计学生宿舍监测控制系统

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来&#xff0c;学生宿舍的安全、舒适…

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

自由学习记录(22)

最后再总结一下吧 虽然过程里很多细节也许我没有去管&#xff0c;毕竟现在就已经存在更好的解决方案了 但大致思想是了解了 A星是一种网格上的遍历方式&#xff0c;为了找到一个目标点和起点之间的要经过的最短节点组 里面更像是动态规划 每一次的遍历&#xff0c;都是当前…

UNIX网络编程-TCP套接字编程(实战)

概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器&#xff1a; 客户端从标准输入读入一行文本&#xff0c;并写给服务器。服务器从网络输入读入这行文本&#xff0c;并回射给客户端。客户端从网络输入读入这行回射文本&#xff0c;并显示在标准输出上。 TCP服务器…

『VUE』27. 透传属性与inheritAttrs(详细图文注释)

目录 什么是透传属性&#xff08;Forwarding Attributes&#xff09;使用条件唯一根节点禁用透传属性继承总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是透传属性&#xff08;Forwarding Attributes&#xff09; 在 V…

408模拟卷较难题(无分类)

模拟卷特别是大题还是很有难度的&#xff0c;而且有些题有错&#xff0c;还是先把真题吃透&#xff0c;后面没时间的话就不整理了。 一棵树转化为二叉树&#xff0c;那么这棵二叉树一定为右子树为空的树 计算不同种形态&#xff0c;即计算6个结点的二叉树有几种形态&#xff0c…

【JavaScript】LeetCode:96-100

文章目录 96 单词拆分97 最长递增子序列98 乘积最大子数组99 分割等和子集100 最长有效括号 96 单词拆分 动态规划完全背包&#xff1a;背包-字符串s&#xff0c;物品-wordDict中的单词&#xff0c;可使用多次。问题转换&#xff1a;s能否被wordDict中的单词组成。dp[i]&#x…

安全见闻1-5

涵盖了编程语言、软件程序类型、操作系统、网络通讯、硬件设备、web前后端、脚本语言、病毒种类、服务器程序、人工智能等基本知识&#xff0c;有助于全面了解计算机科学和网络技术的各个方面。 安全见闻1 1.编程语言简要概述 C语言&#xff1a;面向过程&#xff0c;适用于系统…

相亲小程序(源码+文档+部署+讲解)

最近我在挖掘一些优秀的开源项目时&#xff0c;无意间发现了一个相当给力的系统——相亲小程序管理系统。这个系统不仅功能实用&#xff0c;而且代码结构清晰&#xff0c;易于二次开发。作为一名技术爱好者&#xff0c;我觉得有必要把这个好东西推荐给我的读者们。接下来&#…

RabbitMQ介绍和快速上手案例

文章目录 1.引入1.1同步和异步1.2消息队列的作用1.3rabbitMQ介绍 2.安装教程2.1更新软件包2.2安装erlang2.3查看这个erlang版本2.4安装rabbitMQ2.5安装管理页面2.6浏览器测试2.7添加管理员用户 3.rabbitMQ工作流程4.核心概念介绍4.1信道和连接4.2virtual host4.3quene队列 5.We…

aws(学习笔记第十二课) 使用AWS的RDS-MySQL

aws(学习笔记第十二课) 使用AWS的RDS 学习内容&#xff1a; AWS的RDS-MySQL 1. 使用AWS的RDS 什么是RDS RDS就是Relation Database Service的缩写&#xff0c;是AWS提供的托管关系型数据库系统。让用户能够在 AWS Cloud 云中更轻松地设置、操作和扩展关系数据库。 数据库和we…

跳房子(弱化版)

题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画 n 个格子&#xff0c;这些格子都在同一条直线上。每个格子内…