《人工智能導論》(python版)第2章 python基礎2.2編程基礎

? 書寫這篇博客的目的在于實踐并記錄《人工智能導論》(Pyhton版)微課視頻版這本書的內容,便于對人工智能有更深層次的理解。

參考文獻:姜春茂.人工智能導論(Python版)微課視頻版[M]. 北京:清華大學出版社,2021.

目錄

2.1 Python的安裝--省略

2.2 編程基礎

2.2.1 數據類型與變量

1.數據類型

1)數值

2)字符串

3)布爾值

4)列表

5)轉義字符

2.變量

2.2.2?字符串和編碼

1.Python的字符串

1)字符串的創建

2)字符串的截取

3)字符串的拼接

4)字符串的統計

5)字符串的切割

6)查找字符串下標

1.Python的編碼與轉換

1)ASCII

2.2.3?列表、元組及字典

1.列表

1)創建列表

2)訪問列表中的值

3)列表的切片

4)列表的相加

5)列表的擴展

6)列表的更新

7)列表的刪除

2.元組

3.字典

1)創建字典

2)訪問字典中的值

3)字典的修改


2.1 Python的安裝--省略

2.2 編程基礎

2.2.1 數據類型與變量

1.數據類型

Python一共有5種數據類型,分別是:數值、字符串、布爾值、列表和轉義字符。(該書只列舉了這5種類型,可能是因為面對初學者)

1)數值

只能存放一個值,定義之后不可更改,可以直接訪問。

Python的數值類型又分為整型(int)、長整型(long)、浮點型(float)、復數(complex)。

整型:整數,包括正整數與負整數,也可以用十六進制、十進制、八進制表示整數。

print(10)
print(oct(10))  # Octal:八進制
print(hex(10))  # Hexadecimal:十六進制

其中,八進制中的個位數表示8的0次方,也就是1;八進制中的十位數表示8的1次方也就是8。10是由1個8的1次方和2個8的0次方組成,因為其結果為0o12,其中“0o”這一前綴表示12是一個八進制的數字。

浮點型:小數,對于很大和很小的浮點數可以用科學計數法表示

例如,1.5e3是科學計數法表示1.5×10的三次方,既是1.5e3也是1500.0(浮點保留一位小數)

復數:數學中的復數,由實數和虛數兩部分組成。與數學復數不同的是:虛數部分用j表示,一般形式為x+yj,其中x是復數的實部,y是復數的虛部,x和y都是實數。

# 復數
c1 = 3 + 4j
print(c1)          # 輸出: (3+4j)
print(c1.real)     # 輸出實部: 3.0
print(c1.imag)     # 輸出虛部: 4.0# 復數運算
c2 = 1 - 2j
print(c1 + c2)     # 輸出: (4+2j)
print(c1 * c2)     # 輸出: (11-2j)

其中c1*c2的過程為:(3+4j)*(1-2j)=3*1+3*(-2j)+4j*1+4j*(-2j)=3-6j+4j-8(j*j)=8+3-2j=11-2j

備注:j*j=-1

2)字符串

一個有序的字符的集合,用于存儲和表示基本的文本信息,指的是單引號或雙引號括起來的文本部分。

s1 = 'Hello Python!'
s2 = '人工智能'
print(s1+s2)
print(s1[0])
print(s2[1])

3)布爾值

布爾值只為True或False(首字母大寫),也就是對或錯。一些公式的計算結果也是布爾值

# 布爾值
print(True)
print(False)
print(3 > 1)
print(3 > 9)

例如第34行代碼中,顯然3小于9,所以返回結果就是False。

同時,布爾值也可以使用與運算(and)、或運算(or)和非運算(not)進行運算,相當于邏輯運算。

print(True and True)
print(True and True and False)
print(False or True)
print(False or False)
print(not False)
print(not True)

其中,and表示左右兩個公式都為真時才為真。那么真 and 假(True and False)有一個為假,所以返回值為假(False);

or表示或者,也就是左右兩個公式一個為真即為真。例如,假或真(False or True)只要有一個為真,其返回值就為真(True)。

4)列表

列表是Python中內置有序、可變的序列,可以存儲大多數集合類的數據結構,支持字符、數字、字符串,甚至可以包括列表。用[ ]標識,所有元素均放在方括號內部。

通過下面的代碼演示列表的有序性和可變性。

