Python 网络请求利器:requests 包详解与实战
诸神缄默不语-个人技术博文与视频目录
文章目录
- 一、前言
- 二、安装方式
- 三、基本使用
- 1. 发起 GET 请求
- 2. 发起 POST 请求
- 四、requests请求调用常用参数
- 1. URL
- 2. 数据data
- 3. 请求头 headers
- 4. 参数 params
- 5. 超时时间 timeout
- 6. 文件上传 file:上传纯文本文件流
- 7. json
- 五. 响应的属性和函数
- 1. 属性:headers、cookies、编码格式
- 2. 异常处理:raise_for_status()
- 六、Session 会话对象(保持登录态)
- 七、进阶用法
- 1. 上传压缩文件
- 2. 并发
- 七、常见异常
- 1. requests.exceptions.JSONDecodeError
- 2. requests.exceptions.Timeout
- 3. requests.exceptions.ProxyError: HTTPSConnectionPool
- 八、实战案例:爬取豆瓣电影 Top250(示例)
- 本文撰写过程中参考的其他网络资料
一、前言
在进行网络编程或爬虫开发时,我们经常需要向网页或服务器发送 HTTP 请求,获取数据。这时,requests
包无疑是最受欢迎、最简洁易用的 Python 库之一。
相比原生的 urllib
模块,requests
提供了更人性化的 API,更容易上手,几乎成为了网络请求的“标准库”。
本文将介绍 requests
的基本用法、进阶操作以及常见问题处理,配合实际代码演示,带你快速掌握这个神器!
https://httpbin.org/是一个简单的用来模拟各种HTTP服务请求的网站,以下很多代码示例都会用这个网站的链接来实现。
因为这个网站部署在海外,所以可能会出现网络访问的问题,可以通过部署到本地来解决。部署到本地可以参考官方教程,或者这篇博文:五、接口测试 — Httpbin介绍(请求调试工具) - 知乎
二、安装方式
pip install requests
三、基本使用
关于get请求和post请求的区别请参考我撰写的另一篇博文:Web应用中的GET与POST请求详解
1. 发起 GET 请求
import requestsresponse = requests.get('https://httpbin.org/get')
print(response.status_code) # 状态码
print(response.text) # 响应内容(字符串)
print(response.json()) # 如果是 JSON,解析成字典
2. 发起 POST 请求
payload = {'username': 'test', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.json())
四、requests请求调用常用参数
1. URL
就是第一个参数,网站的链接地址
2. 数据data
请求携带的数据。
如果值是字符串或字节流,默认不设置Content-Type会设置。
如果值是字典、元组组成的列表或列表对象,会默认Content-Type会设置为application/x-www-form-urlencoded
,也就是HTML表单形式的键值对数据。(对Content-Type的详细介绍请见下一节headers参数)
import requests
import jsonpayload = {"key1": "value1", "key2": "value2"}# String payload in json format
r = requests.post("https://httpbin.org/post", data="a random sentence")
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))# String payload in json format
r = requests.post("https://httpbin.org/post", data=json.dumps(payload))
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))# String payload in json content type
r = requests.post("https://httpbin.org/post",data=json.dumps(payload),headers={"Content-Type": "application/json"},
)
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))# Dictionary payload
r = requests.post("https://httpbin.org/post", data=payload)
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))# List of tuples payload
payload_tuples = [("key1", "value1"), ("key2", "value2")]
r = requests.post("https://httpbin.org/post", data=payload_tuples)
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))# Bytes payload
payload_bytes = "key1=value1&key2=value2".encode("utf-8")
r = requests.post("https://httpbin.org/post", data=payload_bytes)
print(r.json())
print(r.json()["headers"].get("Content-Type","None"))
3. 请求头 headers
一般会携带请求的Content-Type、系统信息(如使用的设备、编码方式等)、认证信息、时间戳等
headers = {'User-Agent': 'MyUserAgent/1.0'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())
Content-Type的常见类型:
(图源1)
4. 参数 params
这个在get请求中的效果就类似于直接在URL后面加?k=v
params = {'q': 'python'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # 实际请求的完整 URL
输出:https://httpbin.org/get?q=python
5. 超时时间 timeout
response = requests.get('https://httpbin.org/delay/3', timeout=2)
如果超过2秒没响应,会抛出
requests.exceptions.Timeout
异常。
6. 文件上传 file:上传纯文本文件流
files = {'file': open('test.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)
↑ 需要注意的是虽然file参数确实可以直接这么传文件流……但我没咋见过真这么干的。
一般纯文本不用file传,一般都直接塞data里面带过去。
非纯文本文件流(二进制字节流),我一般看比较多的传输方式是把字节流转换为base64编码塞到data里带。用base64编码的代码可参考我写的另一篇博文:深入理解 Python 的 base64 模块
(不过说实话直接用file参数传文件流好像实际上背后也经过了base64编码-解码的过程,但是大家都这么干一定有大家的道理)
7. json
用json参数传JSON对象(在Python 3中表现为字典对象)就相当于用data参数传JSON对象、然后显示设置Content-Type为application/json
payload = {'id': 1, 'name': 'chatgpt'}
response = requests.post('https://httpbin.org/post', json=payload)
print(response.json())
上面这个请求和下面这个请求是一样的:
response = requests.post("https://httpbin.org/post",data=json.dumps(payload),headers={"Content-Type": "application/json"},
)
print(response.json())
作为对比可以看看另外两种请求参数格式的效果(可以注意到第一种写法返回的data和json值好歹还是一样的,第二种写法的话对象就放到form里了,因为是以表单对象形式来解析的):
response = requests.post("https://httpbin.org/post",data=json.dumps(payload)
)
print(response.json())response = requests.post("https://httpbin.org/post",data=payload
)
print(response.json())
五. 响应的属性和函数
1. 属性:headers、cookies、编码格式
r = requests.get('https://httpbin.org/get')
print(r.headers)
print(r.cookies)
print(r.encoding)
2. 异常处理:raise_for_status()
如果status_code不是200就报错
六、Session 会话对象(保持登录态)
requests.Session()
可以模拟保持会话,适合需要登录认证的网站。
s = requests.Session()
s.post('https://httpbin.org/cookies/set', data={'cookie': 'value'})
response = s.get('https://httpbin.org/cookies')
print(response.text)
七、进阶用法
1. 上传压缩文件
- gzip实现
import requests import gzip import jsondata = json.dumps({'key': 'value'}).encode('utf-8') compressed_data = gzip.compress(data)headers = {'Content-Encoding': 'gzip'}response = requests.post('https://httpbin.dev/api', data=compressed_data, headers=headers) response.raise_for_status()print("Gzip Compressed Request Status:", response.status_code)
- brotli实现
import requests import brotlidata = json.dumps({'key': 'value'}).encode('utf-8') compressed_data = brotli.compress(data)headers = {'Content-Encoding': 'br'}response = requests.post('https://httpbin.dev/api', data=compressed_data, headers=headers) response.raise_for_status()print("Brotli Compressed Request Status:", response.status_code)
2. 并发
- httpx实现(来源于Concurrency vs Parallelism)
import asyncio import httpx import time# Asynchronous function to fetch the content of a URL async def fetch(url):async with httpx.AsyncClient(timeout=10.0) as client:response = await client.get(url)return response.text# Concurrently fetch multiple URLs using asyncio.gather async def concurrent_fetch(urls):tasks = [fetch(url) for url in urls]return await asyncio.gather(*tasks)# Synchronous version to demonstrate performance difference def sync_fetch(urls):results = []for url in urls:response = httpx.get(url)results.append(response.text)return resultsdef run_concurrent():urls = ["http://httpbin.org/delay/2"] * 100 # Use the same delay for simplicitystart_time = time.time()# Running fetch requests concurrentlyasyncio.run(concurrent_fetch(urls))duration = time.time() - start_timeprint(f"Concurrent fetch completed in {duration:.2f} seconds")def run_sync():urls = ["http://httpbin.org/delay/2"] * 100 # Use the same delay for simplicitystart_time = time.time()# Running fetch requests synchronouslysync_fetch(urls)duration = time.time() - start_timeprint(f"Synchronous fetch completed in {duration:.2f} seconds")if __name__ == "__main__":print("Running concurrent version:")# Concurrent fetch completed in 2.05 secondsrun_concurrent()print("Running synchronous version:")# Synchronous fetch completed in 200.15 secondsrun_sync()
- threading实现
import threading import requestsdef post_data(data):requests.post('https://httpbin.dev/api', json=data)# Sample data list data_list = [{'name': 'User1'}, {'name': 'User2'}]threads = [] for data in data_list:thread = threading.Thread(target=post_data, args=(data,))threads.append(thread)thread.start()for thread in threads:thread.join()
关于并发的相关知识也可以参考我写的另一篇博文:Python中的并发与并行
七、常见异常
1. requests.exceptions.JSONDecodeError
如果response带的报文不是JSON,还调用response.json()
函数,会报requests.exceptions.JSONDecodeError
错误,完整的报错信息类似这样:
Traceback (most recent call last):File "myenv_path\Lib\site-packages\requests\models.py", line 974, in jsonreturn complexjson.loads(self.text, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\json\__init__.py", line 346, in
loadsreturn _default_decoder.decode(s)^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\json\decoder.py", line 337, in decodeobj, end = self.raw_decode(s, idx=_w(s, 0).end())^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\json\decoder.py", line 355, in raw_decoderaise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)During handling of the above exception, another exception occurred:Traceback (most recent call last):File "tryrequests1.py", line 6, in <module>print(response.json()) # 如果是 JSON,解析成字典^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\requests\models.py", line 978, in jsonraise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
2. requests.exceptions.Timeout
等待请求返回结果的时长超过了timeout
参数设置的时长。
3. requests.exceptions.ProxyError: HTTPSConnectionPool
访问URL失败。
有时候网络服务不稳定是临时的,直接重试几次就行。重试的策略可以参考我撰写的另一篇博文:Python3:在访问不可靠服务时的重试策略(持续更新ing…)
一个典型的由于临时的网络不稳定而产生的访问失败报错输出全文:
Traceback (most recent call last):File "myenv_path\Lib\site-packages\urllib3\connectionpool.py", line 789, in urlopenresponse = self._make_request(^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\urllib3\connectionpool.py", line 536, in _make_requestresponse = conn.getresponse()^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\urllib3\connection.py", line 507, in getresponsehttplib_response = super().getresponse()^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\http\client.py", line 1374, in getresponseresponse.begin()File "myenv_path\Lib\http\client.py", line 318, in beginversion, status, reason = self._read_status()^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\http\client.py", line 287, in _read_statusraise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without responseThe above exception was the direct cause of the following exception:urllib3.exceptions.ProxyError: ('Unable to connect to proxy', RemoteDisconnected('Remote end closed connection without response'))The above exception was the direct cause of the following exception:Traceback (most recent call last):File "myenv_path\Lib\site-packages\requests\adapters.py", line 667, in sendresp = conn.urlopen(^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\urllib3\connectionpool.py", line 843, in urlopenretries = retries.increment(^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\urllib3\util\retry.py", line 519, in incrementraise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /cookies (Caused by ProxyError('Unable to connect to proxy', RemoteDisconnected('Remote end
closed connection without response')))During handling of the above exception, another exception occurred:Traceback (most recent call last):File "tryrequests1.py", line 5, in <module>response = s.get('https://httpbin.org/cookies')^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\requests\sessions.py", line 602, in getreturn self.request("GET", url, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\requests\sessions.py", line 589, in requestresp = self.send(prep, **send_kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\requests\sessions.py", line 703, in sendr = adapter.send(request, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "myenv_path\Lib\site-packages\requests\adapters.py", line 694, in sendraise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded
with url: /cookies (Caused by ProxyError('Unable to connect to proxy', RemoteDisconnected('Remote end closed connection without response')))
八、实战案例:爬取豆瓣电影 Top250(示例)
import requests
from bs4 import BeautifulSoupheaders = {'User-Agent': 'Mozilla/5.0'}for start in range(0, 250, 25):url = f'https://movie.douban.com/top250?start={start}'r = requests.get(url, headers=headers)soup = BeautifulSoup(r.text, 'html.parser')titles = soup.find_all('span', class_='title')for title in titles:print(title.text)
本文撰写过程中参考的其他网络资料
- What is the difference between the ‘json’ and ‘data’ parameters in Requests? | WebScraping.AI
- python requests.post() 请求中 json 和 data 的区别 - 小嘉欣 - 博客园
- Python requests.post()方法中data和json参数的使用_requests.post中data和json是否可以同时设置-CSDN博客
Python requests POST ↩︎
相关文章:
Python 网络请求利器:requests 包详解与实战
诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、安装方式三、基本使用1. 发起 GET 请求2. 发起 POST 请求 四、requests请求调用常用参数1. URL2. 数据data3. 请求头 headers4. 参数 params5. 超时时间 timeout6. 文件上传 file:上传纯文本文件流7. jso…...
聊透多线程编程-线程基础-1.进程、线程基础概念
目录 一、进程 二、线程 三、进程与线程的关系 四、进程与线程的比较 注:本文多张图片来源于网络,如有侵权,请联系删除 一、进程 1. 进程的定义 进程是指在系统中正在运行的一个应用程序的实例,是操作系统进行资源分配和调…...
Android:Android Studio右侧Gradle没有assembleRelease等选项
旧版as是“Do not build Gradle task list during Gradle sync” 操作这个选项。 参考这篇文章:Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包_gradle 没有task-CSDN博客 在as2024版本中,打开Setting…...
LeetcodeBST2JAVA
235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&…...
如何创建单独的城市活码?活码能永久使用吗?
如何创建单独的城市活码 创建单独的城市活码通常需要借助专业的第三方工具,以下是具体步骤: 1.选择合适的工具 推荐使用专业的活码生成工具。 2.注册并登录 访问官网,完成注册并登录。 3.创建活码 在首页点击“创建活码”按钮。输入活码…...
用户画像(https://github.com/memodb-io/memobase)应用
1.下载项目的源代码,我们要先启动后端,用docker启动 cd src/server cp .env.example .env cp ./api/config.yaml.example ./api/config.yaml 这里我的配置内容如下config.yaml(因为我是调用的符合openai格式的大模型,所以我没改,如果要是别的大模型的话,需要自己再做兼容…...
基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划|文献速递-深度学习医疗AI最新文献
Title 题目 Automated planning of mandible reconstruction with fibula free flap basedon shape completion and morphometric descriptors 基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划 01 文献速递介绍 因创伤、骨髓炎和肿瘤而接受下颌骨节段切除术…...
Python3笔记之号称替代pip的uv包管理器
uv是什么? uv,这是一个由 Astral 团队开发的极快速的Python包和项目管理工具,用Rust语言编写。它集成了多种功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具,提供更高效、更全面的Py…...
面试如何应用大模型
在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...
贪心算法:部分背包问题深度解析
简介: 该Java代码基于贪心算法实现了分数背包问题的求解,核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序,按wm(价值/重量比)从高到低重新排列物品;随后分两阶段装入:循环…...
Java程序的基本规则
java程序的基本规则 1.1 java程序的组成形式 Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序 必须以类(class)的形式存在,类(class)是Java程序的最小程序 单位。Java程序不允许可执行性语句…...
机器学习-线性回归模型
机器学习-线性回归模型 线性模型笔记1、向量化2、线性回归模型公式3、损失函数(代价函数)4、梯度下降法5、Python 实现示例 6、使用 sklearn 实现线性回归模型✅ 基本步骤如下:📦 示例代码: 7、numpy中的切片X[n,:]是取…...
Linux 入门指令(1)
(1)ls指令 ls -l可以缩写成 ll 同时一个ls可以加多个后缀 比如 ll -at (2)pwd指令 (3)cd指令 cd .是当前目录 (4)touch指令 (5)mkdir指令 (6)rmdir和rm…...
密码学基础——AES算法
目录 一、算法背景 AES算法与Rijndael算法 二、算法特点 1.安全性高 2.效率高 3.灵活性好 三、算法说明 3.1状态、种子密钥和轮数的概念 (1)状态(State) 定义 结构:通常状态是一个 4N 字节的矩阵࿰…...
淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发
要实现淘宝 API 与小程序深度联动,开发商品详情页 “一键转卖” 功能,可按以下步骤进行: 1. 前期准备 淘宝开放平台接入:在淘宝开放平台注册开发者账号,创建应用,获取 App Key 和 App Secret,…...
深入解析 C++ 设计模式:原理、实现与应用
一、引言 在 C 编程的广袤领域中,设计模式犹如闪耀的灯塔,为开发者指引着构建高效、可维护软件系统的方向。设计模式并非神秘莫测的代码魔法,实际上,我们在日常编程中或许早已与之打过交道。简单来说,设计模式常常借助…...
配置与管理代理服务器
安装squid Squid软件包在标准yum存储库中可用,因此,我们正在使用yum命令安装Squid代理。 [rootserver ~]# dnf install -y squid //安装 [rootserver ~]#systemctl enable --now squid.service [rootserver ~]#systemctl status squid.serv…...
RuntimeError: CUDA error: invalid device function
CUDA内核编译时的架构设置与当前GPU不兼容导致 -- The CUDA compiler identification is NVIDIA 11.5.119 (实际为 12.6) 解决方案: 1. 查看显卡计算能力 2. CMakeLists.txt 修改 set_target_properties(my_library PROPERTIESCUDA_AR…...
vulnhub:sunset decoy
靶机下载地址https://www.vulnhub.com/entry/sunset-decoy,505/ 渗透过程 简单信息收集 nmap 192.168.56.0/24 -Pn # 确定靶机ip:192.168.56.121 nmap 192.168.56.121 -A -T4 # 得到开放端口22,80 在80端口得到save.zip,需要密码解压。 john破解压缩…...
MySQL日期时间类型详解:DATE、TIME和DATETIME的用法与区别
在数据库设计中,正确处理日期和时间数据是至关重要的。MySQL提供了多种数据类型来存储时间信息,其中最常用的三种是DATE、TIME和DATETIME。本文将详细介绍这三种类型的特性、区别以及实际应用场景。 一、基本数据类型介绍 1. DATE类型 用途࿱…...
js异步机制
1、什么是异步机制?为什么js需要异步机制? 异步机制和同步机制是相对应的,异步是指:当代码按照顺序执行到一些比较耗时的操作,不会立刻执行,而是将这些操作推到一个队列中等待合适的时机从队列中取出任务执…...
Pycharm常用快捷键总结
主要是为了记录windows下的PyCharm的快捷键,里面的操作都试过了功能描述会增加备注。 文件操作 快捷键功能描述Ctrl N新建文件Ctrl Shift N根据名称查找文件Ctrl O打开文件Ctrl S保存当前文件Ctrl Shift S另存为Alt F12打开终端(Terminal&…...
巧记英语四级单词 Unit2-下【晓艳老师版】
mit传递(send 送)、 superiority n.优势,优越性 超越别人的东西就是自己的优势govern v.统治 government政府 统治的机构administer v.管理,治理 minister 大臣 部长,mini-小人,一再的做大臣 部长…...
走进底层 - JVM工作原理入门指南
走进底层 - JVM工作原理入门指南 Java 之所以能够实现“一次编写,到处运行”(Write Once, Run Anywhere, WORA),核心在于 Java 虚拟机(JVM, Java Virtual Machine)。JVM 是 Java 程序的运行环境,…...
windows 10频繁通知A字“出现了问题,无法安装功能。”
一、故障突现 windows 10频繁通知A字“出现了问题,无法安装功能。” 编辑文档时发现黑体、楷体gb_2312等常用字体,在字体列表中失踪,原来设置好的字体也显示失效。 二、起因分析 回想了一下,是3月27日安装了 2025-适用于Windows…...
基础环境配置
1.GitGerritjenkins Linux 远程登录 | 菜鸟教程 https://zhuanlan.zhihu.com/p/22766058062 2.Samba 配置 3.软件安装 (1)MobaXterm (2)Vscode (3)Xmind (4) Audacity Aud…...
ROS2——foxy apt打包离线安装deb包
需要从A设备复制ROS2环境到B设备,且B设备有可能没网络,所以选择制作离线资源包 1. 本机安装指令 本机环境ubuntu20.04,安装ros2-foxy版本,直接输入以下指令,基本不会遇到问题 这里安装的是ros-base版本,不…...
大数据学习(104)-clickhouse与hdfs
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
大数据 - 1. 概述
早期的计算机(上世纪70年代前) 是相互独立的,各自处理各自的数据上世纪70年代后,出现了基于TCP/IP协议的小规模的计算机互联互通。上世纪90年代后,全球互联的互联网出现。当全球互联网逐步建成(2000年左右&…...
CD25.【C++ Dev】类和对象(16) static成员(上)
目录 1.static成员变量 问题:实现一个类,计算程序中创建出了多少个类对象 设计思路 代码示例 版本1 版本2 static成员 特点1.static成员为静态成员,为所有类对象所共享(在某种程度上可以理解为全局的,用类去封装"全局变量"),存放在静态区,则不属于某个具体的…...
C语言今天开始了学习
好多年没有弄了,还是捡起来弄下吧 用的vscode 建议大家参考这个配置 c语言vscode配置 c语言这个语言简单,但是今天听到了一个消息说python 不知道怎么debug。人才真多啊...
Mockito如何对静态方法进行测试
在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…...
Three.js 入门实战:安装、基础概念与第一个场景⭐
学习本章节你不必要追求细节,你只需要了解基本的3D场景需要哪些元素组成,如何通过组成3D场景的元素属性调整来控制3D物体或者场景即可。 在上一篇文章中我们初识了 Three.js,今天我们正式进入实战环节 🎯 前置准备: …...
【QT】QT的消息盒子和对话框(自定义对话框)
QT的消息盒子和对话框(自定义对话框) 一、消息盒子QMessageBox1、弹出警告盒子示例代码:现象: 2、致命错误盒子示例代码:现象: 3、帮助盒子示例代码:现象: 4、示例代码: …...
QT面试题:内存管理与对象生命周期
题目: 在Qt中,当一个父对象被销毁时,其子对象是否会被自动释放?请结合Qt的内存管理机制说明原因,并解释在什么情况下可能导致内存泄漏。如何避免这类问题? 参考答案 父子对象的内存管理机制 …...
linux查询inode使用率
在 Linux 中,inode 用于存储文件和目录的元数据(如权限、所有者、时间戳等)。当文件系统的 inode 被耗尽时,即使磁盘空间充足,系统也会提示 No space left on device。以下是查询 inode 使用率的详细方法: …...
算法基础—二分算法
目录 一、⼆分查找例题 1 牛可乐和魔法封印 2 A-B 数对 3 烦恼的高考志愿 二、 ⼆分答案 1 木材加⼯ 2 砍树 3 跳石头 ⼆分算法的原理以及模板其实是很简单的,主要的难点在于问题中的各种各样的细节问题。因此,⼤多数情况下,只是背会…...
2024年第十五届蓝桥杯CC++大学A组--成绩统计
2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目: 动态规划, 对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩&…...
家居实用品:生活中的艺术,家的温馨源泉
在快节奏的现代生活中,家居实用品不仅是日常所需的工具,更是营造温馨家居氛围、提升生活品质的关键元素。它们以其独特的魅力,默默地融入我们的日常生活,成为连接物质世界与精神世界的桥梁。 走进家门,首先映入眼帘的或…...
TCP重传率高与传输延迟问题
目录标题 排查步骤:TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…...
超越简单检索:探索知识图谱与大型语言模型的协同进化之路
摘要: 大型语言模型(LLM)在自然语言处理领域取得了革命性进展,但其在事实准确性、复杂推理和可解释性方面仍面临挑战,“幻觉”现象是其固有局限性的体现。知识图谱(KG)作为结构化人类知识的载体,…...
汽车的四大工艺
文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺(从网上找了一张图,感觉挺全面的)。 冲压工艺 将金属板材通过…...
研发效能实践:技术评审会生存指南
文章目录 🚨开篇暴击:为什么你的评审会像「菜鸡互啄」?⚙️第一章:Google Design Sprint——5天把争议变成共识📅 Day 1-5 实操手册Map the Problem(画地图)Sketch Solutions…...
js 拷贝
在 JavaScript 中,拷贝对象和数组时需要特别注意,因为对象和数组是引用类型,直接赋值只会复制引用,而不是实际的数据。以下是几种常见的拷贝方法及其应用场景: 1. 浅拷贝(Shallow Copy) 浅拷贝…...
AI比人脑更强,因为被植入思维模型【51】效率思维模型
giszz的理解:效率实际没有用,过分的追求效率,也是当下社会的弊病。但是效率思维,让我们能够用一个最简单的模型,去平衡投入和产出的最佳比例。过高的效率,会导致过大的压力,合适是最好的。 一、…...
Spark RDD相关概念
Spark运行架构与核心组件 1.Spark运行梁构 spark运行架构包括master和slave两个主要部分。master负责管理整个集群的作业任务调度,而slave则负责实际执行任务。 dirver是Spark驱动器节点,负责执行Spark任务中的main方法,将用户程序转换成作业…...
每日一题(小白)数组娱乐篇21
由于题意可知我们是要将对应的数字转换为英文,我们要考虑两点一个是进制的转换,也就是类似于我们的十进制一到9就多一位,这里的进制就是Z进制也就是27进制一旦到26下一位则进位;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…...
LLM 的model.generate() 参数说明
LLM 的model.generate() 参数说明 目录 LLM 的model.generate() 参数说明生成长度控制参数采样策略参数重复惩罚参数束搜索参数其他参数model.generate() 方法是 Hugging Face Transformers 库中用于文本生成的核心方法,它有众多参数可用于控制生成过程 生成长度控制参数 min…...
每日一题——AB10 反转链表
ListNode* prev NULL;while(head) {ListNode* next head->next; // 先记住下一个节点head->next prev; // 把当前节点指向前一个prev head; // 前一个节点变成当前节点head next; // 当前节点移动到下一个}return prev; // …...
大模型备案语料安全要求解析
根据大模型备案法规要求及实践经验,我整理除了以下涉及到语料安全相关环节的要求,供大家参考,如果有大模型备案和算法备案的更多疑问,也可以和我沟通交流。 一、关键词库规模与覆盖范围 1.基础规模 企业需建立拦截关键词库&…...