当前位置: 首页 > news >正文

Python入门【动态添加属性和方法、正则表达式概述、match函数的使用、常用匹配符、限定符 、限定符使用示例】(二十九)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

🔥🔥🔥 python入门到实战专栏:从入门到实战 

🔥🔥🔥 Python爬虫开发专栏:从入门到实战

🔥🔥🔥 Python办公自动化专栏:从入门到实战

🔥🔥🔥 Python数据分析专栏:从入门到实战

🔥🔥🔥 Python前后端开发专栏:从入门到实战

目录

动态添加属性和方法

__slots__ 的作用

正则表达式概述

match函数的使用

正则表达式修饰符

常用匹配符

限定符 

限定符使用示例


 

动态添加属性和方法

动态编程语言是高级程序设计语言的一个类别,在计算机科学领域 已被广泛应用。

它是指在运行时可以改变其结构的语言 :例如新的函数、 对象、甚至代码可以被引进, 已有的函数可以被删除或是其他结构上的变化。 

运行过程中给对象、类添加属性和方法

#coding=utf-8
import types
class Person():def __init__(self,namexiao,agetong):self.namexiao= namexiaoself.agetong= agetong
p1 = Person("zhangsan",20)
p2 = Person("lisi",30)
#动态给对象添加属性和方法
p1.score = 100
print(p1.score)
def run(self):print(f"{self.namexiao},running...")#动态的对象添加方法
p1.run = types.MethodType(run,p1)
p1.run()

types.MethonType的使用

p1.run = types.MethodType(run,p1)
# 即使换成
xxx = types.MethodType(run,p1)
# xxx()调用一样还用
# 因为之前提示缺少参数,主要是不知道self到底是谁,
# 而types.MethodType(run,p1)则是告诉解释器,self指的就是p1

给类动态添加静态方法以及类方法

@staticmethod
def staticfunc():print("---static method---")
Person.staticfunc = staticfunc
Person.staticfunc()
@classmethod
def clsfunc(cls):print('---cls method---')
Person.clsfunc = clsfunc
Person.clsfunc()

__slots__ 的作用

1、 __slots__ 对动态添加成员变量、成员方法有限制。对动态添加类属性、类方法没有限制。

2、 __slots__ 只对本类有限制,不限制子类

class Person():__slots__ = {"namexiao","agetong"}def __init__(self,namexiao,agetong):self.namexiao= namexiaoself.agetong= agetongdef eat(self):print("人是铁饭是钢,要吃!")
if __name__ == '__main__':p1 = Person("wang",18)
#   p1.gender = "man" #AttributeError: 'Person' object has no attribute 'gender'

正则表达式概述

概念 

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑 (可以用来做检索,截取或者替换操作)。

 作用

1、给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。

2、可以通过正则表达式,从字符串中获取我们想要的特定部分。

3、还可以对目标字符串进行替换操作。

基本函数 

Python语言通过标准库中的re模块支持正则表达式。re模块提供了一些根据正则表达式进行查找、替换、分隔字符串的函数, 这些函数使用一个正则表达式作为第一个参数。

函数描述
match(pattern,string,flags=0)根据pattern从string的头部开始匹配字符串,只返回第1次匹配成功的对象;否则,返回None
findall(pattern,string,flags=0)根据pattern在string中匹配字符串。如果匹配成功, 返回包含匹配结果的列表;否则,返回空列表。当 pattern中有分组时,返回包含多个元组的列表,每个元组对应1个分组。flags表示规则选项,规则选项用于辅助匹配。
sub(pattern,repl,string,count=0)根据指定的正则表达式,替换源字符串中的子串。 pattern是一个正则表达式,repl是用于替换的字符串,string是源字符串。如果count等于0,则返回 string中匹配的所有结果;如果count大于0,则返回 前count个匹配结果
subn(pattern,repl,string,count=0)作用和sub()相同,返回一个二元的元组。第1个元素是替换结果,第2个元素是替换的次数
search(pattern,string,flags=0)根据pattern在string中匹配字符串,只返回第1次匹配成功的对象。如果匹配失败,返回None
compile(pattern,flags=0)编译正则表达式pattern,返回1个pattern的对象
split(pattern,string,maxsplit=0)根据pattern分隔string,maxsplit表示最大的分隔数
escape(pattern)匹配字符串中的特殊字符,如*、+、?