list = ["蘋果", "香蕉", "橙子"]
print(list)
list[1] = "藍莓"
print(list)
list.append("葡萄")
print(list)
list.remove("橙子")
print(list)

5)轉義字符

轉義字符是幫助機器理解一些存在歧義內容的字符。

例如,字符串s的內容為let's go!

s = 'let's go!'

在Python中會將s = 'let's go!' 標紅和加粗的單引號看作一對,這顯然發生了歧義,因此可以用s = 'let\'s go!' 來表示,“\”表示后面的引號只是一個普通字符。

轉義字符描述轉義字符描述
\續行符\000
\\反斜杠符號\f換頁
\'單引號\v縱向制表符
\"雙引號\t橫向制表符
\a響鈴\r回車
\b退格\e轉義
\n換行

接下來舉例說明不加轉義字符和加了轉義字符的代碼結果:

顯然,不加轉義字符就會出現錯誤。

2.變量

變量是存儲在內存中的值,創建變量時會在內存中開辟一個空間。

變量不僅可以是數字,還可以是任意數據類型。

變量名必須為大小寫英文字母、數字、下劃線的組合,且不能由數字開頭。

Python中的變量賦值不需要類型聲明(這一點與c語言不一樣),在變量使用前必須賦值,賦值后變量才會被創建。使用“=”給變量賦值,Python中可以同時對多個變量賦值。

變量中的賦值:

number = 125
distance = 123.4
city = "Beijing"
print(number)
print(distance)
print(city)

多個變量賦值:

a = b = c = 1
print(a,b,c)

2.2.2?字符串和編碼

1.Python的字符串
1)字符串的創建

在2.2.1中已經簡單介紹了字符串,使用單引號(‘’)或雙引號(“”)創建字符串,字符串的創建只要為變量分配一個值即可

str1 = 'Where are you from?'
str2 = "你來自哪里?"
print(str1)
print(str2)

可以看到字符串是由引號所包裹而成的,那么如果存在多個引號,就需要特殊處理,其中錯誤例子已經在5)轉義字符中提到了。

有以下兩個解決方法,分別是使用不同引號和使用轉義字符。

使用不同引號:

str_name1 = "I'm Joy"
print(str_name1)

使用轉義字符:

PS:這里感覺教材寫錯了,教材中寫的是str3 = 'he said:" I\\'m Joy"'

str3 = 'he said:" I\'m Joy"'
print(str3)

其中"\'"表示就是一個單引號,而不是創建一個字符串的意思。

2)字符串的截取

在Python中,使用方括號來截取字符串,遵循左閉右開的原則,字符串的索引值從0開始。

例如:var = "Python!",那么var[0]就是P,var[6]就是!,var[1,3]就是yt

var1 = 'Hello World!'
var2 = "Welcome to China"
print("var1[1]:", var1[1])
print("var2[1:3]:", var2[1:3])

指定元素截取方式:

其中,str[1:]是從下標為1開始(e),一直到最后一個字符

str[1::2]是指從下標為1開始(e),每隔兩個字符(算開始字符)截取一次,一直到最后一個字符

帶負號的索引是指從右到左的索引,最右邊的字符的索引是-1,那么-6就是“C”前面的空格,-10就是“welcome”的最后一個“e”,所以從-10到-6應該是“e to”(左閉右開,不包括str[-6])

而str[::-1]則是翻轉,也就是前后置換,也就是翻轉

3)字符串的拼接

字符串有3種拼接方式,分別是:乘法重疊、加法拼接和使用join拼接

join()用于連接字符串數組,將序列中的元素以指定字符連接成新的字符串

str1 = "Hello" * 3
str2 = 'Hello' + 'World'
a = 'world'
str3 = ' '.join(a)
print(str1)
print(str2)
print(str3)

可以看到str1和str2都好理解,而str3使用了join函數,也就是讓字符串a中每兩個字符之間都用空格隔開

4)字符串的統計

在Python中,使用len()函數計算字符串的長度,空格也會被計算在內

str = "Hello World"
print(len(str))

其中,Hello有5個字符,World也有5個,算上一個空格一共就是11個

5)字符串的切割

使用split()對字符串進行分割,有多種分割方式

str = "Aspring people have become a success"
print(str.split(" "))
print(str.split("e"))
print(str.split(" ", 2))

第一行是遇到空格就分割,顯然字符串中有5個空格,因此會分割成6個字符串

第二行是遇到e就分割,字符串中一共有6個e,因此會分割成7個字符串

