【Python进阶】Python中的电子邮件处理:SMTP、IMAP和MIME

1、电子邮件概述

1.1电子邮件的工作原理

1.1.1 邮件服务器与客户端

电子邮件的运作基于客户端-服务器架构,用户通常通过邮件客户端软件(如Outlook、Thunderbird等)或者网页版邮件服务(如Gmail、Yahoo Mail等)撰写、发送和接收邮件。邮件客户端负责与邮件服务器进行通信,邮件服务器则承担着存储、转发和管理邮件的任务。

当用户编写一封电子邮件后,邮件首先被客户端软件打包并通过SMTP(Simple Mail Transfer Protocol)协议提交至发件人的邮件服务器。邮件服务器会根据邮件头部的收件人地址将邮件投递至目标邮件服务器,最终由目标邮件服务器将邮件放入收件人的邮箱中。

1.1.2 常见电子邮件协议概览

SMTP (Simple Mail Transfer Protocol):主要用于发送电子邮件,支持邮件服务器之间的邮件传递,并允许客户端通过SMTP服务器发送邮件。

import smtplib
from email.mime.text import MIMEText

# 创建SMTP对象并连接服务器
smtp_obj = smtplib.SMTP('smtp.example.com')
smtp_obj.login('your_username', 'your_password')

# 创建邮件消息体
msg = MIMEText('This is a test email.')
msg['Subject'] = 'Test Email'
msg['From'] = 'you@example.com'
msg['To'] = 'recipient@example.com'

# 发送邮件
smtp_obj.send_message(msg)
smtp_obj.quit()

POP3 (Post Office Protocol version 3):用于从邮件服务器下载邮件至本地客户端,便于离线阅读。但POP3不支持在服务器端对邮件进行管理和同步。
IMAP4 (Internet Message Access Protocol version 4):提供更为灵活和高级的邮件访问方式,允许用户在多个设备上查看、搜索和管理同一邮箱中的邮件,并保持服务器端邮件状态的一致性。

2、Python中的电子邮件处理

2.1 Python邮件处理库介绍

2.1.1 smtplib模块:实现SMTP协议发送邮件

SMTP(Simple Mail Transfer Protocol)是互联网上传输电子邮件的标准协议。Python内置的smtplib模块提供了与SMTP服务器交互的功能,从而实现邮件的发送。

SMTP连接与身份验证

import smtplib

# 创建SMTP对象,连接SMTP服务器
smtp_server = smtplib.SMTP('smtp.example.com', 587)  # SMTP服务器地址及端口
smtp_server.starttls()  # 启用加密传输

# 登录SMTP服务器,需要提供邮箱地址和授权码/密码
smtp_server.login('sender@example.com', 'your_password')

# 成功登录后即可开始发送邮件

构建邮件消息体

Python的email模块提供了构建复杂邮件消息体的支持,其中MIMEMultipart类用于创建包含多个部分(如文本、附件等)的邮件。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

msg = MIMEMultipart()
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = 'Test Email'

# 添加邮件正文
text_part = MIMEText('This is the body of the message.', 'plain')
msg.attach(text_part)

# 若添加HTML内容,可创建一个MIMEText对象并指定'html'类型
html_part = MIMEText('<h1>Hello, World!</h1>', 'html')
msg.attach(html_part)

发送纯文本与HTML格式邮件示例

结合上述代码片段,我们可以完成一个发送包含纯文本和HTML版本的邮件的例子:

# 继续上面的代码...
smtp_server.send_message(msg)  # 发送邮件
smtp_server.quit()  # 断开与SMTP服务器的连接

2.2 MIME在电子邮件中的应用

2.2.1 MIME概念与结构详解

MIME(Multipurpose Internet Mail Extensions)是一种标准,用于扩展电子邮件以支持非ASCII字符集和多种媒体类型的内容,如图像、声音、视频等。在电子邮件中,MIME消息通常包含多个部分,每个部分都有其特定的Content-Type和编码方式。

2.2.2 使用MIME构建复杂邮件内容

多部分混合邮件(文本与附件)

通过MIME,可以在一封邮件中同时包含文本和附件。

# 创建邮件主体
msg = MIMEMultipart()

