Python——入門

目錄

變量

變量類型

動態類型

注釋????????

輸出輸入

運算符

算術運算符

關系運算符

邏輯運算符

賦值運算符

條件語句

循環語句

函數

函數作用域

函數嵌套調用

函數默認參數

關鍵字參數

列表

切片

列表遍歷

新增元素

查找元素

刪除元素

列表拼接

元組

字典

增刪改查

遍歷

合法的key

文件操作

打開和關閉

讀寫操作

文件管理器

查找文件

第三方庫

二維碼

execl

程序猿鼓勵師


變量

? ? ? ? 與C++不同的是,python定義變量時不用自己寫變量類型,編譯器根據=后面的值推導后賦予變量類型,且語句結束不用加分號;

a = 0

變量類型

? ? ? ? 整數:int,由于C++的int類型有范圍,值超過限定范圍會溢出,所有需要?long long 長整形來控制值;而python整數類型只有int:每次值變大都會開辟新空間儲存(自動擴容)

a = 10

? ? ? ? 浮點數:float,C++中有單精度浮點數float 與雙精度浮點數double,在python中float就代表雙精度浮點數,并沒有double

a = 3.14

? ? ? ? 字符串:str,使用單引號‘’或者雙引號“”都可以;在字符串中如果里面字符串有包含“”,外面就用‘’進行區分;如果兩種都用就用三引號‘’‘’‘’進行區分

a = ' My name is "zzj" '
b = ''' My 'name' is "zzj" '''

? ? ? ? 可以使用 + 將字符串進行拼接,使用 len()函數計算字符串長度

c = a + b
print(len(c))

? ? ? ? 布爾類型:bool,使用True或者False表示真假,首字母大寫

動態類型

? ? ? ? 一個變量被定義出來有了類型后,后序可以根據賦值數據把它變成其它類型

? ? ? ? 有了它就能很靈活的根據需要轉換變量類型進行使用;但這也帶來問題:讀者在閱讀代碼時就會很疑惑:到底這行的變量類型是什么呢?所以實際開發還是要慎用

注釋????????

? ? ? ? python的注釋有兩種:#開頭的注釋和開頭結尾使用三引號(單雙都可以)的注釋;注釋內容就不要精簡,也不要太長:把代碼的功能或者注意點說清楚即可;關于注釋語言一般都是中文,實際安裝公司規定來