Aspring people have become a success

第三行則是遇到空格就分割,最大分割次數為2(前兩行沒有寫分割次數的參數,因此就是無限次分割),因此會分割成3個字符串

6)查找字符串下標

使用find()函數查找字符串的下標位置,如果找不到則返回-1

find_str = "Aspiring people have become a success"
s1 = "become a success"
print(find_str.find(s1))
print(find_str.find("people"))
print(find_str.find('e', 11))
print(find_str.find('k'))

其中,Aspiring一共有7個字符,加上空格就是8個,之后就是people,因為索引從0開始計數,所以people的起始索引位置就是9,其他問題同理

第三個print不是很好理解,這里給出find()函數的說明

str.find(sub[, start[, end]])

  • ?str?:待搜索的原字符串。
  • ?sub?:必選參數,需要查找的子串。
  • ?start?/?end?:可選參數,限定搜索范圍的起始和結束位置索引(左閉右開區間)

因此,print(find_str.find('e', 11))的意思是,從索引為11的位置開始找“e”字符,索引為11的字符是people的o,那么下一個“e”就是people的最后一個“e”,其索引為14.

1.Python的編碼與轉換

常見的編碼方式有以下5種

編碼制定時間作用所占字符數
ASCII1967年表示英語及西歐語言8/1B
GB 23121980年國家簡體中文字符集,兼容ASCII2B
GBK1995年GB 2312的擴展字符集,支持繁體字,兼容GB 23122B
Unicode1991年國際標準組織統一標準字符集2B
UTF-81992年不定長編碼1~3B

在7年計算機的求學過程中,個人認為ASCII碼的應用范圍更廣,因此只說明ASCII。

1)ASCII

ASCII的常見規則:

  1. 數字比字母小,如'9'<'A';
  2. 數字按從大到小順序遞增,如'8'<'9'
  3. 字母按從A到Z的大小順序遞增,如'B'<'H'
  4. 同一個字母的小寫字母比大寫字母大,如'e'>'E'

2.2.3?列表、元組及字典

1.列表
1)創建列表

使用[]創建列表, 用逗號分割不同數據項,列表的索引從0開始

list1 = ['KangKang', 18, 'Boy', 'Music']
list2 = [8, 9, 0, 2, 3, 1]
list3 = ['a', 1, 2, 3, 'b']
print(list1)
print(list2)
print(list3)

可以看到,數值類型的數據項不需要用引號,但是字符串需要

2)訪問列表中的值

可以把列表看成字符串,每一個數據項就相當于字符串中的一個字符。

list1 = ['KangKang', 18, 'Boy', 'Music']
print(list1[2])
print(list1[-1])

其中,-1代表從右到左的索引,因為最右邊的數據項是Music,就是-1對應著Music

當索引超出位置時,程序就會報錯,例如:

3)列表的切片

切片可以實現一次性獲取多個元素,與字符串切割類似,但是列表不需要split()函數。操作規則為:[開始位置:結束位置:間隔],其中,間隔可以不寫,默認為1.同樣遵循左閉右開的原則

list1 = ['KangKang', 18, 'Boy', 'Music']
print(list1[:2])
print(list1[-2:])
print(list1[::2])
print(list1[:])

其中第12行的“2”表示結束位置,也就是只輸出索引為0和1的數據項

第13行的“-2”表示從右到左的索引位置,-2代表的數據項就是‘Boy’,也就是取出最后兩個元素,所以應該輸出'Boy', 'Music'

第14行的“2”代表間隔,每兩個數據項輸出一個數據項

第15行什么參數都沒有寫,也就是取出全部元素

4)列表的相加

用“+”即可實現列表的相加,其中,列表的相加并沒有改變原有列表的元素,兩個列表仍為最開始定義的值

# 列表的相加
list1 = ['KangKang', 18, 'Boy', 'Music']
list2 = ["186cm", "70kg"]
list3 = list1 + list2
print(list1)
print(list2)
print(list3)

5)列表的擴展

使用extend()函數對列表進行擴展

list1 = ['KangKang', 18, 'Boy', 'Music']
list2 = ["186cm", "70kg"]
list1.extend(list2)
print(list1)
print(list2)

可以看到,extend()使list2的兩個數據項成為了list1中的第五個和第六個數據項。

但是為什么不會讓列表成為第五個數據項呢?也就是['KangKang', 18, 'Boy', 'Music', ['186cm', '70kg']]