# 添加纯文本部分
msg.attach(MIMEText('This is the main text.', 'plain'))

# 添加附件,假设我们有一个文件名为file.jpg的图片
with open('file.jpg', 'rb') as file:
    img_data = file.read()
img_part = MIMEImage(img_data)
img_part.add_header('Content-Disposition', 'attachment', filename='file.jpg')
msg.attach(img_part)

# 现在msg变量包含了文本和图片附件的邮件消息体

设置邮件内容类型与编码

对于不同类型的附件,需设置不同的Content-Type,例如,对于PDF文档,应使用application/pdf;对于CSV文件,则应使用text/csv。同时,对于非ASCII字符集,还需要正确设置编码属性。

在Python的MIME模块中,可以通过创建相应类型的MIME子类(如MIMEText、MIMEImage、MIMEApplication等),并调用适当方法设置内容类型和编码,来确保邮件内容的正确显示和处理。

3、Python中的IMAP4协议处理

3.1 IMAP4库及其功能

3.1.1 连接与选择邮箱

IMAP4(Internet Message Access Protocol version 4)是一种用于从邮件服务器检索邮件的协议,它允许用户在邮件服务器上维护邮件,而不是像POP3那样下载后删除。Python的imaplib模块提供了对IMAP4协议的支持,使得开发者能够便捷地从服务器获取邮件。

以下是一个基本的IMAP4连接和选择邮箱的示例:

import imaplib

# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL('imap.example.com')

# 登录账号
mail.login('your_email@example.com', 'your_password')

# 选择要操作的邮箱文件夹(通常是"Inbox")
mail.select("inbox")

3.1.2 查看、检索和管理邮件

获取邮件列表与邮件详情

通过IMAP协议,可以获取邮箱中的邮件列表和每封邮件的具体信息,比如邮件UID、发件人、主题等。

# 获取所有未读邮件的UID
typ, data = mail.search(None, 'UNSEEN')
unread_msgs = data[0].split(b' ')

# 获取第一条未读邮件的详细信息
typ, msg_data = mail.fetch(unread_msgs[0], '(BODY[HEADER.FIELDS (FROM TO SUBJECT DATE)])')

# 解析邮件头信息
from_, to, subject, date = '', '', '', ''
if typ == 'OK':
    for part in msg_data:
        if isinstance(part, tuple):
            headers = dict([line.decode().split(': ') for line in part[1].split(b'\r\n')])
            from_ = headers.get('From', '')
            to = headers.get('To', '')
            subject = headers.get('Subject', '')
            date = headers.get('Date', '')

print(f"From: {from_}\nTo: {to}\nSubject: {subject}\nDate: {date}")

下载邮件附件与正文

IMAP协议支持以RFC822格式获取邮件全文,也支持按部分获取邮件内容,以便下载附件或其他特定部分。

# 获取邮件全文
typ, msg_data = mail.fetch(unread_msgs[0], '(RFC822)')
raw_email = msg_data[0][1].decode('utf-8')

# 使用email库解析邮件内容,查找附件等
import email
msg = email.message_from_string(raw_email)
for part in msg.walk():
    if part.get_content_maintype() == 'multipart':
        continue
    if part.get('Content-Disposition') is None:
        continue
    filename = part.get_filename()
    if bool(filename):
        with open(filename, 'wb') as f:
            f.write(part.get_payload(decode=True))

标记邮件状态与删除邮件

在IMAP协议下,邮件状态是可以更改的,如标记已读、移动邮件到其他文件夹或删除邮件。

# 将第一条未读邮件标记为已读
mail.store(unread_msgs[0], '+FLAGS', '\\Seen')

# 删除指定邮件
mail.store(unread_msgs[0], '+FLAGS', '\\Deleted')

# 提交这些修改
mail.expunge()  # 实际删除邮件

# 最后记得关闭连接
mail.close()
mail.logout()

3.2 使用Python的imaplib库操作邮件

3.2.1 登录并筛选邮件

除了基本的操作外,imaplib还可以用来筛选邮件,例如根据发件人、主题关键词等条件进行搜索。

# 搜索包含特定关键词的邮件
typ, data = mail.search(None, 'SUBJECT "Important Meeting"')
matching_emails = data[0].split(b' ')