match函数的使用

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。语法格式如下:

re.match(pattern, string, flags=0)
参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。如下表列出正则表达式修饰符 - 可选标志

正则表达式修饰符

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

意义: 

1、re.match是用来进行正则匹配检查的方法,如果字符串开头的0个或多个字符匹配正则表达式 模式,则返回相应的match对象。如果字符串不匹配模式,返回None(注意不是空字符串"")

2、匹配对象Match Object具有group()方法, 用来返回字符串的匹配部分,具有span()方法。返回 匹配字符串的位置(元组存储开始,结束位置),具有start(),end()方法,存储匹配数据的开始和结束位置。(也可以通过对象的dir(对象查看对象的方法))

注意: 如果想在目标字符串的任意位置查找,需要使用search 

【示例】match方法的使用 

import re
xiaos='hello python'
patterntong='hello'
v=re.match(patterntong,xiaos)
print(v)
print(v.group())
print(v.span())

【示例】match方法中flag可选标志的使用

import re
xiaos = 'hello Python!'
tongm=re.match('hello python',xiaos ,re.I)  #忽略大小写
if tongm is not None:print('匹配成功结果是:',tongm .group())
else:print('匹配失败')

常用匹配符

一个正则表达式是由字母、数字和特殊字符(括号、星号、问号等)组成。正则表达式中有许多特殊的字符,这些特殊字符是构成正则表达式的要素。 

【示例】常用匹配符.的使用