來看看extend()函數的定義:extend()?方法用于將一個可迭代對象(如列表、元組、字符串等)中的元素逐個添加到列表的末尾。添加后,列表的長度會增加可迭代對象中元素的數量。

也就是說,會把list2中的每個數據項而非列表添加在末尾。那么,怎么將列表添加在末尾呢,那就需要append()函數。

以下是append()函數的定義:append()?方法用于在列表的末尾添加一個元素。這個元素可以是任意類型的對象,如數字、字符串、列表等。添加后,列表的長度會增加1。

也就是說,append()會把加入的內容認為是一個整體,而不是像extend()那樣將元素進行分解。接下來,將append替換extend來看一下結果吧。

顯然,append()函數直接把列表["186cm", "70kg"]加在了尾端。

6)列表的更新

如果直接修改列表中對應索引的數據項,列表中原數據項的內容就會被替換掉

list1 = ['KangKang', 18, 'Boy', 'Music']
list1[0] = "186cm"
list1[1] = "70kg"
print(list1)

如果不想替換掉原有元素,可以用append()、insert()來添加新元素

list1 = ['KangKang', 18, 'Boy', 'Music']
list1.append("186cm")
print(list1)
list1.insert(1, "70kg")
print(list1)

append()函數是將元素加在末尾,insert是將元素插入對應的索引位置

7)列表的刪除

有四種方法可以對列表進行刪除,分別是:

  • 使用pop()方法:需要刪除特定索引處的元素,并且需要在刪除后使用該元素的值時。
  • 使用del語句:需要刪除特定索引的元素,或者完全清空列表時。
  • 使用remove()方法:需要刪除列表中的特定元素名稱而非索引值。
  • 使用clear()方法清空列表,將所有元素都刪除,但是仍存在空列表

pop():

list1 = ['KangKang', 18, 'Boy', 'Music', "186cm", "70kg"]
pop_item = list1.pop(2)
print(list1)
print(pop_item)
list1.pop()
print(list1)

del():

remove():

clear():

2.元組

元組和列表類似,但是元組一旦初始化就不能修改,并且元組用小括號()表示,列表使用方括號[]表示

首先,先介紹一下列表、元組和字典的區別

  • 列表(List)?:可變類型,支持增刪改元素
  • ?元組(Tuple)?:不可變類型,創建后無法修改元素
  • ?字典(Dict)?:可變類型,可增刪改鍵值對,但鍵必須為不可變類型
tup1 = ('KangKang', 18, 'Boy', 'Music')
print(tup1)
tup2 = ("186cm", "70kg")
print(tup2)
tup3 = tup1 + tup2
print(tup3)

3.字典

字典包括兩部分,一部分是鍵(key),另一部分是值(value)。其中,鍵是唯一的屬性,如果重復了多個同樣的鍵,最后出現的鍵會替換掉前邊的,但是值是不唯一的。

1)創建字典

有兩種創建字典的方法:1.使用花括號{};2.使用dict()函數創建,字典的鍵與值使用冒號:分隔開,鍵與鍵使用逗號,分隔開。

除了上述方法初始化字典,還可以用fromkeys()對字典初始化,并用第二個參數作為字典的值

dict1 = {'a':'an', 'b':'be', 'c':'can'}
dict2 = dict()
dict3 = dict(d='defind')
dict4 = dict().fromkeys(['name1', 'name2'], 'KangKang')
print(dict1)
print(dict2)
print(dict3)
print(dict4)

2)訪問字典中的值

字典中通過鍵來尋找值,可以用[]和get()函數的方法來獲取對應的值

在這里博主發現,材料中將年齡18也加上了單引號,但是之前的學習中數值類型的字符串可以不加引號,因此這個代碼中沒有加引號

dict1 = {'Name':'KangKang', 'Age':18, 'height':"186cm", 'weight':'70kg'}
print(dict1)
print(dict1['Age'])
print(dict1.get('Name'))
print(dict1.get('gender'))

3)字典的修改

可以直接通過鍵來修改值,也可以用update在字典尾端加入鍵值

dict1 = {'Name':'KangKang', 'Age':18, 'height':"186cm", 'weight':'70kg'}
dict1['Age'] = 20
print(dict1)
dict1.update({'gender': 'male', 'jobs': 'programmer'})
print(dict1)
del dict1['height']
print(dict1)
dict1.pop('Name')
print(dict1)

字典的其他使用方法如下所示:

方法說明方法說明
cmp(dict1, dict2)比較兩個字典元素len(dict)計算字典元素個數,即鍵的總數
dict.clear()刪除字典內所有元素dict.copy()

返回一個字典的淺復制

dict.items()以列表返回可遍歷的(鍵,值)元組數組dict.keys()以列表返回一個字典所有的鍵
dict.values()以列表返回字典中的所有值popitem()隨機返回并刪除字典中的一對鍵和值
dict.has_key(key)如果鍵在字典dict中則返回True,否則返回Falsedict.setdefault(key,default=None)和get()方法類似,但如果鍵不存在于字典中,將會添加鍵并將值設為默認值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91239.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高可用部署

一.keeplivaer nginx 高可用部署 下面為你詳細介紹基于 Keepalived 和 Nginx 在兩臺機器&#xff08;192.168.137.132 和 192.168.137.61&#xff09;上實現高可用部署的完整步驟&#xff1a; 一、環境準備&#xff08;兩臺服務器均執行&#xff09;環境準備 &#xff08;1&…

java面向對象高級02——單例類(設計模式)

1.什么是設計模式&#xff1f;一個問題可以有多種解法&#xff0c;在眾多解法的最優解法、方案就是設計模式。我們關注的點&#xff1a;某一種設計模式解決的是啥問題&#xff1f;這一設計模式怎么寫&#xff1f;2.單例設計模式a.作用單例設計模式的核心作用是確保一個類只有一…

0730 數據結構重點整理

Part 1.梳理數據結構重點一.宏1.簡單宏a. #define 宏名 宏體b. #if 宏(#ifndef)c.#endif2.多語句宏a. define 宏函數名(參數1&#xff0c;參數2......)({C語句1&#xff0c;C語句2......})b. define 宏函數名(參數1&#xff0c;參數2......)do(C語句1&#xff0c;C語句2......)…

免費版酒店押金原路退回系統之【房費押金計算器】實踐——仙盟創夢IDE

代碼<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>未來之窗——費用計算器</title><s…

Windows下基于 SenseVoice模型的本地語音轉文字工具

Windows下基于 SenseVoice模型的本地語音轉文字工具 前言&#xff1a; ? 現在很流行Vibe Coding但是指揮大模型寫代碼其實也是一件非常累的事情&#xff0c;經常需要輸入大段的文字去描述問題的現象以及具體的解決方案。剛好看到有一些博主通過本地部署語音大模型實現了語音轉…

OWSM v4 語音識別學習筆記

目錄 OWSM v4 簡介 卡內基梅隆大學 這個代碼不知道干嘛的 tokenizer CTC分割算法 yodas2數據集 依賴性安裝&#xff1a; 數據集下載地址&#xff1b; 模型下載地址&#xff1a; docker安裝&#xff08;適用于多數 Linux 系統&#xff09;測試ok 推理demo OWSM v4 簡介…

機器學習線性回歸:從基礎到實踐的入門指南

目錄 一、線性回歸的基本概念 二、線性回歸的核心原理 三、線性回歸的實現步驟 1.數據準備與預處理 2.模型訓練 3.模型評估 &#xff08;四&#xff09;模型優化與應用 四、線性回歸的應用場景 五、線性回歸的進階方向 在機器學習的廣闊領域中&#xff0c;線性回歸是入…

6.Linux 系統啟動過程,破解root密碼與故障修復

Linux :系統啟動過程&#xff0c;破解root密碼與故障修復 一、標準啟動流程 開機自檢 (BIOS/UEFI POST) 硬件初始化與檢測 MBR引導 讀取硬盤主引導記錄&#xff08;512字節&#xff09; GRUB2菜單 加載 /boot/grub2/grub.cfg 顯示啟動菜單 加載Linux內核 載入Linux 內核文件 內…

特產|基于SSM+vue的南陽特產銷售平臺(源碼+數據庫+文檔)

南陽特產銷售平臺 基于SSMvue的南陽特產銷售平臺 一、前言 二、系統設計 三、系統功能設計 平臺功能模塊 管理員功能模塊 商家功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&#xff1a;??大…

線性代數常見的解題方法

一.行列式 1.利用行列式的性質進行簡化 (1)重要行列式 主對角線,副對角線(不要忘了-1的次數),拉普拉斯展開(副對角線是m*n),范德蒙 (2)行列式展開定理 每一行/列的元素乘以它對應的代數余子式 擴展:拉普拉斯展開定理,可以按照任意行和列數進行展開,行列式的值=|A|*…

