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

Python教程--基本技能

】@TOC

5.1 解析命令行参数

在Python中,解析命令行参数是一项常见的任务,尤其是在开发命令行工具或脚本时。Python标准库提供了argparse模块,它可以帮助你轻松地编写用户友好的命令行接口。下面是使用argparse模块解析命令行参数的基本步骤:

引入argparse模块

首先,你需要引入argparse模块。

import argparse

创建ArgumentParser对象

接下来,创建一个ArgumentParser对象。这个对象将帮助你定义和解析命令行参数。

parser = argparse.ArgumentParser(description='这是一个示例脚本。')

定义参数

使用add_argument()方法来定义命令行参数。你可以指定参数名、参数类型、帮助信息等。

parser.add_argument('input', type=str, help='输入文件的路径。')
parser.add_argument('--output', '-o', type=str, default='output.txt', help='输出文件的路径。')
parser.add_argument('--verbose', '-v', action='store_true', help='启用详细输出。')

解析参数

定义好所有参数后,调用parse_args()方法来解析命令行参数。

args = parser.parse_args()

使用参数

解析后的参数将被存储在args对象中,你可以像使用普通变量一样使用它们。

if args.verbose:print(f'输入文件:{args.input}')print(f'输出文件:{args.output}')
# 你的代码逻辑

完整示例

下面是一个完整的示例,展示了如何定义、解析和使用命令行参数:

import argparse
def main():parser = argparse.ArgumentParser(description='这是一个示例脚本。')parser.add_argument('input', type=str, help='输入文件的路径。')parser.add_argument('--output', '-o', type=str, default='output.txt', help='输出文件的路径。')parser.add_argument('--verbose', '-v', action='store_true', help='启用详细输出。')args = parser.parse_args()if args.verbose:print(f'输入文件:{args.input}')print(f'输出文件:{args.output}')# 你的代码逻辑
if __name__ == '__main__':main()

你可以通过命令行运行这个脚本,并传递相应的参数。例如:

python script.py input.txt --output result.txt -v

在这个例子中,script.py是脚本的名字,input.txt是必需的输入文件参数,--output result.txt-v是可选的输出文件和详细输出参数。


5.2 时间日期处理
在Python中,处理时间日期是编程中的常见需求。Python标准库提供了datetime模块,它提供了多种时间日期相关的类和函数,用于处理日期、时间、时间差等。下面是使用datetime模块进行时间日期处理的基本步骤:

引入datetime模块

首先,你需要引入datetime模块。

from datetime import datetime, timedelta

获取当前时间

你可以使用datetime.now()方法来获取当前时间。

current_time = datetime.now()
print(current_time)

日期和时间格式化

你可以使用strftime()方法来格式化日期和时间,使其更容易阅读。

formatted_time = current_time.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_time)

日期和时间加减

你可以使用timedelta对象来增加或减少日期和时间。

# 增加3天
three_days_later = current_time + timedelta(days=3)
print(three_days_later)
# 减少1小时
one_hour_ago = current_time - timedelta(hours=1)
print(one_hour_ago)

日期和时间比较

你可以使用timedelta对象来比较日期和时间。

# 比较两个时间
time_diff = three_days_later - current_time
print(time_diff)

示例

下面是一个完整的示例,展示了如何使用datetime模块进行时间日期处理:

from datetime import datetime, timedelta
def main():current_time = datetime.now()print(f'当前时间:{current_time}')formatted_time = current_time.strftime('%Y-%m-%d %H:%M:%S')print(f'格式化时间:{formatted_time}')three_days_later = current_time + timedelta(days=3)print(f'三天后的时间:{three_days_later}')one_hour_ago = current_time - timedelta(hours=1)print(f'一个小时前的時間:{one_hour_ago}')# 比较两个时间time_diff = three_days_later - current_timeprint(f'时间差:{time_diff}')
if __name__ == '__main__':main()

你可以通过命令行运行这个脚本,并查看输出结果。这个示例展示了如何获取当前时间、格式化日期和时间、进行日期和时间的加减以及比较日期和时间。


