Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉
Python像一个二三十岁的年轻人,自由、年轻、又灵活
欢迎一起进入Python的世界~
本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。
目录
一、类与常见数据结构
1. Python库、模块、类
1) Python库
2) Python模块
3) Python类
2. Python基本数据结构
1) 列表(List)
2) 元组(Tuple)
3) 字典(Dictionary)
4) 集合(Set)
二、Python进行HTTP请求
1. 示例代码
2. JSON数据处理
1) json.dumps转为json串
2) json.loads转为字典
三、Python文件处理
1. 文件目录:os模块
2. 读取与写入:open函数
3. 处理Excel:openpyxl库
一、类与常见数据结构
1. Python库、模块、类
Python库是一个集合,包含多个模块。模块是单个文件,包含函数、类和变量等。类是模块中的一个组件,用于定义对象的结构和行为。简而言之,库由模块组成,模块由类和其他代码组成。
1) Python库
- Python库是一组模块的集合,通常是为了实现特定的功能或解决特定的问题而组织在一起的。库可以是一个包(Package),包是一种特殊的模块,可以包含多个子模块和子包。
- 库用于提供一组相关的功能,这些功能通常比单个模块更复杂、更全面。库可以是第三方库,也可以是Python标准库的一部分。
2) Python模块
在了解Python类与基本数据结构之前,需要了解Python类到底在该语言中处于怎样的位置,即Python类与具体的Python文件之间是什么关系。
Python文件和类的关系:Python文件和类的关系可以类比为容器和内容物的关系。一个Python文件可以包含一个或多个类的定义,也可以包含其他代码,如函数、变量等。
- 一个Python文件称为一个模块。模块是Python代码的基本组织单位。(模块的名称通常与文件名相同。例如,文件
my_module.py
定义了一个模块my_module
) - 在模块中可以定义类:这些类可以相互独立,也可以相互关联。
- 导入模块和类:可以使用import导入整个模块,然后通过模块名访问其中的类、函数和变量。同样,也可以使用 from ... import ... 语句直接导入模块中的指定类。
3) Python类
使用class关键词来定义一个类:
class MyClass:# 类的属性attribute1 = "value1"attribute2 = "value2"# 类的方法def my_method(self):print("Hello from my_method!")
创建实例,通过类名后跟一对括号创建实例:
my_instance = MyClass()
print(my_instance.attribute1) # 输出: value1
my_instance.my_method() # 输出: Hello from my_method!
初始化方法:
__init__方法是一个特殊的方法,被成为类的构造函数或初始化方法。当创建一个新的对象实例时,__init__方法会被自动调用。
2. Python基本数据结构
Python提供了几种内置的基本数据结构,这些数据结构在日常编程中非常有用。以下是一些常见的Python基本数据结构及其详细说明:
1) 列表(List)
列表是一种有序的集合,可以包含不同类型的元素。列表是可变的,这意味着你可以修改列表中的元素。
以下代码包含了 创建列表、插入元素和删除元素 的逻辑:
# 1. 创建列表:
my_list = [1, 2, 3, 4, 5]
my_list = ['apple', 'banana', 'cherry']
my_list = [1, 'apple', 3.14, True]# 2. 插入元素:
my_list = [1, 2, 3]# 在列表末尾插入一个元素
my_list.append(4) # [1, 2, 3, 4]# 在列表指定位置插入一个元素
my_list.insert(1, 'a') # [1, 'a', 2, 3, 4]# 在列表末尾一次性添加多个元素
my_list.extend([5, 6]) # [1, 'a', 2, 3, 4, 5, 6]# 3. 删除元素:
my_list = [1, 'a', 2, 3, 4, 5, 6]# 删除第一个值为 x 的元素
my_list.remove('a') # [1, 2, 3, 4, 5, 6]# 删除指定位置的元素,并返回该元素。如果不指定位置,默认删除最后一个元素
my_list.pop(2) # [1, 2, 4, 5, 6],返回3# 删除最后一个位置的元素
my_list.pop() # [1, 2, 4, 5],返回6# 清空列表
my_list.clear() # []
常用方法:
- 添加元素:
- append(x) :在列表末尾添加一个元素
- insert(i, x) : 在指定位置插入一个元素
- extent(iterable):在列表末尾一次性添加多个元素
当需要处理一个动态的数据集合,列表是一个很好的选择。
2) 元组(Tuple)
元组是一种有序的集合,与列表类似,但元组是不可变的,这意味着一旦创建,就不能修改元组中的元素。
# 创建元组
my_tuple = (1, 2, 3, 4, 5)
my_tuple = ('apple', 'banana', 'cherry')
my_tuple = (1, 'apple', 3.14, True)# 1. 访问元组,可以通过索引进行访问
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple[2]) # 3# 2. 其他方法
my_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
my_tuple.count(5) # 3 返回值为5的元素个数
my_tuple.index(4) # 2 返回第一个值为x的元素的索引
元组相对于列表,其优势在于 不可变性。由于一经创建就不可变,一方面,可以存储固定的数据,例如存储不可修改的数据、或者作为字典的键。另一方面,由于其不可变,内存占用紧凑,更加节省内存空间。
3) 字典(Dictionary)
字典是一种无序的键值对集合。字典是可以变的,可以通过键来访问、添加、删除和修改值。
# 1. 创建字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict['name']) # Alice# 2. 访问元素
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict['name']) # Alice# 3. 添加和修改元素
my_dict['gender'] = 'Female' # 添加新键值对
my_dict['age'] = 31 # 修改现有键值对# 4. 删除元素
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
# 删除指定键值对
del my_dict['city'] # {'name': 'Alice', 'age': 30}
# 删除指定键值对,并返回值。如果键不存在,返回默认值。
my_dict.pop('age') # 30,{'name': 'Alice'}
# 删除并返回最后一对键值对(Python 3.7+)。
my_dict.popitem() # ('name', 'Alice'),{}
# 清空字典。
my_dict.clear() # {}# 5. 其他方法
# 返回字典的键视图
print(my_dict.keys()) # dict_keys(['name', 'age', 'city'])
# 返回字典的值视图。
print(my_dict.values()) # dict_values(['Alice', 30, 'New York'])
# 返回字典的键值对视图。
print(my_dict.items()) # dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])
# 返回指定键的值,如果键不存在,返回默认值。
print(my_dict.get('name')) # Alice
print(my_dict.get('gender', 'Unknown')) # Unknown
4) 集合(Set)
集合是一种无序的不重复元素集合。集合是可变的,可以进行集合运算,如并集、交集、差集等。
# 1. 创建集合
my_set = {1, 2, 3, 4, 5}
my_set = set([1, 2, 3, 4, 5])# 2. 添加元素
my_set = {1, 2, 3}
# 添加一个元素
my_set.add(4) # {1, 2, 3, 4}
# 添加多个元素
my_set.update([5, 6]) # {1, 2, 3, 4, 5, 6}# 3. 删除元素
my_set = {1, 2, 3, 4, 5}
# 删除元素x,如果元素不存在,抛出KeyError。
my_set.remove(3) # {1, 2, 4, 5}
# 删除元素x,如果元素不存在,不抛出异常。
my_set.discard(6) # {1, 2, 4, 5}
# 删除并返回一个任意元素,如果集合为空,抛出KeyError。
my_set.pop() # 返回一个任意元素,例如1,{2, 4, 5}
# 清空集合。
my_set.clear() # {}# 4. 集合运算
# union(*others):返回并集。
# intersection(*others):返回交集。
# difference(*others):返回差集。
# symmetric_difference(other):返回对称差集。
# issubset(other):判断是否是子集。
二、Python进行HTTP请求
1. 示例代码
Python进行HTTP请求,通常使用 requests库
下面是一个经典的,使用requests请求并返回数据的Python代码:
import requests
import jsonapi_key = 'xxx'# 设置params(如果有的话)
params = {'key1': 'value1','key2': 'value2'
}# 设置请求头
headers = {'Authorization': f'Bearer {api_key}','Content-Type' : 'application/json'
}# 设置payload数据
data = {"inputs": {"title" : "托尼老师,你睡了吗?我睡不着"},"query": "1","response_mode": "streaming","conversation_id": "","user": "xxx"
}# 发送请求
# data从json变成json字符串格式
response = requests.post('https://xxx/v1/chat-messages', headers=headers, params=params, data=json.dumps(data))# 获取response里面的返回参数
data_dict = json.loads(response.text) # 这里根据返回格式而定,设定需要解析的json串
text = data_dict["data"]["outputs"]["text"] # 根据key获取字典里面的值# 输出返回值
print(response.text)
最后返回的response对象是一个requests.Response对象,它包含了服务器返回的所有信息。虽然它是一个Python对象,但是并不是一个简单的数据结构,而是封装了多种属性和方法的复杂对象。可以通过访问它的属性和调用它的方法来获取和处理响应内容。
-
response.status_code
:返回HTTP状态码,例如200表示成功,404表示未找到等。 -
response.headers
:返回一个字典,包含响应头信息。 -
response.cookies
:返回一个RequestsCookieJar
对象,包含响应中的cookies。 -
response.url
:返回请求的URL,包括查询字符串。 -
response.encoding
:返回响应内容的编码。 -
response.text
:返回响应内容的字符串形式,自动根据响应的编码进行解码。 -
response.content
:返回响应内容的字节形式,适用于二进制数据,如图片、文件等。 -
response.json()
:将响应内容解析为JSON对象,前提是响应内容是JSON格式。
这里简单了解下就好,使用debug模式可以直接看到具体返回情况。
2. JSON数据处理
使用JSON函数需要导入json库:import json
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
1) json.dumps转为json串
json.dumps用于将Python对象编码成JSON字符串
语法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
实例:
以下实例将数组编码为JSON格式数据:
#!/usr/bin/python
import jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]data2 = json.dumps(data)
print(data2)
以上代码执行结果为:
[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]
使用参数让JSON数据格式化输出:
#!/usr/bin/python
import jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]data2 = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data2)
以上代码执行结果为:
{"a": "Runoob","b": 7
}
python原始类型向 json 类型的转化对照表
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
2) json.loads转为字典
json.loads用于解码JSON数据。该函数返回Python字段的数据类型。
语法:
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
实例:
以下实例展示了Python 如何解码 JSON 对象:
#!/usr/bin/python
import jsonjsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = json.loads(jsonData)
print(text)
以上代码执行结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
json类型转换到python的类型对照表
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
三、Python文件处理
1. 文件目录:os模块
我们都知道,os中文是操作系统的意思,顾名思义,Python 的 os 模块提供了各种操作系统的接口,这些接口主要是用来操作文件和目录。
Python中所有依赖于操作系统的内置模块,对于不同系统提供了相同接口,大大提升其可移植性。
查看路径,代码示例:
import os# 1. 查看路径
# 查看当前路径
print(os.getcwd())# 返回指定目录下包含的文件和目录名列表。
print(os.listdir('E:/'))# 返回路径 path 的绝对路径。
print(os.path.abspath('.'))# 将路径 path 拆分为目录和文件两部分,返回结果为元组类型。
print(os.path.split('E:/tmp.txt'))# 将一个或多个 path(文件或目录) 进行拼接。
print(os.path.join('E:/', 'tmp.txt'))# 2. 查看 path 时间相关参数(path可以是文件、可以是路径)
# 返回 path 在系统中的创建时间。
print(datetime.datetime.utcfromtimestamp(os.path.getctime('E:/tmp.txt')))# 返回 path 的最后修改时间。
print(datetime.datetime.utcfromtimestamp(os.path.getmtime('E:/tmp.txt')))# 返回 path 的最后访问时间。
print(datetime.datetime.utcfromtimestamp(os.path.getatime('E:/tmp.txt')))# 3. 判断 path 存在性、确认文件大小
# 判断是否存在
print(os.path.exists('E:/tmp.txt'))# 判断是否为目录
print(os.path.isdir('E:/'))# 判断是否为文件
print(os.path.isfile('E:/tmp.txt'))# 返回 path 的大小,以字节为单位,若 path 是目录则返回 0。
print(os.path.getsize('E:/tmp.txt'))
print(os.path.getsize('E:/work'))# 4. 创建、更改功能
# 创建一个目录
os.mkdir('E:/test')# 创建多级目录
os.makedirs('E:/test1/test2')# 将当前工作目录更改为 path。
print(os.getcwd())
os.chdir('/test')
print(os.getcwd())# 5. 调用shell脚本
print(os.system('ping www.baidu.com'))
2. 读取与写入:open函数
open 函数是Python内置的函数,对文本文件和二进制文件采用同样的操作步骤,和把大象放冰箱里一样分三步:打开-操作-关闭。
在Python中,使用 open() 函数来打开文件。这个函数需要两个参数:文件名和打开模式。文件名可以是相对路径或绝对路径,打开模式决定了文件的打开方式,如读取、写入等。
常见的打开模式mode:
- 'r':读取模式,默认值。如果文件不存在,会抛出
FileNotFoundError
。 - 'w':覆盖写入模式。如果文件已经存在,会被覆盖。
- 'a':追加写入模式。如果文件已存在,写入的数据会被追加到文件末尾。
读取文件代码:
# 1. 读取文件
# 逐行读取文件的内容
# for循环配合文件对象迭代器
with open('example.txt', 'r') as file_object:for line in file_object:print(line.strip()) # 使用strip()去除行尾的换行符# 读取全部内容
# 使用read方法可以一次性读取文件的全部内容,并将其作为一个字符串返回
with open('example.txt', 'r') as file_object:content = file_object.read()print(content)# 按行读取到列表
# 使用readlines方法可以读取文件的全部行,并将其作为一个列表返回
with open('example.txt', 'r') as file_object:lines = file_object.readlines()for line in lines:print(line.strip())
写入文件:
# 2. 写入文件
# 覆盖写入:'w'模式打开文件,然后使用write()方法写入内容。
with open('output.txt', 'w') as file_object:file_object.write('Hello, world!\n')file_object.write('This is a test.\n')# 追加写入:'a'模式打开文件,然后使用write()方法写入内容。
with open('output.txt', 'a') as file_object:file_object.write('This is appended text.\n')
使用with语句可以自动关闭文件,但在不使用with语句的情况下,需要手动的关闭文件,以释放系统资源。可以使用close方法关闭文件。
实际开发中,推荐实用 with 语句来处理文件,因为它可以自动管理文件的打开和关闭,使代码更加简洁和安全。
注意,上面只给出了 'w' 和 'r' 两种模式,还有一些其他打开模式可供选择,例如:
-
'x'
:独占创建模式。如果文件已存在,会抛出FileExistsError
;如果文件不存在,会创建一个新文件。 -
't'
:文本模式,默认值。以文本形式处理文件,读取时会自动将内容解码为字符串,写入时会自动将字符串编码为字节。 -
'b'
:二进制模式。以二进制形式处理文件,读取和写入的内容都是字节序列。 -
'+'
:更新模式。用于读写文件,可以和r
、w
、a
等模式组合使用。
3. 处理Excel:openpyxl库
openpyxl
是一个Python库,用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。它提供了丰富的功能,可以创建、修改和查询Excel文件中的数据,支持复杂的Excel操作,如处理公式、图表和样式等。
一个Excel电子文档中可以包含多个表,每个表里面有行、列、单元格
用户正在查看的当前表(或者关闭Excel前最后查看到表)称为活动表
使用 openpyxl 库操作Excel表,主要包括读取某个单元格、按照范围读取、按照行或列读取等。代码如下:
import openpyxl# 加载工作簿
workbook = openpyxl.load_workbook('example.xlsx')
# 获取工作表
sheet = workbook['Sheet1']# 1. 读取单元格A1的值
cell_value = sheet['A1'].value
print(cell_value) # 输出: 单元格A1的值# 2. 通过行和列索引读取数据
cell_value = sheet.cell(row=2, column=3).value
print(cell_value) # 输出: 单元格C2的值# 3. 读取A1:C3区域的值
cells = sheet['A1:C3']
for row in cells:for cell in row:print(cell.value, end=" ")print()# 4. 按行获取值
for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):for cell in row:print(cell.value, end=" ")print()# 5. 按列获取值
for col in sheet.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3):for cell in col:print(cell.value, end=" ")print()
持续加载 ing ~
相关文章:
Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉 Python像一个二三十岁的年轻人,自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。 目录 一、类与常…...
# [Unity] 【游戏开发】获取物体和组件的脚本方法
在Unity开发中,获取游戏物体(GameObject)及其组件(Component)是脚本编程的核心技能。本文将详细介绍如何在脚本中访问游戏物体及其组件,深入讲解常用的获取方法及优化策略,以帮助开发者高效编写Unity脚本。 1. 理解游戏物体与组件的关系 游戏物体(GameObject):Unity场…...
10 为什么系统需要引入分布式、微服务架构
java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...
大数据系列之:上传图片到cos、cos
大数据系列之:上传图片到cos、cos 安装python cos sdk上传图片到cos高级上传接口分页列举桶内对象cos桶之间复制cos桶之间复制图片数据 安装python cos sdk pip install -U cos-python-sdk-v5上传图片到cos # -*- codingutf-8 from qcloud_cos import CosConfig fr…...