Websocket實時行情接口 (2025最新使用教程)

本教程將指導您如何使用Java Websocket客戶端連接實時行情接口&#xff0c;并訂閱相關數據。 步驟1&#xff1a;配置您的項目 確保您的項目已引入以下依賴&#xff1a; jakarta.websocket-apijakarta.websocket-client-apifastjson2lombokspring-context (如果使用Spring框架) …

【JEECG】JVxeTable表格拖拽排序功能

功能說明&#xff1a; 實現JVxeTable表格拖拽排序功能 解決子表拖拽排序后&#xff0c;點擊保存數據&#xff0c;未實現拖拽排序后效果 參數配置&#xff1a; 提示&#xff1a; 1.開啟 dragSort 屬性之后即可實現上下拖拽排序。 2.使用 sortKey 屬性可以自定義排序保存的 key&…

【騰訊云】EdgeOne網站安全防護的配置方法 防范盜刷流量 附惡意IP和UA黑名單

經過上個月的前車之鑒&#xff0c;我摸索出一套針對騰訊云EdgeOne《付費版》的安全配置模板&#xff0c;僅供各位站長參考 配置方法 一、在EdgeOne控制面板頁面&#xff0c;點擊要配置的域名。 二、進入后&#xff0c;點擊安全防護-WEB防護-自定義規則&#xff0c;按圖所示添加…

白玩 一 記錄retrofit+okhttp+flow 及 kts的全局配置

先回憶下flow吧&#xff01; flow是啥 Flow 是 Kotlin 協程框架中的一個異步數據流處理組件&#xff0c;專為響應式編程設計&#xff0c;適用于需要連續或異步返回多個值的場景&#xff0c;如網絡請求、數據庫查詢、傳感器數據等 1 ?異步流&#xff08;Asynchronous Stream…

犯罪現場三維還原:科技助力刑偵變革

在刑偵領域&#xff0c;犯罪現場的準確還原對于案件偵破起著至關重要的作用。傳統的現場記錄方式&#xff0c;如拍照、繪圖等&#xff0c;雖然能獲取一定信息&#xff0c;但難以全面、直觀地呈現現場全貌&#xff0c;容易遺漏關鍵細節&#xff0c;且在后期分析和信息傳達上存在…

go-admin 構建arm鏡像

目錄 1、 go-admin Dockerfile 2、docker build go-admin 3、settings.yml 4、go-admin-ui Dockerfile 5、docker build go-admin-ui 6、go-admin.yaml 7、go-admin-ui.yaml 1、 go-admin Dockerfile # 構建階段:使用 Go 1.24 版本(支持遠程調試) FROM golang:1.24-…

深入淺出:C++ STL簡介與學習指南

目錄 前言 STL的版本演變 STL六大組件 STL的重要性 如何學習STL STL的缺陷 總結 前言 什么是STL&#xff1f; STL&#xff08;Standard Template Library&#xff0c;標準模板庫&#xff09;是C標準庫的核心組成部分&#xff0c;它不僅是一個可復用的組件庫&#xff0c;更是一…

Mysql事務原理

臟讀(Dirty Read) 某個事務已更新一份數據&#xff0c;另一個事務在此時讀取了同一份數據&#xff0c;由于某些原因&#xff0c;前一個進行了RollBack&#xff0c;則后一個事務所讀取的數據就會是不正確的。 不可重復讀(Non-repeatable read) 在一個事務的兩次查詢之中數據不一…

小紅書筆記詳情API指南

一、引言小紅書作為中國領先的社交電商平臺&#xff0c;擁有超過4.8億用戶(2025年Q2數據)&#xff0c;其開放平臺已成為品牌營銷與數據挖掘的重要渠道?1。通過筆記詳情API獲取數據&#xff0c;可以幫助商家、品牌方和數據分析人員了解用戶反饋、市場趨勢和消費需求?。這些數據…

VS+Qt中使用QCustomPlot繪制曲線標簽(附源碼)

在qt中我們常常會使用數據來繪制曲線&#xff0c;常用的的繪制方法用QCutomPlot、QChart和QPrinter。有時我們會根據需要在曲線進行二次繪制&#xff0c;包括對曲線打標簽&#xff0c;顯示某個點的值等功能。本文主要為大家介紹在QCustomPlot中使用QCPItemTracer和QCPItemText繪…