5.3 数据文件读写

在Python中,处理数据文件读写是一项基础技能,用于读取或写入文本文件、CSV文件、JSON文件等。Python标准库提供了osos.pathopencsvjson等模块,用于操作文件和读写不同类型的数据。下面是使用这些模块进行数据文件读写的步骤:

引入相关模块

首先,你可能需要引入一些相关模块。

import os
import csv
import json

读取文本文件

使用open()函数来读取文本文件。

# 打开文件
with open('example.txt', 'r') as file:# 读取文件内容content = file.read()print(content)

写入文本文件

使用open()函数来写入文本文件。

# 打开文件
with open('example.txt', 'w') as file:# 写入文件内容file.write('这是要写入的内容')

读取CSV文件

使用csv.reader()来读取CSV文件。

# 打开文件
with open('example.csv', 'r') as file:# 创建CSV读取器reader = csv.reader(file)# 读取文件内容for row in reader:print(row)

写入CSV文件

使用csv.writer()来写入CSV文件。

# 打开文件
with open('example.csv', 'w') as file:# 创建CSV写入器writer = csv.writer(file)# 写入文件内容writer.writerow(['列1', '列2', '列3'])writer.writerow(['值1', '值2', '值3'])

读取JSON文件

使用json.load()来读取JSON文件。

# 打开文件
with open('example.json', 'r') as file:# 创建JSON解析器data = json.load(file)print(data)

写入JSON文件

使用json.dump()来写入JSON文件。

# 打开文件
with open('example.json', 'w') as file:# 创建JSON解析器json.dump(data, file)

示例

下面是一个完整的示例,展示了如何使用Python进行数据文件读写:

import os
import csv
import json
def main():# 读取文本文件with open('example.txt', 'r') as file:content = file.read()print(content)# 写入文本文件with open('example.txt', 'w') as file:file.write('这是要写入的内容')# 读取CSV文件with open('example.csv', 'r') as file:reader = csv.reader(file)for row in reader:print(row)# 写入CSV文件with open('example.csv', 'w') as file:writer = csv.writer(file)writer.writerow(['列1', '列2', '列3'])writer.writerow(['值1', '值2', '值3'])# 读取JSON文件with open('example.json', 'r') as file:data = json.load(file)print(data)# 写入JSON文件with open('example.json', 'w') as file:json.dump(data, file)
if __name__ == '__main__':main()

在这个例子中,我们展示了如何使用Python进行文本文件、CSV文件和JSON文件的读写。这些技能在处理数据和配置文件时非常有用。


5.4 数据库操作

在Python中,数据库操作通常涉及与关系型数据库(如MySQL、PostgreSQL)或NoSQL数据库(如MongoDB、Redis)的交互。Python的标准库和第三方库提供了多种数据库接口,如sqlite3MySQLdbpsycopg2pymongo等。以下是一些基本步骤,用于在Python中进行数据库操作:

引入相关模块

首先,你可能需要引入一些数据库接口模块。

import sqlite3
import pymysql
import pymongo

连接数据库

使用适当的连接函数来建立与数据库的连接。

# 连接SQLite数据库
conn = sqlite3.connect('example.db')
# 连接MySQL数据库
conn = pymysql.connect(host='localhost', user='root', password='password', database='test_db')
# 连接MongoDB数据库
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['test_db']

创建数据库表或集合

在连接数据库后,你可以使用SQL语句或MongoDB的集合操作来创建新的表或集合。

# 创建SQLite表
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
conn.commit()
# 创建MongoDB集合
db.create_collection('users')

插入数据

你可以使用SQL语句或MongoDB的文档操作来插入数据。

# 插入SQLite数据
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
conn.commit()
# 插入MongoDB数据
db.users.insert_one({'name': 'Bob', 'age': 25})

查询数据

你可以使用SQL语句或MongoDB的查询操作来检索数据。

# 查询SQLite数据
cursor.execute('SELECT * FROM users WHERE age > ?', (25,))
rows = cursor.fetchall()
for row in rows:print(row)
# 查询MongoDB数据
for user in db.users.find({'age': {'$gt': 25}}):print(user)