# 遍历找到的邮件并打印相关信息
for email_id in matching_emails:
    # 此处重复之前获取邮件详情的代码段

4、实战案例

4.1 使用Python发送带有附件和HTML内容的邮件

4.1.1 创建MIMEMultipart对象封装邮件内容

在Python中,为了构造一封包含文本、HTML内容和附件的复杂邮件,我们需要利用email.mime模块中的MIMEMultipart类。下面是一个实例,展示了如何创建这样一个邮件消息体:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# 创建MIMEMultipart对象
msg = MIMEMultipart('alternative')
msg['Subject'] = 'Report Summary'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'

# 添加纯文本和HTML版本的邮件正文
text_part = MIMEText('This is the plain text version of the email.', 'plain')
html_part = MIMEText('<p>This is an <strong>HTML</strong> version of the email.</p>', 'html')
msg.attach(text_part)
msg.attach(html_part)

# 添加附件
with open('report.pdf', 'rb') as f:
    attachment = MIMEApplication(f.read(), _subtype='pdf')
    attachment.add_header('Content-Disposition', 'attachment', filename='report.pdf')
    msg.attach(attachment)

# 使用smtplib发送邮件
import smtplib
smtp_server = smtplib.SMTP('smtp.example.com')
smtp_server.login('sender@example.com', 'password')
smtp_server.sendmail('sender@example.com', 'recipient@example.com', msg.as_string())
smtp_server.quit()

4.1.2 添加文本、图片、附件及其他内容

在上述例子中,我们已经展示了如何发送包含文本、HTML和PDF附件的邮件。此外,如果需要发送带有图片的邮件,可以将图片转换为MIMEImage对象,并将其作为邮件的一部分添加进去:

from email.mime.image import MIMEImage

# 读取图片文件并转换为MIMEImage对象
with open('image.png', 'rb') as img_file:
    img = MIMEImage(img_file.read())
    img.add_header('Content-Disposition', 'inline', filename='image.png')
    msg.attach(img)

这样,接收者在查看邮件时就可以直接看到嵌入的图片内容。同样,其他类型的文件(如Word文档、Excel表格等)也可以按照类似的方式作为附件添加到邮件中。

4.2 使用Python爬虫配合邮件自动化任务

4.2.1 定时抓取数据并发送报告邮件

设想一个场景,每天凌晨定时抓取网站数据并生成报表,然后通过电子邮件自动发送给团队成员。可以结合Python的schedule库或apscheduler库实现定时任务,并使用前面提到的邮件发送方法将报表作为附件发送出去。

import schedule
import time
from your_crawler_module import crawl_and_generate_report

def send_daily_report():
    # 抓取数据并生成报告文件
    report_data = crawl_and_generate_report()
    with open('daily_report.csv', 'w') as report_file:
        report_file.write(report_data)

    # 构造邮件内容并发送邮件(参考4.1章节的代码)

# 设置每日凌晨1点执行任务
schedule.every().day.at("01:00").do(send_daily_report)

while True:
    schedule.run_pending()
    time.sleep(1)

4.2.2 结合IMAP自动回复或归档邮件

对于收到的特定邮件,我们可以利用Python的imaplib库实现自动回复或归档功能。例如,当收到含有特定关键词的邮件时,程序可以自动回复一条预设的消息,或者将该邮件移动到特定的归档文件夹。

import imaplib
import email

# 登录IMAP服务器并选择收件箱
mail = imaplib.IMAP4_SSL('imap.example.com')
mail.login('your_email@example.com', 'your_password')
mail.select('inbox')

# 搜索包含关键词的邮件
status, search_results = mail.search(None, 'SUBJECT "Keyword"')
for num in search_results[0].split():
    status, raw_email = mail.fetch(num, '(RFC822)')
    email_msg = email.message_from_bytes(raw_email[0][1])

    # 自动回复或归档操作在此处实现(请根据实际需求编写代码)

mail.close()
mail.logout()

5、安全性与最佳实践

5.1 电子邮件安全问题

5.1.1 邮件加密与认证机制