wsl 使用 docker
直接在 wsl 安装 docker , 有可能会失败,可以通过在 windows 安装 Docker Desktop,然后连接 wsl 进行解决 注意: 1. 需要先安装 wsl 2. 使用时要先启动 docker Desktop, 才能在 wsl 中使用 下载: Docker: Accelerated Containe…...

归并延拓:LeetCode归并排序逆序对问题
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...

51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
Springboot 注解缓存使用教程
Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...
Python爬虫:从入门到实践
Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在当今数字化信息爆炸的时代,数据已成为企业和个人发展的重要资产。Python爬虫作为一种高效获取网络数据的工具,正逐渐被广大开发者所熟知和应用。无论是市场调研、学术研究,还是…...
删除字符串中的所有相邻重复项(力扣1047)
这题也是属于栈的经典应用。为什么这样说呢?因为也是让我们删除相邻项。注意这里相邻项的理解,并不仅仅是说最开始的字符串相邻的项。在我们删除了某些相邻项后,会改变字符串,导致原本不相邻的字符变成相邻的,这同样属…...
MYSQL对数据的增删改查
DML 语句 对数据 进行 增、删、改 操作 插入 命令-- 插入值的个数 必须和 字段定义的个数相同 且 顺序 一致 insert into <tableName> values (val ...) ; /* 不推荐使用 */insert into <tableName>(col1 , col2 , ...) values(val1, val2 , ...) ;-- 批量插…...
前端——Html+CSS
目录 CSS引入方式 颜色表达方式 CSS选择器 去掉超链接的下划线 路径表示 行高和首行缩进 常见标签 布局标签 flex布局 表单标签 表单项标签 改变鼠标指针的样式 表格标签 div{ box-sizing: border-box; } CSS引入方式 具体有3种引入方式,语法如下表格所…...