更新和删除数据

你可以使用SQL语句或MongoDB的更新和删除操作来修改或删除数据。

# 更新SQLite数据
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))
conn.commit()
# 删除SQLite数据
cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))
conn.commit()
# 更新MongoDB数据
db.users.update_one({'name': 'Bob'}, {'$set': {'age': 26}})
# 删除MongoDB数据
db.users.delete_one({'name': 'Charlie'})

关闭数据库连接

完成数据库操作后,应该关闭数据库连接。

cursor.close()
conn.close()

示例

下面是一个完整的示例,展示了如何使用Python进行SQLite数据库操作:

import sqlite3
def main():# 连接SQLite数据库conn = sqlite3.connect('example.db')cursor = conn.cursor()# 创建表cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')conn.commit()# 插入数据cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))conn.commit()# 查询数据cursor.execute('SELECT * FROM users WHERE age > ?', (25,))rows = cursor.fetchall()for row in rows:print(row)# 更新数据cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))conn.commit()# 删除数据cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))conn.commit()# 关闭数据库连接cursor.close()conn.close()
if __name__ == '__main__':main()

在这个例子中,我们展示了如何使用Python进行SQLite数据库的连接、表创建、数据插入、查询、更新和删除操作。这些技能对于与数据库交互的应用程序至关重要。


5.6 源码打包

源码打包是将Python项目打包成一个可分发和可安装的格式,以便于其他用户能够轻松地安装和使用你的项目。Python中常用的打包格式有wheelsdistwheel是一种更高效的打包格式,而sdist则是源码打包的通用格式。

使用setuptools进行源码打包

setuptools是一个Python库,它提供了一套命令行工具和Python代码,用于创建和分发Python包。你可以使用setuptools来创建wheelsdist格式的源码包。

安装setuptools

如果你还没有安装setuptools,可以使用pip进行安装。

pip install setuptools
创建setup.py文件

创建一个名为setup.py的文件,该文件将包含你的包的元数据和打包命令。

from setuptools import setup, find_packages
setup(name='my_package',version='1.0',description='这是一个示例包',author='Your Name',author_email='your_email@example.com',url='https://example.com',packages=find_packages(),# 你可以添加其他需要的信息,如安装需求等
)
打包源码

setup.py文件所在的目录中,运行以下命令来创建sdistwheel格式的源码包。

python setup.py sdist bdist_wheel

这个命令会生成一个.tar.gz文件(sdist格式)和一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这些打包好的包。

pip install my_package-1.0.tar.gz

或者

pip install my_package-1.0-py3-none-any.whl

使用wheel进行源码打包

wheel是一个用于创建、分发和安装Python包的命令行工具。你可以使用wheel来创建wheel格式的源码包。

安装wheel

如果你还没有安装wheel,可以使用pip进行安装。

pip install wheel
创建setup.py文件

创建一个名为setup.py的文件,该文件将包含你的包的元数据和打包命令。

from setuptools import setup, find_packages
setup(name='my_package',version='1.0',description='这是一个示例包',author='Your Name',author_email='your_email@example.com',url='https://example.com',packages=find_packages(),# 你可以添加其他需要的信息,如安装需求等
)
打包源码

setup.py文件所在的目录中,运行以下命令来创建wheel格式的源码包。

python setup.py bdist_wheel

这个命令会生成一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这个打包好的包。

pip install my_package-1.0-py3-none-any.whl

示例

下面是一个完整的示例,展示了如何使用setuptoolswheel进行源码打包:

# 创建一个名为 setup.py 的文件
from setuptools import setup, find_packages
setup(name='my_package',version='1.0',description='这是一个示例包',author='Your Name',author_email='your_email@example.com',url='https://example.com',packages=find_packages(),# 你可以添加其他需要的信息,如安装需求等
)
# 在 setup.py 文件所在的目录中,使用 setuptools 创建 sdist 和wheel 格式的源码包。
python setup.py sdist bdist_wheel