电子邮件的安全性至关重要,尤其是在涉及敏感信息的商业和个人通信中。为保障电子邮件的安全传输,现代电子邮件系统采用了一系列加密和认证技术。例如,SMTP协议的SSL/TLS加密层(SMTPS或STARTTLS)可确保邮件在传输过程中不被窃听,而OAuth 2.0等认证机制则增强了账户权限管理的安全性。

# 在Python中启用SMTP SSL/TLS加密发送邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 使用SMTP_SSL连接邮件服务器
smtp_server = smtplib.SMTP_SSL('smtp.example.com', 465)
smtp_server.login('username', 'password')

# 构造邮件内容并发送
msg = MIMEMultipart()
msg['From'] = 'you@example.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = 'Secure Email'
body = MIMEText('This is a secure message sent over SSL/TLS.', 'plain')
msg.attach(body)

smtp_server.send_message(msg)
smtp_server.quit()

5.1.2 防止垃圾邮件与钓鱼攻击

垃圾邮件和钓鱼邮件是电子邮件安全的主要威胁之一。为了防止此类邮件,用户和邮件服务提供商应采取以下措施:

反垃圾邮件过滤器:大多数邮件服务提供商都具备内置的反垃圾邮件算法,可以检测并隔离可疑邮件。用户也可以自行设置规则过滤垃圾邮件。
谨慎点击链接和附件:用户应当警惕来自不明来源的邮件,尤其是那些诱使点击链接或下载附件的邮件,避免遭受钓鱼攻击。
双重验证:启用两步验证或多因素认证,以增强邮箱账户的安全性。
教育和培训:定期向员工进行网络安全意识培训,了解识别和防范钓鱼邮件的方法。

5.2 邮件服务提供商限制与应对策略

5.2.1 SMTP服务器限制与设置

邮件服务提供商通常会对SMTP服务器的使用施加一些限制,如每日发送邮件的数量上限、单次发送邮件的数量、发送速率等。针对这类限制,开发者和用户应遵循以下策略:

合理安排发送计划:分散邮件发送时间,避免短时间内大量发送邮件导致触发阈值。
申请提高配额:联系邮件服务商,申请增加每日发送限额,尤其适用于企业级用户。
使用第三方服务:若自有服务器受限较大,考虑使用具有更高发送容量的专业邮件服务提供商。

5.2.2 遵循邮件发送的最佳实践

为了确保邮件送达率并减少被误判为垃圾邮件的风险,请遵循以下最佳实践:

明确的邮件标题和内容:确保邮件主题简洁明了,邮件内容合法、真实且相关。
尊重退订请求:为用户提供便捷的退订链接,尊重他们的意愿。
维护良好的发送信誉:定期清理无效或不存在的邮件地址,保持低投诉率。
DNS配置正确:设置SPF记录、DKIM签名以及DMARC策略,以证明邮件发送者的合法性。

6、阶技巧与拓展

6.1 使用第三方库如yagmail或Imbox提升效率

6.1.1 yagmail库简介与快速发送邮件

Yagmail是一个简化Python邮件发送的第三方库,它提供了比标准smtplib模块更友好的接口,可以更容易地发送包含附件、HTML内容以及处理OAUTH2等高级功能的邮件。

# 安装yagmail库
!pip install yagmail

import yagmail

# 初始化yagmail客户端
yag = yagmail.SMTP(user="your_email@example.com", password="your_password")

# 构建邮件内容,可以轻松添加文本、HTML和附件
contents = ['Hello there!', '<b>This is an HTML message</b>', '/path/to/image.jpg']

# 发送邮件
yag.send(to="recipient@example.com", subject="Yagmail Test", contents=contents)

# 关闭连接
yag.close()

6.1.2 Imbox库实现IMAP交互的高级功能

Imbox库则是对Python标准库imaplib的一个增强封装,提供了更高级的邮件检索和管理功能。使用Imbox,你可以更加方便地浏览、搜索和操作邮箱中的邮件。

# 安装imbox库
!pip install imbox

from imbox import Imbox

# 连接到IMAP服务器
imbox = Imbox('imap.example.com', username='your_email@example.com', password='your_password', ssl=True)

# 获取未读邮件
for uid, message in imbox.messages(unread=True):
    print(message.subject)
    print(message.body)