Linux(DISK:raid5、LVM逻辑卷)
赛题拓扑: 题目: DISK 添加4块大小均为10G的虚拟磁盘,配置raid-5磁盘。创建LVM命名为/dev/vg01/lv01,大小为20G,格式化为ext4,挂在到本地目录/webdata,在分区内建立测试空文件disk.txt。[root@storagesrv ~]# yum install mdadm -y [root@storagesrv ~]# mdadm -C -n …...

N个utils(sql)
sql,操作数据库的语言,也可以叫做数据库软件的指令集吧。名字而已,无所谓啦。 本质上,sql并不是java语言内的范畴。但却是企业级开发的范畴。并且我整个文章的一篇逻辑的本质,层的概念,其中一个大的层级就…...

以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标 使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…...

Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普,也可以说是一个各种模型对比的案例,但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文,其中一些常见的模式及它们存在的问题以及效果&#x…...

vue+高德API搭建前端Echarts图表页面
利用vue搭建Echarts图表页面,在搭建Echarts图表中,如果搭建地理地形图需要准备一些额外的文件,地理json文件和js文件,js文件目前在网上只能找省一级的,json文件有对应的省市县,js文件和json文件对应的也是不…...

提示词工程:解锁AI潜能的关键技术
什么是提示词工程? 提示词工程(Prompt Engineering)是一门新兴的技术领域,专注于如何设计和优化与生成式人工智能的交互提示,以获得最佳的输出结果。它是连接人类意图和AI能力的桥梁,通过精心设计的文本输入来引导AI模型产生准确、相关且有价值的输出。 核心概念 提示(…...

Python制作简易PDF查看工具PDFViewerV1.0
PDFViewer PDF浏览工具,Python自制PDF查看工具,可实现基本翻页浏览功能,其它功能在进一步开发完善当中,如果有想一起开发的朋友,可以留言。本软件完全免费,自由使用。 软件界面简洁,有菜单栏、…...

嵌入式硬件篇---基本组合逻辑电路
文章目录 前言基本逻辑门电路1.与门(AND Gate)2.或门(OR Gate)3.非门(NOT Gate)4.与非门(NAND Gate)5.或非门(NOR Gate)6.异或门(XOR Gate&#x…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...