这个命令会生成一个.tar.gz文件(sdist格式)和一个.whl文件(wheel格式)。

安装打包的包

你可以使用pip来安装这些打包好的包。

pip install my_package-1.0.tar.gz

或者

pip install my_package-1.0-py3-none-any.whl

使用twine进行源码打包

twine是一个专门用于上传Python包到PyPI(Python包索引)的命令行工具。它依赖于setuptoolswheel,因此你需要在安装twine之前确保已经安装了这两个工具。

安装twine

如果你还没有安装twine,可以使用pip进行安装。

pip install twine
打包源码

setup.py文件所在的目录中,运行以下命令来创建wheel格式的源码包。

python setup.py bdist_wheel

这个命令会生成一个.whl文件(wheel格式)。

上传到PyPI

使用twine来上传打包好的包到PyPI。

twine upload dist/*

这将使用dist目录中的所有文件上传到PyPI。确保在执行此命令之前,你已经设置了PyPI的凭据,并且你的包满足PyPI的命名规范和上传要求。

示例

下面是一个完整的示例,展示了如何使用twine进行源码打包并上传到PyPI:

# 创建一个名为 setup.py 的文件
from setuptools import setup, find_packages
setup(name='my_package',version='1.0',description='这是一个示例包',author='Your Name',author_email='your_email@example.com',url='https://example.com',packages=find_packages(),# 你可以添加其他需要的信息,如安装需求等
)
# 在 setup.py 文件所在的目录中,使用 setuptools 创建 wheel 格式的源码包。
python setup.py bdist_wheel
# 使用 twine 上传到 PyPI
twine upload dist/*

请注意,上传到PyPI之前,你需要有一个有效的PyPI账户,并设置好你的账户凭据。你可以在命令行中使用twine upload命令来上传包,或者在命令行中使用twine upload --repository-url <repository-url>命令来上传包到其他包索引。


在Python中,网络编程是一项重要的技能,它允许你的程序通过网络与其他程序进行通信。Python的标准库中提供了多个模块来支持网络编程,包括sockethttp.clienturllib等。以下是一些基本的网络编程概念和示例。

5.7 网络编程

1. socket 编程基础

socket 模块提供了标准的BSD Sockets API。一个socket是网络通信的一个端点,可以看作是不同计算机进程之间的数据通道。

  • TCP客户端
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
s.connect(('www.example.com', 80))
# 发送数据
s.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
# 接收数据
data = s.recv(1024)
print(data)
# 关闭连接
s.close()
  • TCP服务器
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
s.bind(('0.0.0.0', 8080))
# 监听连接
s.listen(1)
# 接受连接
conn, addr = s.accept()
print('Connected by', addr)
# 接收数据
while True:data = conn.recv(1024)if not data:breakprint(data)
# 关闭连接
conn.close()
2. HTTP 客户端请求

http.client 模块提供了HTTP协议的客户端实现。

import http.client
# 创建一个连接
conn = http.client.HTTPSConnection("www.example.com")
# 发送GET请求
conn.request("GET", "/")
# 获取响应
r1 = conn.getresponse()
# 打印响应状态和响应体
print(r1.status, r1.reason)
print(r1.read().decode('utf-8'))
# 关闭连接
conn.close()
3. 使用 requests 模块

requests 是一个更高级、更友好的HTTP客户端库,它简化了发送HTTP请求的过程。

import requests
# 发送GET请求
response = requests.get('https://www.example.com')
# 检查响应状态码
if response.status_code == 200:print(response.text)
else:print('Failed to retrieve data:', response.status_code)
4. urllib 使用

urllib 是一个用于读取来自Web的数据的模块。

from urllib.request import urlopen
# 打开一个URL
with urlopen('https://www.example.com') as response:# 读取网页内容html = response.read()
print(html.decode('utf-8'))

网络编程是Python应用中非常广泛的一部分,可以用于开发各种网络应用,包括网站、网络服务、分布式系统等。在实际开发中,理解网络协议、网络模型以及如何使用Python进行网络通信是非常重要的。


在Python中,发送邮件是一个常见的任务,通常用于自动化报告、提醒通知或作为服务的一部分。Python的smtp库可以用来发送邮件。以下是一个使用smtp库发送邮件的基本示例。

5.8 发送邮件

使用SMTP发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 邮件发送者
sender = 'from@example.com'
# 邮件接收者
receiver = 'to@example.com'
# 邮件主题
subject = 'Python SMTP 邮件测试'
# 邮件正文
body = '这是一封来自Python脚本的测试邮件。'
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("发件人", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 邮件正文内容
message.attach(MIMEText(body, 'plain', 'utf-8'))
# 添加附件(可选)
with open('附件.txt', 'r', encoding='utf-8') as f:att = MIMEText(f.read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字att["Content-Disposition"] = 'attachment; filename="附件.txt"'message.attach(att)
# SMTP服务器地址
smtp_server = 'smtp.example.com'
# 发送者邮箱用户名和密码
username = 'your_username'
password = 'your_password'
# 连接SMTP服务器
server = smtplib.SMTP(smtp_server, 25)
server.starttls()
server.login(username, password)
# 发送邮件
server.sendmail(sender, receiver, message.as_string())
# 关闭服务器连接
server.quit()

在上面的代码中,你需要将senderreceiversmtp_serverusernamepassword替换为实际的发送者邮箱、接收者邮箱、SMTP服务器地址以及发送者邮箱的用户名和密码。如果SMTP服务器使用的是SSL加密(例如Gmail的SMTP服务器),则端口通常是465,并且需要使用smtplib.SMTP_SSL来连接服务器。
请注意,出于安全考虑,不要在代码中硬编码密码。可以使用环境变量或其他安全的方式来管理敏感信息。
发送邮件是一个涉及网络通信的过程,因此需要确保网络连接畅通,并且邮箱服务器配置正确。在实际应用中,可能还需要处理各种异常情况,例如网络错误、认证失败等。

相关文章:

Python教程--基本技能

】TOC 5.1 解析命令行参数 在Python中&#xff0c;解析命令行参数是一项常见的任务&#xff0c;尤其是在开发命令行工具或脚本时。Python标准库提供了argparse模块&#xff0c;它可以帮助你轻松地编写用户友好的命令行接口。下面是使用argparse模块解析命令行参数的基本步骤&…...

干货分享:Spring中经常使用的工具类(提示开发效率)

环境&#xff1a;Spring5.3…30 1、资源工具类 ResourceUtils将资源位置解析为文件系统中的文件的实用方法。 读取classpath下文件 File file ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX "logback.xml") ; // ...读取文件系统文件 file Resou…...

一文讲懂npm link

前言 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 用法 包链接是一个两步过程&#xff1a; 1.为依赖项创建全局软链npm link。一个符号链接&#xff0c;简称软链&a…...

观成科技:证券行业加密业务安全风险监测与防御技术研究

摘要&#xff1a;解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题&#xff0c;对若⼲证券⾏业的实际流量内容进⾏调研分析&#xff0c; 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁&#xff0c;并提出防…...

使用Swoole开发高性能的Web爬虫

使用swoole开发高性能的web爬虫 Web爬虫是一种自动化获取网络数据的工具&#xff0c;它可以在互联网上收集数据&#xff0c;并且可以被应用于各种不同的领域&#xff0c;如搜索引擎、数据分析、竞争对手分析等。随着互联网规模和数据量的快速增长&#xff0c;如何开发一个高性…...

【Elasticsearch】Elasticsearch索引创建与管理详解

文章目录 &#x1f4d1;引言一、Elasticsearch 索引的基础概念二、创建索引2.1 使用默认设置创建索引2.2 自定义设置创建索引2.3 创建索引并设置映射 三、索引模板3.1 创建索引模板3.2 使用索引模板创建索引 四、管理索引4.1 查看索引4.2 更新索引设置4.3 删除索引 五、索引别名…...

[数据集][目标检测]棉花检测数据集VOC+YOLO格式389张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;389 标注数量(xml文件个数)&#xff1a;389 标注数量(txt文件个数)&#xff1a;389 标注类别…...

使用Java实现实时数据处理系统

使用Java实现实时数据处理系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今信息爆炸的时代&#xff0c;实时数据处理系统变得越来越重要。无论…...

整合web-socket的常见bug

整合文章连接 此文是记录我上网查找整合方案时候踩的坑,特别是注册失败的问题,比如还有什么去掉Compoent就可以,但是这样这个端点就失效了 特别是报错: at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.…...

Python 中字符串的常用操作都有哪些?

在 Python 中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a ‘abc’ b “abc” c ‘’‘abc’’’ d “”“abc”"" print(type(a)) # <class ‘str’> print(type(b)) # <class ‘str’> print(type©) # <…...

FFmpeg 硬件编码加速文档介绍

介绍 硬件访问:许多平台提供了对专用硬件的访问,这些硬件可以用于执行解码、编码或过滤等视频相关操作。 性能与资源使用:使用硬件可以加快某些操作的速度或减少其他资源(特别是CPU)的使用,但可能会产生不同的结果或质量较低,或带来在使用纯软件时不存在的额外限制。 硬…...

【Matlab函数分析】imread从图形文件读取图像

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…...

零基础光速入门AI绘画,SD保姆攻略

前言 大家好&#xff0c;我是AI绘画咪酱。一名AIGC狂热爱好者&#xff0c;目前正在AI绘画领域进行深入的探索。 我花了一个月时间把SD研究了一遍&#xff0c;秉持着用有趣、易懂的文字让小白也可以零基础光速使用SD&#xff08;stable diffusion&#xff09;入门AI绘画&#…...

详细配置SQL Server的链接服务器(图文操作Mysql数据库)

目录 前言1. MySQL ODBC 驱动2. 配置 SQL Server 链接服务器3. 彩蛋前言 此处配置以及安装没有什么理论知识 所以直奔主题,跟着以下步骤配置安装即可 需求:准备在10.197.0.110中链接外部的10.197.0.96的mysql数据源 已默认在10.197.0.96中安装了MySQL数据库并且知道其连接信…...

DDD学习笔记五

模型引力场&#xff1a;聚合 强作用力体现&#xff1a; 某个领域模型是另一些模型存在的前提&#xff0c;没有前者&#xff0c;后者就失去了生存的意义。 一组领域模型之间存在关联的领域逻辑&#xff0c;任何时候都不能违反。 一组领域模型必须以一个完整的、一致的状态呈现给…...

CAN报文的发送类型-OnChange、OnWrite、IfActive、Repetition

CAN报文的发送类型分为基本发送类型和混合发送类型两大类 CAN基本发送类型包括Cyclic周期发送、OnChange变化时发送、OnWrite写入时发送和IfActive有效时发送。基本发送类型中的Cyclic称为周期型,而其他3个类型称为事件型(Event)。发送次数是通过定义Repetition重复次数来实…...

神经网络在机器学习中的应用:手写数字识别

机器学习是人工智能的一个分支&#xff0c;它使计算机能够从数据中学习并做出决策或预测。神经网络作为机器学习的核心算法之一&#xff0c;因其强大的非线性拟合能力而广泛应用于各种领域&#xff0c;包括图像识别、自然语言处理和游戏等。本文将介绍如何使用神经网络对MNIST数…...

QT拖放事件之四:自定义拖放操作-利用QDrag来拖动完成数据的传输-案例demo

1、核心代码 #include "Widget.h" #include "ui_Widget.h" #include "MyButton.h"Widget::Widget(QWidget *parent): QWidget...

Spring Boot应用的部署与扩展

Spring Boot应用的部署与扩展 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 Spring Boot作为现代化Java应用的首选框架之一&#xff0c;以其简化的配置…...

Spring底层原理之bean的加载方式八 BeanDefinitionRegistryPostProcessor注解

BeanDefinitionRegistryPostProcessor注解 这种方式和第七种比较像 要实现两个方法 第一个方法是实现工厂 第二个方法叫后处理bean注册 package com.bigdata1421.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

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

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

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...