# 下载并保存附件
for _, attachments in imbox.get_attachments():
    for name, content in attachments.items():
        with open(name, 'wb') as f:
            f.write(content.read())

# 删除邮件
imbox.delete_messages(messages=[uid])

# 关闭连接
imbox.logout()

借助yagmail 和imbox这样的第三方库,开发者无需过多关注底层细节,就能更专注于应用程序的核心逻辑,极大地提高了开发效率和代码可读性。同时,这些库提供的高级特性也让电子邮件处理变得更加强大和完善,使得电子邮件在自动化脚本、数据分析和业务流程自动化等方面的应用更加广泛。

7、 结合AI与机器学习改进邮件处理流程

随着AI和机器学习技术的普及,电子邮件处理的自动化程度和智能化水平不断提升。设想一下,利用深度学习网络分析邮件内容的情感倾向,自动调整邮件回复的语气;或者通过机器学习算法预测用户的阅读习惯,提前预加载邮件附件,大幅提升用户体验。

以下是一个简化的示例,展示如何使用Python和机器学习对邮件进行情感分析:

# 假设有现成的情感分析模型
from sentiment_analysis_model import SentimentModel

# 加载模型
model = SentimentModel.load()

# 使用模型分析邮件正文情感
email_text = "邮件正文..."
sentiment = model.predict(email_text)

# 根据情感分析结果调整回复邮件的语气
if sentiment == 'positive':
    reply_text = "非常感谢您的邮件!..."
elif sentiment == 'negative':
    reply_text = "很遗憾得知您遇到问题,我们会尽快解决..."

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

漫谈分布式唯一ID

文章目录 本系列前言UUIDDB自增主键Redis incr命令号段模式雪花算法 本系列 漫谈分布式唯一ID&#xff08;本文&#xff09;分布式唯一ID生成&#xff08;二&#xff09;&#xff1a;leaf分布式唯一ID生成&#xff08;三&#xff09;&#xff1a;uid-generator分布式唯一ID生成…

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 相比其他学科&#xff0c;医学AI&#xff0c;是发表学术成果最多的领域。 医学数据的多样性和复杂性&#xff08;包括文本、图像、基因组数据等&#xff09;&#xff0c;使得…

Vue 学习随笔系列十四 -- JavaScript巧妙用法

JavaScript巧妙用法 文章目录 JavaScript巧妙用法1、String.padStart 函数2、String.padEnd 函数3、tirm 函数3. Object.freeze 函数4. Object.fromEntries 函数5. Object.entries 函数6. Array.prototype.flat 函数 1、String.padStart 函数 在字符串前面进行填充 let temp …

【PGCCC】Postgresql 物理流复制

postgresql 提供了主从复制功能&#xff0c;有基于文件的拷贝和基于 tcp 流的数据传输两种方式。两种方式都是传输 wal 数据&#xff0c;前者是等待生成一个完整的wal文件后&#xff0c;才会触发传输&#xff0c;后者是实时传输的。可以看出来基于文件方式的延迟会比较高&#…

每日小练:Day2

1.乒乓球筐 题目链接&#xff1a;乒乓球筐__牛客网 题目描述&#xff1a; 这道题主要考察B盒是不是A盒的子集&#xff0c;我们可以通过哈希表来做 单哈希表 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public stat…

esp32学习:如何解决OV5640摄像头发热问题

我们在使用esp开发板过程中&#xff0c;连接ov2640摄像头时&#xff0c;非常正常&#xff0c;但连接ov5640摄像头时&#xff0c;会发现摄像头发烫&#xff0c;非常热&#xff0c;我们网上找解决方案&#xff0c;基本都是加散热片&#xff0c;没有根本解决问题。 前段时间&#…

JQuery封装的ajax

1. 注意&#xff1a; 首先要导jq的包json对象可以用 . 来调用keyjava只能给前端传页面&#xff0c;或者打印的内容String jsonstr json.toJSONString(resultJSON); //将对象转为JSON对象 Json格式和参数解释&#xff1a; <script src"js/jquery-1.10.2.min.js&quo…

【计算机网络】章节 知识点总结