#這是注釋"""
這是文檔字符串,也是注釋
"""

輸出輸入

? ? ? ? 輸出使用函數print 打印如何類型的變量;但如果是混合:字符串與變量的打印,就不能進行拼接,需要使用在前加f進行former-string

a = 10
print(f"a={a}")

? ? ? ? 輸入使用函數input 進行獲取用戶輸入的數據

a = input('輸入數據: ')
print(a)
print(type(a))

? ? ? ? 雖然輸入的是int 類型,但用變量進行獲取后類型變成str;如果對數據用要求用什么類型就要進行轉化

a = int(a)

運算符

算術運算符

? ? ? ? 在python中有 + - * / % ** // 七種算術運算符,**算的是幾次方;// 除完后進行向下取整;運算順序:先** //,再 * /,最后+ -,需要改變順序就加括號()

print(3 // ( 2 * 10))

? ? ? ? ?如果使用 / 運算結果類型是浮點數float,結果是整數也是一樣;使用 / 不能除0操作,否則會拋異常

print(2 / 2)
print(2 / 0)
print("result finish")

關系運算符

? ? ? ? 關系運算符有:<? =? >? <=? >=? != 五種關系運算符;用來進行值之間,變量之間的比較;為真返回True,假返回為False;如果是字符比較則是比較它們的字典序,越靠后字典序越小;如果是字符串str,就從第一個開始比較,第一個比較不出來就往后找...使用== 則是比較字符串之間是否相等;而在C語言中字符串比較需要用到strcmp函數來實現,它的==比較的是字符串的首元素地址是否相等,不符合預期

a = 5
b = 10
print(a < b)
print("abc" == "abc")

? ? ? ? 注意:如果是浮點數進行運算后進行比較,得出來的結果可能不符合預期

a = 0.1
b = 0.2
print(a + b == 0.3)

? ? ? ? 原因是因為浮點數在儲存規則不同,導致計算結果有誤差

a = 0.1
b = 0.2
print(a + b)

? ? ? ? 我們要這樣來使用,在合理的誤差我們忽略不計

a = 0.1
b = 0.2
c = 0.3
print(-0.000001 < (a + b - 0.3) < 0.000001)

邏輯運算符

? ? ? ? 共有三種:and表示邏輯與操作(一假則假),or表示邏輯或操作(一真則真),not表示邏輯取反操作(真為假,假為真);如果使用and左邊表達式為假后面的表達式就不執行了,這稱為短路求值

a = 10
b = 5
print(a < b and a / 0)

? ? ? ? 第一個表達式換成結果為真則就出現除0錯誤

print(a > b and a / 0)

賦值運算符

? ? ? ? 賦值運算符=,左邊為變量,右邊為常量,把常量的值賦給變量;而==是判斷左右表達式是否相等,在判斷時不要寫錯;除此之外,還有鏈式賦值:同一行進行多個變量的賦值

a = b = 10
print(f"a={a} b={b}")

? ? ? ? 還有逗號賦值,能夠用來解決兩個變量的交換

a = 10
b = 20
a, b = b, a
print(f"a={a} b={b}")

?

? ? ? ? 除此之外,還有+= -= *= /= %=等復合賦值運算符,但不支持前置后置++(--);前置++可以運行但變量沒有變化

a = 10
a += 1
print(a)
++a 
print(a)

????????后置++編譯就報錯

a = 10
a++
print(a)

條件語句

? ? ? ? if語句格式

if 表達式:語句

? ? ? ? 案例?

#牛馬判斷器
val = input("輸入一個值:")
if(val == '1'):print("你是牛")
elif(val == '2'):print("你是馬")
else:print("你是牛馬")

? ? ? ? 注意這里的val獲取到的是一個字符串str,不能使用1進行比較而是字符‘1’

? ? ? ? 判斷語句還可以繼續多層嵌套

val1 = input("輸入一個值:")
val2 = input("再次輸入一個值:")
if(val1 == '1'):if(val2 == '2'):print("馬")print("牛")
print("牛馬")

? ? ? ? 使用判斷語句判斷輸入的數是奇數還是偶數時,要進行類型轉化不然str類型無法進行計算

val = int(input("輸入一個值:"))
if(val % 2 == '0'):print("偶數")
else:print("奇數")

? ? ? ? 在python這里負數模2是1或者0,而在C++中負數%2是-1或0;另外如果用戶輸入的是字符串在轉化時python直接報錯

? ? ? ? 如果在條件中沒有什么語句要執行的話,不能空著,要使用pass表面此處是空語句

val = 1
if val != 1:pass
elseprint("Yes")

循環語句

? ? ? ? ? 循環語句之一while語法

while 表達式:語句

? ? ? ? 案例?

#1到100之和
sums = 0
i = 1
while i <= 100:sums = sums + ii = i + 1
print(f"sum = {sums}")

? ? ? ? 循環語句for語法

for 變量 in 可迭代對象語句

? ? ? ? 案例

#1到100之和
sums = 0
for i in range(1,101):sums = sums + i
print(f"sum={sums}")

? ? ? ? range是一個函數,傳入的兩個參數是一個[1,101?) 區間;它還要第三個參數表示變量i執行的步數,不傳默認是1

#打印10到1
for a in range(5,0,-1):print(a)

? ? ? ? 使用continue關鍵字表面此次循環跳過;break關鍵字則是跳出循環

函數

? ? ? ? 如果需要頻繁使用到相似的代碼的功能但需要根據需求改變值的話就可以使用函數根據需要進行調用

def 函數名(參數列表):語句

? ? ? ? 案例

def cal_sum(begin, end):sums = 0for i in range(begin, end+1):sums += iprint(f"sums = {sums}")# 1到100之和
cal_sum(1, 100)
# 1到1000之和
cal_sum(1, 1000)

? ? ? ? 函數定義要調用函數之前,因為代碼是從上往下執行,在調用函數之后定義導致調用時找不到后編譯器報錯,所以要:先定義,再調用

? ? ? ? 有些代碼下面有黃線,但是程序正常運行;這可能是要你遵守它所要的規范,不如函數名CalSum這樣命名不符合它所要的規范,你要使用cal_sum來命名而不是以大寫字母分隔來命名(但這樣無傷大雅,只是盡量按照它的規范來,因為可以有的黃線可能影響代碼的正確性,要能夠識別的出就需要把那些因為錯誤命名規范導致的黃線給去掉(修改))

? ? ? ? 在python中函數列表有幾個就要傳入幾個,至于類型不規定:因為有動態類型(這也就在一些場景下不同收到類型的約束從而去學習復雜的語法比如C++的模板)

? ? ? ? 上面函數沒有返回值,在實際設計函數更推薦設置返回值:因為設置了返回值可以讓使用者與函數之間進行解耦合(一方改變另一方不受影響)

def sum_val(a, b):return a + bresult = sum_val(2, 6)
print(result)
result = sum_val(2.0, 3.0)
print(result)

? ? ? ? 除了返回一個值,在python中還可以一次返回多個值

def get_point():x = 10y = 20return x, yx, y = get_point()
print(x, y)

? ? ? ? 如果只需要返回多個值的中一個,用_把不需要的值進行站位

_, y = get_point()

函數作用域

定義x,y變量進行接收,與函數內容定義的x,y是否是一樣的呢?

? ? ? ? 不一樣,因為在函數有作用域的限制,外面的人實際上是不知道函數內容有什么變量,定義的變量名字相同時各自之間是不會受影響的

a = 10def fun():a = 20print(a)fun()
print(a)

? ? ? ? 如果里面想要讓外面的a進行修改,可以使用關鍵字global聲明后進行修改

a = 10def fun():global aa = 20print(a)fun()
print(a)

? ? ? ? 而像if,else,while,for雖然也與函數一樣形成代碼塊(里面語句需要縮進),但它們里面定義的變量再外部可以訪問,也就是說沒有作用域限制

if True:a = 10
print(a)

函數嵌套調用

? ? ? ? 函數的返回值可以作為下一個函數的參數進行調用,這樣就不用再創建變量保存返回值;但嵌套的多了影響可讀性,嵌套層數適量即可

? ? ? ? 打印兩者相加之和的結果

def sum_val(a, b):return a + bprint(sum_val(10, 20))

?

函數默認參數

? ? ? ? 與C++一樣:pyhton也支持函數參數給上默認參數:函數參數沒如果有傳入就使用默認的,有傳參數就使用傳參的;默認參數只能從右向左設置,不能從左邊或者中間設置

def sum_val(a, b, debug=False, debug1=True):if debug and debug1:print(f"a={a} b={b}")return a + bprint(sum_val(10, 20))

關鍵字參數

? ? ? ? 默認函數參數列表與調用函數傳參的順序相同;但也可以不順序傳,使用關鍵字參數指定傳

def test(x, y):print(f"x={x} y={y}")test(y=10, x=20)

列表

? ? ? ? 列表與元組其實是C/C++的數組,但它們有些差別;列表與元組具有相同的功能,唯一不同的是列表后面還要還可以加變量,而元組則在創建時就時固定下來的,如要更改就需要創建新的元組

? ? ? ? 表示列表的方法有兩種

a = []
print(type(a))
b = list()
print(type(b))

? ? ? ? 保存在列表中的變量,類型可以不同

a = [1, '1', 1.0]
print(a)

? ? ? ? 訪問列表的變量,下標從0開始;也可以通過下標修改變量

a = [1, '1', 1.0]
print(a[2])
a[2] = 2.0
print(a[2])

? ? ? ? 除了len()用來計算字符串長度,也可以用來計算列表長度

a = [1, '1', 1.0]
print(len(a))

? ? ? ? 所以列表的使用下標范圍 < len() ;因為python允許下標為負數,比如-1表示倒數第一個位置,-2表示倒數第二個位置....

print(a[-1])

print(a[3])

切片

? ? ? ? 列表可以通過切片操作獲取子列表

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[1:5])

? ? ? ? 取子列表的區間是左閉右開;切片操作只是取出列表中一部分,不涉及拷貝,因此列表長度較大時使用切片操作還是很高效

? ? ? ? 還可以省略下標進行切片

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[:5])
print(a[1:])
print(a[:])

? ? ? ? 使用切片的第三個參數指定步長(可以是負數),不傳默認為1

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[1:5])
print(a[1:5:2])
print(a[::-1])

列表遍歷

? ? ? ? 對列表每個值進行遍歷,可以使用for循環或者while循環進行操作(以for循環為例)

a = [1, 2, 3]
for i in a:print(i)

? ? ? ? 這種遍歷時修改變量不影響內部變量,如果要進行修改列表的變量就要用遍歷下標的方式

a = [1, 2, 3]
for i in range(0, len(a)):a[i] += 10
print(a)

新增元素

? ? ? ? 可以使用append()函數或者insert()函數來新增變量

a = [1, 2, 3]
a.append(4)
a.insert(100, 5)
print(a)

? ? ? ? insert()需要傳插入的下標位置,如果超過列表長度就默認插入在最后一個位置

查找元素

? ? ? ? 使用 in 來判斷是否存在列表中

a = [1, 2, 3]
print(1 in a)
print(5 in a)

? ? ? ? 使用 inodex 返回值所在的下標

a = [1, 2, 3]
print(a.index(1))

????????如果不存在就拋異常

print(a.index(10))

刪除元素

? ? ? ? 使用pop刪除默認刪除最后一個變量

a = [1, 2, 3]
a.pop()
print(a)

? ? ? ? 也可以指定下標刪除(不存在拋異常)

a = [1, 2, 3]
a.pop(1)
print(a)

? ? ? ? 也可以使用remove()傳入指定的變量進行刪除(不存在拋異常)

a = [1, 2, 3]
a.remove(1)
print(a)

列表拼接

? ? ? ? 使用extend()函數進行列表之間的拼接

a = [1, 2, 3]
b = [5, 6, 7]
a.extend(b)
print(a)

? ? ? ? 也可以使用字符串拼接時的方法 + 進行拼接

a = [1, 2, 3]
b = [5, 6, 7]
a += b
print(a)

?

? ? ? ? 但這種原理是要先創建出一個大的臨時列表來保存 a 和 b的值,再把它拷貝給 a,最后臨時列表進行銷毀;而 extend()是直接把b列表拼接在a 的后面,這種效率更好

元組

? ? ? ? 元組與列表上定義不同:列表用的是【】而元組用的是()且元組定義后不可被修改;使用上如果涉及修改元組(如新增,修改,刪除遍歷)在元組這里行不通,其它的可讀操作如遍歷,切片,查找元素都與列表是一樣的

a = (1, 2, 3)
print(a)
print(a[0])
print(a[0:1])

? ? ? ? 函數可以返回多個變量底層就是根據元組進行返回

def get_point(x, y):return x, ya = (1, 2)
print(type(a))
print(type(get_point(5, 6)))

列表能做到元組不能做到的事,為什么還要有元組呢?

? ? ? ? 在實際協同開發時,程序猿A要開發一些功能(函數)給程序猿B使用,但程序猿B有個顧慮:如果在調用函數時把我的參數給修改導致結果是錯誤的,怎么辦?所以在這種場景下就可以傳元組,函數里面就不能進行修改啦

字典

? ? ? ? 字典中的儲存是鍵值對:第一個變量叫做key,第二個變量叫做val;使用時通過key找到val,key的變量類型有約束而val類型則無所謂

? ? ? ? 字典的定義有兩種

a = {}
b = dict()
print(type(a))
print(type(b))

? ? ? ? 打印字典建議每一個鍵值對每隔一行寫一對進行對齊,可讀性高;可以是用 in(not in)判斷key值是否存在

a = {"id": 1,"name": "John",12306: "Jonh"
}
print("id" in a)
print(1 in a)
print("classed" not in a)

? ? ? ? 使用列表訪問變量一樣使用 [key] 找對應的val(如果key不存在就拋異常)

a = {"id": 1,"name": "John",12306: "Jonh"
}
print(a["name"])

print(a["classed"])

? ? ? ? 效率上使用 in(not in) 和 []查找key 和value在字典上效率都是很快,但在列表中[]查找變量快而 in反而效率不高:因為使用in 需要遍歷列表一遍

增刪改查

? ? ? ? 增加字段的鍵值對,修改key對應的val,查詢key對應的val都可以使用【】來完成

a = {"id": 1,"name": "John",12306: "Jonh"
}a["score"] = 90
print(a["score"])
print(a[12306])
a[12306] = "Mike"
print(a[12306])

? ? ? ? 刪除字典的鍵值對使用pop()函數來進行

a.pop("id")
print(a["id"])

? ? ? ? 字典使用時效率達到常數級別的時間,不管數據是否變多還是變少,實踐用字典也是最多的

遍歷

? ? ? ? 可以使用for循環進行遍歷

a = {"id": 1,"name": "John",12306: "Jon"
}
for key in a:print(a[key])

? ? ? ? 還可以使用函數 keys() values() items() 分別獲取字典的key,val,鍵值對

a = {"id": 1,"name": "John",12306: "Jon"
}
print(a.keys())
print(a.values())
print(a.items())

合法的key

? ? ? ? 可以使用hash()函數來判斷key是否合法:hash()通過稱為可哈希,一般是不可變類型的變量如元組,整形,字符串;而hash()后報錯則稱為不可哈希,也就是不合法的key,一般是可變類型如列表,字典

print(hash(1))
print(hash("hello"))
print(hash((1, 2, 3)))

print(hash([1, 2, 3]))

文件操作

打開和關閉

? ? ? ? 打開文件時會返回一個文件對象,通過該文件對象來進行對文件進行操作;使用完成就要對文件對象進行關閉也就是釋放,因為打開一個文件時是需要效率系統資源的,使用完不關閉等到打開的文件足夠多之后程序就會崩潰(內存被文件對象占滿了)

f = open("C:/Users/29096/Desktop/test.txt", "w")
f.close()

? ? ? ? opne第第一個參數傳入文件路徑(文件儲存在系統的唯一性),第二個則是打開文件要進行什么操作:“r”:讀read操作;“w”:寫write操作;“a”:文件內存追加append操作?

? ? ? ? 持續打開后把文件對象保存在列表中看看最多創建多少個文件對象

a = []
count = 0
while True:f = open("C:/Users/29096/Desktop/test.txt", "w")a.append(f)count += 1print(f"文件對象個數:{count}")

? ? ? ? 如果不保存在a列表中則可以無限創建文件對象:因為在python有垃圾回收機制:當他判斷創建的文件對象不是使用時垃圾時就會給你進行回收(釋放);但盡量還是要手動關閉,保不齊在判斷之前就已經發生文件申請過多程序崩潰了

讀寫操作

? ? ? ? 寫操作簡單

f = open("C:/Users/29096/Desktop/test.txt", "w")
f.write("hello world")
f.close()

? ? ? ? 程序正常退出

????????到指定路徑下看看是否有test.txt文件且內容是否符合預期

? ? ? ? 如果再次往該文件寫內容且不要清空原來的內容此時打開文件時用到是‘a’操作進行寫

? ? ? ? 在文件中有以下內容

? ? ? ? 讀文件內容打印到控制臺有很多操作:按個數進行讀,但如果只是直接讀的話會報錯

f = open("C:/Users/29096/Desktop/test.txt", "r")
content = f.read(3)
print(content)

? ? ? ? 原因是讀操作嘗試以gbk編碼方式進行讀取,但文件使用的是UTF8(文件右下角)

所以在打開文件時要設置編碼方式

f = open("C:/Users/29096/Desktop/test.txt", "r", encoding="utf8")
content = f.read(2)
print(content)

? ? ? ? 要想按行為單位進行讀取可以使用

f = open("C:/Users/29096/Desktop/test.txt", "r", encoding="utf8")
for content in f:print(content)

? ? ? ? 但是這里打印出來有空行:原因是文件每一行結尾有“\n”表示換行,而print后也要換行;所以對print進行設置讓它不要換行

for content in f:print(content, end="")

? ? ? ? 既然要讀取全部內容,可以使用 readlines() 來實現

f = open("C:/Users/29096/Desktop/test.txt", "r", encoding="utf8")
content = f.readlines()
print(content)

文件管理器

? ? ? ? 在進行文件操作時用戶可能會忘記或者跳過文件關閉的代碼,如在文件操作時由于判斷條件,return 導致沒能執行到關閉文件這行代碼函數就結束了,所以python提供了文件管理器來自動釋放打開文件時創建的文件資源

with open("C:/Users/29096/Desktop/test.txt", "w") as f:f.write("hello world")

查找文件

? ? ? ? 給出的路徑與文件關鍵詞,在給出的路徑下查找是存在文件

import ospath = input("輸入文件路徑:")
name = input("輸入文件關鍵詞:")
#   路徑    當前路徑目錄名列表 當前路徑文件名列表
for dirpath,dirname,filename in os.walk(path):for file in filename:if name in file:print(f"dirpath:{dirpath} filename:{file}")

第三方庫

? ? ? ? python能夠流行大部分來源于它豐富的第三方庫,怎么使用?

? ? ? ? 各種第三方庫都能在 pypi.org網站上找到,一般使用 pip 工具以指令方式進行安裝(按照python默認自帶的)

二維碼

? ? ? ? 使用搜索引擎找到是第三方庫:qrcode;取 pypi.org網站上查使用文檔(比較權威),現在當前python環境安裝

pip install "qrcode[pil]"

? ? ? ? 使用qrcode庫生成二維碼

import qrcoderesult = qrcode.make('python生成的二維碼')
result.save("1.png")

execl

? ? ? ? 按照xlrd庫,對execl格式的文件進行讀,寫使用 xlwd庫

pip install xlrd==1.2.0

? ? ? ? 需求:統計班級100的學生平均分

import xlrdxd = xlrd.open_workbook("C:/Users/29096/Desktop/1.xlsx")
#獲取execl中名為"student_mark"的表
table = xd.sheet_by_name("student_mark")
rows = table.nrows
score = 0
count = 0
for i in range(1, rows):grade = table.cell_value(i, 1)if grade == 100:score += table.cell_value(i, 2)count += 1
print(f"班級100 平均分:{score/count}")

程序猿鼓勵師

? ? ? ? 在按下若干次鍵盤后出現設置的隨機音頻進行播放效果

? ? ? ? 按照 pyuput 和 playsound 庫

pip install pynput==1.6.8
pip install playsound==1.2.2

? ? ? ? 在當前路徑下準備好幾個mp3文件放在sound文件夾中?

import random
from threading import Thread
from pynput import keyboard
from playsound import playsoundsound_list = ["sound/1.mp3", "sound/2.mp3"]
count = 0def listen_release(key):global countcount += 1if count % 10 == 0:i = random.randint(0, len(sound_list) - 1)# 加線程才不會輸入鍵盤時卡頓t = Thread(target=playsound, args=(sound_list[i],))t.start()listen = keyboard.Listener(on_release=listen_release)
listen.start()
listen.join()

?以上便是全部內容,有問題歡迎在評論區指正,感謝觀看!

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

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

相關文章

華為榮耀部分機型從鴻蒙降回EMUI的一種方法

一、準備說明 1、這里介紹使用華為手機助手、海外代理軟件結合固件將部分華為榮耀手機鴻蒙系統降級回EMUI系 統的一種方式&#xff1b; 2、需要降級的手機需要再出廠時內置系統為EMUI&#xff0c;出廠時為鴻蒙系統的無法進行降級操作&#xff1b; 3、降級有風險&#xff0…

maven <dependencyManagement>標簽的作用

作用 dependencyManagement標簽的作用&#xff1a;在父工程pom文件中聲明依賴&#xff0c;但不引入&#xff1b;在子工程中用到聲明的依賴時&#xff0c;可以不加依賴的版本號&#xff0c;這樣可以統一管理工程中用到的依賴版本。 示例 先創建一個項目 dependencyManagement-de…

JSON格式化與結構對比

說明 功能格式化json字符串為最簡格式&#xff0c;并標識值類型&#xff1b;比對json字符串結構。第三方依賴fastjson: 用于解析json、判斷json值類型&#xff1b;springframework自帶的字符串判斷&#xff0c;可以不依賴該方法&#xff0c;改為自行實現&#xff1b;slf4j: 用于…

編程與數學 03-002 計算機網絡 03_物理層基礎

編程與數學 03-002 計算機網絡 03_物理層基礎一、物理層的作用與任務&#xff08;一&#xff09;傳輸媒體的類型&#xff08;二&#xff09;信號的傳輸方式二、數據編碼技術&#xff08;一&#xff09;數字數據的數字信號編碼&#xff08;二&#xff09;模擬數據的數字信號編碼…

c語言--文件操作

思維導圖:1. 為什么使用文件&#xff1f; 如果沒有文件&#xff0c;我們寫的程序的數據是存儲在電腦的內存中&#xff0c;如果程序退出&#xff0c;內存回收&#xff0c;數據就丟失了&#xff0c;等再次運?程序&#xff0c;是看不到上次程序的數據的&#xff0c;如果要將數據進…

SQL中的占位符、@Param注解和方法參數

代碼中出現的多個 username 和 password 代表不同層面的變量&#xff0c;具體含義如下&#xff08;按執行順序&#xff09;&#xff1a;### 1. Param("username") String username - 位置 &#xff1a;方法參數前的注解 - 作用 &#xff1a;- Param("username&q…

【SpringAI實戰】FunctionCalling實現企業級自定義智能客服

一、前言 二、實現效果 三、代碼實現 3.1 后端實現 3.2 前端實現 一、前言 Spring AI詳解&#xff1a;【Spring AI詳解】開啟Java生態的智能應用開發新時代(附不同功能的Spring AI實戰項目)-CSDN博客 二、實現效果 一個24小時在線的AI智能客服&#xff0c;可以給用戶提供培…

kotlin基礎【2】

變量類型var 和 val 的核心區別&#xff1a;關鍵字含義能否重新賦值類似概念&#xff08;Java&#xff09;varvariable&#xff08;可變變量&#xff09;可以普通變量&#xff08;無 final&#xff09;valvalue&#xff08;不可變變量&#xff09;不可以被 final 修飾的變量var…

【Spring AI】阿里云DashScope靈積模型

DashScope&#xff08;靈積模型&#xff09;是阿里云提供的大模型服務平臺&#xff0c;集成了阿里自研的 通義千問&#xff08;Qwen&#xff09;系列大語言模型&#xff08;LLM&#xff09;以及多模態模型&#xff0c;為企業與開發者提供開箱即用的 AI 能力。官網地址 https://…

Rust Web框架性能對比與實戰指南

Rust Actix Web Rust Web 框架的實用對比分析 以下是 Rust Web 框架的實用對比分析,涵蓋主要框架(如 Actix-web、Rocket、Warp、Axum 等)的常見使用場景示例,按功能分類整理: 基礎路由設置 Actix-web use actix_web::{get, App, HttpResponse, HttpServer, Responder}…

【解決vmware ubuntu不小心刪boot分區,進不去系統】

如果仍然提示 Unable to locate package testdisk&#xff0c;有可能是源中不包含該工具&#xff08;LiveCD 使用的是“最小環境”&#xff09;。 &#x1fa9b; 解決方法&#xff1a;切換到國內完整軟件源&#xff08;推薦&#xff09; 編輯 sources.list&#xff1a; sudo na…

04-netty基礎-Reactor三種模型

1 基本概念Reactor模型是一種事件驅動&#xff08;Event-Driven&#xff09;的設計模式&#xff0c;主要用于高效處理高并發、I/O密集型場景&#xff08;如網絡、服務器、分布式等&#xff09;。其核心思想就是集中管理事件&#xff0c;將I/O操作與業務邏輯解耦&#xff0c;避免…

踩坑無數!NFS服務從入門到放棄再到真香的血淚史

前言 說起NFS&#xff0c;我估計很多搞運維的兄弟都有一肚子話要說。這玩意兒吧&#xff0c;看起來簡單&#xff0c;用起來坑多&#xff0c;但是真正搞明白了又覺得挺香的。 前幾天有個朋友問我&#xff0c;說他們公司要搭建一個文件共享系統&#xff0c;問我推薦什么方案。我…

矩陣譜分解的證明及計算示例

1. 矩陣譜分解的條件矩陣的譜分解&#xff08;也稱為特征分解&#xff09;是將一個矩陣分解為一系列由其特征向量和特征值構成的矩陣乘積的過程。進行譜分解的前提條件包括&#xff1a;<1.> 矩陣是可對角化的&#xff08;Diagonalizable&#xff09;&#xff0c;即矩陣存…

Leetcode 07 java

169. 多數元素 給定一個大小為 n 的數組 nums &#xff0c;返回其中的多數元素。 多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。 你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。 示例 1&#xff1a; 輸入&#xff1a;nums [3,2,3] 輸出&a…

CS231n-2017 Lecture6訓練神經網絡(一)筆記

本節主要講的是模型訓練時的算法設計數據預處理&#xff1a;關于數據預處理&#xff0c;我們有常用的3個符號&#xff0c;數據矩陣X&#xff0c;假設其尺寸是&#xff0c;N是數據樣本的數量&#xff0c;D是數據的維度均值減法(Mean subtraction)&#xff1a;是預處理最常用的形…

C++ 中實現 `Task::WhenAll` 和 `Task::WhenAny` 的兩種方案

&#x1f4da; C 中實現 Task::WhenAll 和 Task::WhenAny 的兩種方案 引用&#xff1a; 拈朵微笑的花 想一番人世變換 到頭來輸贏又何妨日與夜互消長 富與貴難久長 今早的容顏老於昨晚C 標準庫異步編程示例&#xff08;一&#xff09;C TAP&#xff08;基于任務的異步編程…

【學習】Codeforces Global Round 15 C. Maximize the Intersections

題意&#xff1a;給出一個圓&#xff0c;順時針排布1~2*n&#xff0c;已知連了k條邊&#xff0c;問這個圓最好情況下有多少個線的交點&#xff0c;要求線與線之間不能有重復的連接點&#xff0c;也就是每個點只能被一條線連接 思路&#xff1a; 1.考慮沒有線的時候&#xff0…

圖論:Dijkstra算法

昨天介紹了最小生成樹的兩個算法&#xff0c;最小生成樹的兩個算法旨在求解無向有權圖中的最小代價聯通圖的問題&#xff0c;那么對于有向有權圖&#xff0c;從起點到終點的最小花費代價問題就可以用 Dijkstra 算法來解決而且Dijkstra算法可以求出來從起始點開始到所有節點的最…

WPFC#超市管理系統(2)顧客管理、供應商管理、用戶管理

超市管理系統3. 顧客管理3.1 顧客新增3.2 DataGrid樣式3.3 顧客刪除3.4 顧客修改4. 供應商管理4.1 供應商管理主界面4.2 新增供應商4.3 修改供應商5. 用戶管理5.1 用戶管理主界面5.2 新增用戶5.3 修改用戶總結3. 顧客管理 在CustomerView.xaml使用命令綁定方式添加頁面加載Loa…