import re
pattern='.' #匹配任意一个字符(除了\n)
sxiao='a'
print('匹配字符a:',re.match(pattern,sxiao))
sxiao='C'
print('匹配字符C:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))
sxiao='\n'
print('匹配字符\\n:',re.match(pattern,sxiao))

 【示例】常用匹配符\d的使用

import re
pattern='\d'  #匹配数字,即0-9
sxiao='9'
print('匹配数字9:',re.match(pattern,sxiao))
sxiao='4'
print('匹配数字4:',re.match(pattern,sxiao))
sxiao='a'
print('匹配字符a:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))

【示例】常用匹配符\D的使用

import re
pattern='\D' #匹配非数字的字符
sxiao='9'
print('匹配数字9:',re.match(pattern,sxiao))
sxiao='4'
print('匹配数字4:',re.match(pattern,sxiao))
sxiao='a'
print('匹配字符a:',re.match(pattern,sxiao))
sxiao='_'
print('匹配数字_:',re.match(pattern,sxiao))

【示例】常用匹配符\s的使用

import re
pattern='\s' #匹配空白字符,即空格(\n,\t)
sxiao=' '
print('匹配字符' ':',re.match(pattern,sxiao))
sxiao='\t'
print('匹配字符\\t:',re.match(pattern,sxiao))
sxiao='\n'
print('匹配字符\\n:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))

【示例】常用匹配符\S的使用

import re
pattern='\S' #匹配不是空白的字符
sxiao=' '
print('匹配字符' ':',re.match(pattern,sxiao))
sxiao='\t'
print('匹配字符\\t:',re.match(pattern,sxiao))
sxiao='\n'
print('匹配字符\\n:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))

【示例】常用匹配符\w和\W的使用

import re
print('-------\w匹配字母、数字、下划线--------')
pattern='\w' #匹配字母、数字、下划线
sxiao='a'
print('匹配字符a:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))
sxiao='5'
print('匹配数字5:',re.match(pattern,sxiao))
sxiao='A'
print('匹配字符A:',re.match(pattern,sxiao))
sxiao='#'
print('匹配字符#:',re.match(pattern,sxiao))
print('-------\W匹配不是字母、数字、下划线--------')
pattern='\W' #匹配不是字母、数字、下划线
sxiao='a'
print('匹配字符a:',re.match(pattern,sxiao))
sxiao='_'
print('匹配字符_:',re.match(pattern,sxiao))
sxiao='5'
print('匹配数字5:',re.match(pattern,sxiao))
sxiao='A'
print('匹配字符A:',re.match(pattern,sxiao))
sxiao='#'
print('匹配字符#:',re.match(pattern,sxiao))

【示例】[]匹配列表中的字符

import re
pattern='[2468]' #匹配列表中的字符
sxiao='1'
print('匹配数字1:',re.match(pattern,sxiao))
sxiao='2'
print('匹配数字2:',re.match(pattern,sxiao))
sxiao='3'
print('匹配数字3:',re.match(pattern,sxiao))
sxiao='4'
print('匹配数字4:',re.match(pattern,sxiao))
sxiao='#'
print('匹配字符#:',re.match(pattern,sxiao))
print('---------手机号码-----------')
sxiao='13456788789'
pattern='\d\d\d\d\d\d\d\d\d\d\d'#匹配手机号
print('匹配手机号码:',re.match(pattern,sxiao))
pattern='1[35789]\d\d\d\d\d\d\d\d\d'#匹配手机号
print('匹配手机号码:',re.match(pattern,sxiao))

其中,匹配符“[]”可以指定一个范围,例如:“[ok]”将匹配包含“o”或 “k”的字符。同时“[]”可以与\w、\s、\d等标记等价。例如,[0-9a-zAZ]等价于\w,[ ^0-9 ] 等价于\D。

限定符 

从上面示例中可以看到如果要匹配手机号码,需要形如 “\d\d\d\d\d\d\d\d\d\d\d”这样的正则表达式。其中表现了11次 “\d”,表达方式烦琐。正则表达式作为一门小型的语言,还提供了对表达式的一部分进行重复处理的功能。例如,“*”可以对正则表达式的某个部分重复匹配多次。这种匹配符号称为限定符。

符号描述符号描述
*匹配零次或多次{m}重复m次
+匹配一次或多次{m,n}重复m到n次,其中n可以省略,表示m到任意次
?匹配一次或零次{m,}至少m次

【示例】限定符*+?的使用

import re
print('------*匹配零次或多次--------')
pattern='\d*'  #0次或多次
sxiao='123abc'
print('匹配123abc:',re.match(pattern,sxiao))sxiao='abc'  #这时候不是None而是''
print('匹配abc:',re.match(pattern,sxiao))
print('-----+匹配一次或多次---------')pattern='\d+'  #1次或多次
sxiao='123abc'
print('匹配123abc:',re.match(pattern,sxiao))sxiao='abc'  #这时候是None
print('匹配abc:',re.match(pattern,sxiao))
print('-----?匹配一次或零次---------')pattern='\d?'  #0次或1次
sxiao='123abc'
print('匹配123abc:',re.match(pattern,sxiao))sxiao='abc'  #这时候是空
print('匹配abc:',re.match(pattern,sxiao))

【示例】限定符{}的使用

import re
print('-----{m}重复m次---------')
pattern='\d{3}'  #出现m次
sxiao='123abc'
print('pattern为\\d{3}匹配123abc结果:',re.match(pattern,sxiao))
pattern='\d{4}'  #出现m次
print('pattern为\\d{4}匹配123abc结果:',re.match(pattern,sxiao))
print('-----{m,}至少m次---------')sxiao='1234567abc'
pattern='\d{3,}'  #出现大于m次 尽可能满足的都返回
print('pattern为\\d{3,}匹配1234567abc结果:\n',re.match(pattern,sxiao))
print('-----{m,n}重复m到n次---------')
pattern='\d{2,4}'  #出现m到n次
print('pattern为\\d{2,4}匹配1234567abc结果:\n',re.match(pattern,sxiao))

限定符使用示例

【示例】匹配出一个字符串首字母为大写字符,后边都是小写字符,这些小写字母可有可无

pattern='[A-Z][a-z]*'
sxiao='Hello world'
sxiao='HEllo world'
v=re.match(pattern,sxiao)
print(v)

 【示例】匹配出有效的变量名

import re
pattern='[A-Za-z_][0-9A-Za-z_]*'
print('pattern为[A-Za-z_][0-9A-Za-z_]*')
sxiao='a'
print('匹配变量名a的结果:',re.match(pattern,sxiao))sxiao='ab'
print('匹配变量名ab的结果:',re.match(pattern,sxiao))sxiao='_ab'
print('匹配变量名_ab的结果:',re.match(pattern,sxiao))sxiao='2ab'
print('匹配变量名2ab的结果:',re.match(pattern,sxiao))print('pattern为[A-Za-z_]\w*')
pattern='[A-Za-z_]\w*'
sxiao='a'
print('匹配变量名a的结果:',re.match(pattern,sxiao))sxiao='ab'
print('匹配变量名ab的结果:',re.match(pattern,sxiao))sxiao='_ab'
print('匹配变量名_ab的结果:',re.match(pattern,sxiao))sxiao='2ab'
print('匹配变量名2ab的结果:',re.match(pattern,sxiao))

【示例】匹配出1-99之间的数字

import re
pattern='[1-9]\d?'
sxiao='1'
print('匹配数字1:',re.match(pattern,sxiao))sxiao='55'
print('匹配数字55:',re.match(pattern,sxiao))sxiao='99'
print('匹配数字99:',re.match(pattern,sxiao))sxiao='199'
print('匹配数字199:',re.match(pattern,sxiao))

【示例】匹配出一个随机密码8-20位以内 (大写字母 小写字母 下划线 数字)

import re
pattern='\w{8,20}'
sxiao='12345678'
print('匹配12345678的结果:\n',re.match(pattern,sxiao))sxiao='123__456'
print('匹配123__456的结果:\n',re.match(pattern,sxiao))

 

相关文章:

Python入门【动态添加属性和方法、正则表达式概述、match函数的使用、常用匹配符、限定符 、限定符使用示例】(二十九)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...

《Go 语言第一课》课程学习笔记(四)

构建模式:Go Module 的 6 类常规操作 为当前 module 添加一个依赖 我们如何为一个 Go Module 添加一个新的依赖包呢? 如果我们要为项目增加一个新依赖:github.com/google/uuid,我们首先会更新源码:package mainimpor…...

制定建立商务模式财务及企业管理信息系统的解决方案

1、调查企业对 Internet 的需求,并制定全面规划。由于电子商务的范围相当 广泛,企业在实施电子商务模式财务及企业管理信息系统时,应先调查哪些对于企 业的收益较大,然后进行全面规划,即规划信息化基本平台、后台企业…...

UE Json Operate 解析嵌套数组

演示如何使用 DTJsonOperate 插件,在蓝图中解析嵌套数组。 比如这个Json {"name": [[[1, 2]],[3, 4],[5, 6]] } 操作演示 最后打印 本功能需要插件支持,插件下载地址。...

sd-webui安装comfyui扩展

文章目录 导读ComfyUI 环境安装1. 安装相关组件2. 启动sd-webui3. 访问sd-webui 错误信息以及解决办法 导读 这篇文章主要给大家介绍如何在sd-webui中来安装ComfyUI插件 ComfyUI ComfyUI是一个基于节点流程式的stable diffusion的绘图工具,它集成了stable diffus…...

Apache Doris 2.0.0 版本正式发布:盲测性能 10 倍提升,更统一多样的极速分析体验

亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于 2023 年 8 月 11 日正式发布,有超过 275 位贡献者为 Apache Doris 提交了超过 4100 个优化与修复。 在 2.0.0 版本中,Apache Doris 在标准 Benchmark 数…...

LeetCode235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 文章目录 [235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)一、题目二、题解方法一:递归方法二:迭代 一、题目 给定一个二叉搜索树, 找到该树中两个指定…...

设计模式——建造者(Builder)模式

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,…...

Java课题笔记~ SpringBoot概述

问题导入 学习了SpringBoot入门案例之后,感觉对比SpringMVC哪一个更加方便简洁? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 Spring程序缺点 配置繁琐 依赖设置繁琐 SpringBoot程序…...

python优雅地爬虫!

背景 我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析,获得元素中的内容,完成。 好家伙,我知道我爬…...

UVM RAL后门访问配置

先给一下大致的代码结构,根据代码结构来描述。 //dut结构 module my_dut(...);my_reg U_REG(......);endmodulemodule my_reg(...);//reg1和reg2是一个reg的两个field,reg3单独是一个regreg [15:0] reg1_q;reg [15:0] reg2_q;reg [31:0] reg3_q;endmodu…...

数学建模之“灰色预测”模型

灰色系统分析法在建模中的应用 1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测 灰色系统的应用范畴大致分为以下几方面: (1)灰色关…...

深入探讨 Oxigen:Rust 实现的并行遗传算法框

第一部分:引言及Oxigen框架概览 随着遗传算法在许多领域(如优化、机器学习和人工智能)的应用日益增多,其性能和效率成为了关键焦点。Oxigen 是一个用 Rust 语言实现的并行遗传算法框架,其提供了高效的并行计算机制&am…...

Flink-----Standalone会话模式作业提交流程

1.Flink的Slot特点: 均分隔离内存,不隔离CPU可以共享:同一个job中,不同算子的子任务才可以共享同一个slot,同时在运行的前提是,属于同一个slot共享组,默认都是“default”2.Slot的数量 与 并行度 的关系 slot 是一种静态的概念,表示最大的并发上线并行度是个动态的概念…...

算法与数据结构(七)--堆

一.堆 1.堆的定义 堆是计算机科学中一类特殊的数据结构的通常,堆通常可以被看做是一颗完全二叉树的数组对象。 堆的特性 1.它是完全二叉树,除了树的最后一层结点不需要是满的,其他的每一层从左到右都是满的,如果最后一层结点不…...

软件工程概述-架构师(三)

软件工程概述(老版) 软件开发生命周期: 软件定义时期:包括 可行性研究和详细需求分析过程,任务是软件工程必需完成的目标,具有可行问题分析、可行性研究、需求分析等。软件开发时期:软件的 设…...

华为手机Outlook手机APP无法登录邮箱,提示[2002]错误代码

近期遇到不少华为手机的Outlook APP无法登录邮箱Office365邮箱的案例,并且提示: 错误 出错了。[2002] 经测试,这应该是华为应用市场下载的Outlook版本有问题。 解决方法: 把Outlook卸载之后从微软官网重新下载官网版本去安装&am…...

“深入探究JVM内部结构与工作原理:解析Java虚拟机“

标题:深入探究JVM内部结构与工作原理 摘要:本文将深入探究Java虚拟机(JVM)的内部结构与工作原理。我们将介绍JVM的基本组成部分,包括类加载器、运行时数据区和执行引擎。同时,我们将通过一个示例代码来说明…...

windows下redis服务启动及.bat文件中中redis服务的启动

windows windows下redis服务的启动 1、不配置环境变量 找到redis服务的安装目录进入命令行窗口并输入命令redis-server.exe redis.windows.conf2、配置环境变量 将redis安装目录配置在path环境变量中之后就可以在cmd窗口的任意位置输入redis-server命令就可以启动redis服务…...

【学习笔记之vue】 Cannot find module ‘node-sass‘

Cannot find module node-sass方案一(不通) 下载node-sass组件 >> npm install -g cnpm>>cnpm install node-sass下载时报错 方案二 使用npm下载node-sass组件 >>npm install node-sassok...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...