一、计算机网络概述 1. 计算机网络向用户提供的两个最重要的功能&#xff1a;连通性、共享 2. 因特网发展的三个阶段&#xff1a; 第一阶段&#xff1a;从单个网络 ARPANET 向互联网发展的过程。1983 年 TCP/IP 协议成为 ARPANET 上的标准协议。第二阶段&#xff1a;建成三级…

Python+robotframework接口自动化测试实操(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出&#xff0c;通过关键字的封装实现一定意义上的脚本与用例的脱离&#xff01; robot framework 的…

如何管理好自己的LabVIEW项目

在LabVIEW项目开发中&#xff0c;项目管理对于提高开发效率、确保项目质量、减少错误和维护成本至关重要。以下从项目规划、代码管理、测试与调试、版本控制、团队协作等方面&#xff0c;分享LabVIEW项目管理的体会。 ​ 1. 项目规划与需求分析 关键步骤&#xff1a; 需求分析…

【快速解决】kafka崩了,重启之后,想继续消费,怎么做?

目录 一、怎么寻找我们关心的主题在崩溃之前消费到了哪里&#xff1f; 1、一个问题&#xff1a; 2、查看消费者消费主题__consumer_offsets 3、一个重要前提&#xff1a;消费时要提交offset 二、指定 Offset 消费 假如遇到kafka崩了&#xff0c;你重启kafka之后&#xff0…

matlab建模入门指导

本文以水池中鸡蛋温度随时间的变化为切入点&#xff0c;对其进行数学建模并进行MATLAB求解&#xff0c;以更为通俗地进行数学建模问题入门指导。 一、问题简述 一个煮熟的鸡蛋有98摄氏度&#xff0c;将它放在18摄氏度的水池中&#xff0c;五分钟后鸡蛋的温度为38摄氏度&#x…

51单片机应用开发(进阶)---定时器应用(电子时钟)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、功能1&#xff1a;&#xff08;1&#xff09;简单显示时间。显示格式&#xff1a;88-88-88&#xff08;时-分-秒&#xff09; 4、功能2&#xff1a;&#xff08;1&#…

【外包】软件行业的原始形态,项目外包与独立开发者

【外包】互联网软件行业的原始形态&#xff0c;项目外包与独立开发者 本科期间写的一些东西&#xff0c;最近整理东西看到了&#xff0c;大致整理一下放出来&#xff0c;部分内容来自其他文章&#xff0c;均已引用。 文章目录 1、互联网软件行业的原始形态2、项目订单&#xff…

Python酷库之旅-第三方库Pandas(208)

目录 一、用法精讲 971、pandas.MultiIndex.set_levels方法 971-1、语法 971-2、参数 971-3、功能 971-4、返回值 971-5、说明 971-6、用法 971-6-1、数据准备 971-6-2、代码示例 971-6-3、结果输出 972、pandas.MultiIndex.from_arrays类方法 972-1、语法 972-2…

基于ConvNeXt的矿石种类识别

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

C++入门基础知识140—【关于C++ 类构造函数 析构函数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 类构造函数 & 析构函数的相关内容…

【Linux】-学习笔记03

第十一章-管理Linux软件包和进程 1.源码下载安装软件 1.1概念 源码文件&#xff1a;程序编写者使用C或C等语言编写的原始代码文本文件 源码文件使用.tar.gz或.tar.bz2打包成压缩文件 1.2特点 源码包可移植性好&#xff0c;与待安装软件的工作环境依赖性不大 由于有编译过程…

鸿蒙HarmonyOS(ArkUI基础篇大合集!)

文章目录 ArkUI&#xff08;方舟UI框架&#xff09;1.简介2.基本概念3.概述4.布局1.概述2.通用布局属性&#x1f388;1.盒子属性2.背景属性3.定位属性4.通用属性&#x1f388; 3.线性布局4.弹性布局(Flex)5.层叠布局(Stack) 5.组件1.使用文本1.文本显示(Text/Span)2.文本输入 (…

Prompt 工程

Prompt 工程 1. Prompt 工程简介 “预训练-提示预测”范式是近年来自然语言处理&#xff08;NLP&#xff09;领域的一个重要趋势&#xff0c;它与传统的“预训练-微调-预测”范式相比&#xff0c;提供了一种更为灵活和高效的模型应用方式。 Prompt工程是指在预训练的大型语言…