宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動態(tài)
精選推薦

Python基礎(chǔ)知識,Python大模型學(xué)習(xí)筆記

管理 管理 編輯 刪除


Python

安裝Python:


# 下載源文件
wget https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tgz

# 解壓 
tar -zxvf Python-3.12.6.tgz
cd Python-3.12.6

# 編譯
./configure --prefix=/root/training/Python-3.6.5
make
make install

# 添加環(huán)境變量
vim ~/.bashrc

Pip:https://pip.pypa.io/en/stable/installation/

1.命令行

常用的 Python 3 命令行工具和選項:

  • python3,用途:運行 Python 腳本。python3 your_script.py。
  • -m,運行庫模塊作為腳本,python3 -m http.server 8000 啟動一個簡單的 HTTP 服務(wù)器。
  • -c,執(zhí)行一段 Python 代碼,python3 -c "print('Hello, World!')"。
  • -i,交互式解釋器,執(zhí)行完命令后保持交互模式,python3 -i。
  • -v,輸出 Python 解釋器啟動時的版本和版權(quán)信息,python3 -v。
  • -V,輸出 Python 解釋器的版本,python3 -V。
  • -O,優(yōu)化模式,移除文檔字符串,python3 -O your_script.py。
  • -OO,進(jìn)一步優(yōu)化,移除文檔字符串并進(jìn)行一些優(yōu)化,python3 -OO your_script.py。
  • -B,在執(zhí)行前不寫入 __pycache__ 目錄,python3 -B your_script.py。
  • --check,檢查源文件中的語法錯誤,python3 -m py_compile your_script.py。
  • -W,控制警告消息的顯示,python3 -W all your_script.py。
  • -I,在交互模式下不導(dǎo)入 sys 和 site 模塊,python3 -I。
  • -E,在執(zhí)行前忽略環(huán)境變量,python3 -E your_script.py。
  • -x,在執(zhí)行前忽略源文件編碼聲明,python3 -x your_script.py。
  • -u,強制 Python 以非緩沖的方式運行,python3 -u your_script.py。
  • -S,在執(zhí)行前不導(dǎo)入 site.py,python3 -S your_script.py。
  • -R,在執(zhí)行前不運行 site.py 中的 site.main(),python3 -R your_script.py。
  • -E,在執(zhí)行前不設(shè)置 PYTHON* 環(huán)境變量,python3 -E your_script.py。
  • -X,啟用或禁用特定的警告,python3 -X faulthandler your_script.py。
  • --help,顯示命令行選項的幫助信息,python3 --help。

2.基礎(chǔ)知識

Python 中有一些全局常量和變量,它們是內(nèi)置的,可以在任何地方使用,而不需要導(dǎo)入任何模塊。

常量:

  • True:布爾類型中的真值。
  • False:布爾類型中的假值。
  • None:表示空值或無值的狀態(tài)。

內(nèi)置類型:

  • bool:布爾類型。
  • int:整數(shù)類型。
  • float:浮點數(shù)類型。
  • complex:復(fù)數(shù)類型。
  • str:字符串類型。
  • list:列表類型。
  • tuple:元組類型。
  • dict:字典類型。
  • set:集合類型。
  • frozenset:不可變集合類型。
  • bytes:字節(jié)串類型。
  • bytearray:可變字節(jié)串類型。
  • memoryview:內(nèi)存視圖類型。

內(nèi)置函數(shù):

  • abs():絕對值。
  • all():判斷給定的可迭代參數(shù) iterable 中的所有元素是否都為 True。
  • any():判斷給定的可迭代參數(shù) iterable 中是否至少有一個元素為 True。
  • ascii():返回對象的 ASCII 表示。
  • bin():返回整數(shù)的二進(jìn)制表示。
  • bool():將值轉(zhuǎn)換為布爾類型。
  • bytearray():返回可變的字節(jié)串。
  • bytes():返回不可變的字節(jié)串。
  • callable():判斷對象是否可調(diào)用。
  • chr():將 ASCII 碼轉(zhuǎn)為對應(yīng)的字符。
  • classmethod():創(chuàng)建一個類方法。
  • compile():編譯源代碼為可執(zhí)行的代碼或字節(jié)碼。
  • complex():返回一個復(fù)數(shù)。
  • delattr():刪除對象的屬性。
  • dict():返回一個新的字典。
  • dir():返回對象的屬性列表。
  • divmod():返回商和余數(shù)。
  • enumerate():返回枚舉對象,結(jié)合索引和元素。
  • eval():執(zhí)行字符串中的 Python 表達(dá)式。
  • exec():執(zhí)行字符串中的 Python 代碼。
  • filter():過濾序列,過濾掉不符合條件的元素。
  • float():將值轉(zhuǎn)換為浮點數(shù)。
  • format():格式化字符串。
  • frozenset():返回一個不可變集合。
  • getattr():獲取對象的屬性。
  • globals():返回當(dāng)前全局符號表的字典。
  • hasattr():判斷對象是否有指定的屬性。
  • hash():返回對象的哈希值。
  • help():返回對象的幫助文檔。
  • hex():返回整數(shù)的十六進(jìn)制表示。
  • id():返回對象的唯一標(biāo)識符。
  • input():獲取用戶輸入。
  • int():將值轉(zhuǎn)換為整數(shù)。
  • isinstance():判斷對象是否是給定類型的實例。
  • issubclass():判斷一個類是否是另一個類的子類。
  • iter():返回對象的迭代器。
  • len():返回對象的長度。
  • list():返回一個新的列表。
  • locals():返回當(dāng)前局部符號表的字典。
  • map():對序列的每個元素應(yīng)用函數(shù)。
  • max():返回最大值。
  • memoryview():返回內(nèi)存視圖。
  • min():返回最小值。
  • next():返回迭代器的下一個元素。
  • object():返回一個新對象。
  • oct():返回整數(shù)的八進(jìn)制表示。
  • open():打開文件。
  • ord():返回字符的 ASCII 碼。
  • pow():返回 x 的 y 次冪。
  • print():打印輸出。
  • property():創(chuàng)建一個屬性。
  • range():返回一個整數(shù)序列。
  • repr():返回對象的官方字符串表示。
  • reversed():反轉(zhuǎn)序列。
  • round():四舍五入。
  • set():返回一個新的集合。
  • setattr():設(shè)置對象的屬性。
  • slice():返回一個切片對象。
  • sorted():返回排序后的列表。
  • staticmethod():創(chuàng)建一個靜態(tài)方法。
  • str():將值轉(zhuǎn)換為字符串。
  • sum():返回序列的總和。
  • super():返回對象的父類。
  • tuple():返回一個新的元組。
  • type():返回對象的類型。
  • vars():返回對象的 dict 屬性。
  • zip():將多個迭代器壓縮在一起。

內(nèi)置異常:

  • BaseException:所有內(nèi)置異常的基類。
  • Exception:常規(guī)異常的基類。
  • ArithmeticError:所有算術(shù)錯誤異常的基類。
  • AssertionError:斷言錯誤。
  • AttributeError:屬性錯誤。
  • EOFError:文件結(jié)束錯誤。
  • FloatingPointError:浮點錯誤。
  • GeneratorExit:生成器退出異常。
  • ImportError:導(dǎo)入模塊失敗。
  • IndentationError:縮進(jìn)錯誤。
  • IndexError:索引錯誤。
  • KeyError:鍵錯誤。
  • KeyboardInterrupt:鍵盤中斷。
  • LookupError:查找錯誤。
  • MemoryError:內(nèi)存錯誤。
  • NameError:名稱錯誤。
  • NotImplementedError:未實現(xiàn)錯誤。
  • OSError:操作系統(tǒng)錯誤。
  • OverflowError:溢出錯誤。
  • RecursionError:遞歸錯誤。
  • ReferenceError:引用錯誤。
  • RuntimeError:運行時錯誤。
  • StopIteration:停止迭代。
  • SyntaxError:語法錯誤。
  • SystemError:系統(tǒng)錯誤。
  • SystemExit:系統(tǒng)退出。
  • TypeError:類型錯誤。
  • ValueError:值錯誤。
  • ZeroDivisionError:除零錯誤。

內(nèi)置模塊:

  • __name__:當(dāng)前模塊的名稱。
  • __file__:當(dāng)前模塊的文件路徑。
  • __builtins__:內(nèi)置函數(shù)和變量的字典。
  • 常量
  • 在Python中,雖然沒有專門的語法來聲明常量,但按照慣例,常量名稱通常使用全大寫字母來表示。在Python中,任何不可變的數(shù)據(jù)類型都可以用來作為字典(map)的鍵。由于常量通常是不變的,所以它們可以作為字典的鍵。

3.基本語法

三元運算:


# 三元運算符
max_num = num1 if num1 >= num2 else num2

base_path = (
    user_path
    / format_file_name(kwargs.get("naming", "{create}_{desc}"), aweme_data_dict)
    if kwargs.get("folderize")
    else user_path
)

條件語句:使用 if, elif, else 進(jìn)行條件判斷。


if x > 0:
    print("Positive")
elif x == 0:
    print("Zero")
else:
    print("Negative")

循環(huán):for 循環(huán)用于遍歷序列(如列表、元組、字典等),while 循環(huán)用于在滿足條件時重復(fù)執(zhí)行代碼塊。

range() 函數(shù)在 Python 中返回的是一個 range 類型的對象。range 類型是一個不可變的序列,它提供了一種高效的方式來迭代一系列數(shù)字。range() 函數(shù)有三個參數(shù):start(起始值,默認(rèn)為 0),stop(結(jié)束值,不包含此值),和 step(步長,默認(rèn)為 1)。你可以使用 step 參數(shù)來指定步長。


# for循環(huán)
for i in range(5):
    print(i)

# while循環(huán)
counter = 0
while counter < 5:
    print("counter 的值為:", counter)
    counter += 1  # 等同于 counter = counter + 1
    
    
    提示
    在 Python 中,break 語句只能用來退出最內(nèi)層的循環(huán)。與某些其他編程語言不同,Python 不支持直接使用標(biāo)簽或指定層級來跳出多層嵌套循環(huán)。

遍歷元組:


my_tuple = (1, 2, 3, 4, 5)

# 直接遍歷
for item in my_tuple:
    print(item)

# 使用 enumerate() 遍歷索引和元素
for index, item in enumerate(my_tuple):
    print(index, item)

遍歷列表:


my_list = [1, 2, 3, 4, 5]

# 直接遍歷
for item in my_list:
    print(item)

# 使用 enumerate() 遍歷索引和元素
for index, item in enumerate(my_list):
    print(index, item)

遍歷字典:


my_dict = {'a': 1, 'b': 2, 'c': 3}

# 遍歷鍵
for key in my_dict:
    print(key)

# 遍歷值
for value in my_dict.values():
    print(value)

# 遍歷鍵值對
for key, value in my_dict.items():
    print(key, value)

4.異常和錯誤處理

在 Python 中,異常處理是通過使用 try 和 except 語句來實現(xiàn)的。


try:
    result = 10 / 0
    raise ValueError("這是一個錯誤")
except ExceptionType1:
    # 處理 ExceptionType1 的代碼塊
    pass
except (ExceptionType2, ExceptionType3) as e:
    # 同時處理 ExceptionType2 和 ExceptionType3 的代碼塊
    print(e)
except ZeroDivisionError:
    print("不能除以零!")
    raise  # 重新拋出當(dāng)前捕獲的異常
except ZeroDivisionError:
    print("不能除以零!")
    raise  # 重新拋出當(dāng)前捕獲的異常
except Exception as e:
    print(f"發(fā)生了異常:{e}")
    raise  # 拋出新的異?;蛑匦聮伋霎?dāng)前捕獲的異常
else:
    print("沒有異常發(fā)生")
finally:
    print("這是 finally 塊,總是被執(zhí)行")

5.字符串操作

創(chuàng)建字符串:


s1 = 'Hello, World!'
s2 = "Hello, World!"
s3 = '''Hello,
World!'''
s4 = """Hello,
World!"""

字符串連接:


greeting = "Hello, "
name = "World"
message = greeting + name + "!"
print(message)  # 輸出:Hello, World!

字符串重復(fù):


repeated = "hello " * 3
print(repeated)  # 輸出:hello hello hello

字符串切片:


s = "Hello, World!"
print(s[0:5])  # 輸出:Hello
print(s[7:])   # 輸出:World!

字符串方法:

  • .upper():轉(zhuǎn)換為大寫。
  • .lower():轉(zhuǎn)換為小寫。
  • .capitalize():首字母大寫。
  • .title():每個單詞的首字母大寫。
  • .strip():移除字符串開頭和結(jié)尾的空白字符。
  • .split():按照指定分隔符切分字符串。
  • .join():將序列中的元素以指定的字符連接生成一個新的字符串。
  • .find() 或 .index():查找子字符串并返回索引位置。
  • .replace():替換字符串中的某些字符。
  • .len():返回字符串長度。

字符串格式化:


name = "World"
greeting = "Hello, %s!" % name
print(greeting)  # 輸出:Hello, World!

greeting = "Hello, {}!".format(name)
print(greeting)  # 輸出:Hello, World!

greeting = f"Hello, {name}!"
print(greeting)  # 輸出:Hello, World!

字符串編碼:


s = "Hello, World!"
encoded = s.encode('utf-8')  # 編碼為字節(jié)串
decoded = encoded.decode('utf-8')  # 解碼為字符串

字符串前綴:

  • f或 F:表示格式化字符串字面量(f-string),允許在字符串中直接嵌入表達(dá)式。
  • r 或 R:表示原始字符串,忽略字符串中的轉(zhuǎn)義字符。
  • b 或 B:表示字節(jié)字符串,用于處理二進(jìn)制數(shù)據(jù)。

6.模塊和包

Python 模塊是包含 Python 代碼的文件,通常是一個 .py 文件。模塊可以定義函數(shù)、類和變量,也可以包含可執(zhí)行的代碼。


# 導(dǎo)入模塊
import mymodule
mymodule.greet("Alice")

# 導(dǎo)入特定的功能
from mymodule import greet, Calculator

greet("Bob")
calculator = Calculator()

# 使用別名
import mymodule as mm
mm.greet("Charlie")

包是包含多個模塊的目錄,它必須包含一個名為 __init__.py 的文件(可以為空),該文件標(biāo)識該目錄為 Python 包。


mypackage/
│
├── __init__.py
├── module1.py
└── module2.py

引入包中的模塊:


# 包中指定的模塊
from mypackage import module1
module1.foo() 

# 這樣引入,每次使用都得指定全名
import e.e1.module_1

# 引入子包
from e.e1 import module_1 
module_1.func_1()

# 相對導(dǎo)入
from . import module_1


訪問權(quán)限
公共成員是模塊的一部分,可以被模塊外部的代碼訪問和使用。在 Python 中,任何不在變量名、函數(shù)名或類名前加前綴 _ 的成員都被認(rèn)為是公共的。

7.元組、列表、字典

元組是一個不可變的序列,一旦創(chuàng)建就不能被修改。


# 創(chuàng)建
my_tuple = (1, 2, 3)
empty_tuple = ()

# 訪問
print(my_tuple[1])  # 輸出:2

# 切片
print(my_tuple[1:3])  # 輸出:(2, 3)

# 解包
a, b, c = my_tuple

列表是一個可變的序列,可以修改、添加或刪除其中的元素。


# 創(chuàng)建
my_list = [1, 2, 3]
empty_list = []

# 訪問
print(my_list[1])  # 輸出:2

# 切片
print(my_list[1:3])  # 輸出:[2, 3]

# 添加
my_list.append(4)

# 刪除
my_list.remove(2)
last_item = my_list.pop()

字典是一個無序的鍵值對集合,鍵必須是不可變類型,如字符串或元組。


# 創(chuàng)建
my_dict = {'name': 'Alice', 'age': 25}
empty_dict = {}

# 訪問
print(my_dict['name'])  # 輸出:Alice

#刪除
del my_dict['age']
removed_item = my_dict.pop('gender')

集合(Set)是一個無序的、不包含重復(fù)元素的集合。它類似于數(shù)學(xué)中的集合概念,可以進(jìn)行數(shù)學(xué)上的集合運算,如并集、交集、差集等。集合是一個可變的數(shù)據(jù)類型,其元素是唯一的。


# 創(chuàng)建
my_set = {1, 2, 3}
my_set = set([1, 2, 3])

# 使用大括號 {} 創(chuàng)建空集合是無效的,因為空集在 Python 中用 set() 函數(shù)表示。

# 添加元素
my_set.add(4)

# 刪除元素
my_set.remove(2)
my_set.discard(5)  # 即使 5 不存在,也不會報錯

# 清空集合
my_set.clear()

# 是否存在
print(3 in my_set)  # 輸出:True

# 集合的大小
print(len(my_set))

# 交集
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)  # 或者 set1 | set2

# 差集
difference_set = set1.difference(set2)  # 或者 set1 - set2

推導(dǎo)式(Comprehension)是 Python 中的一種語法結(jié)構(gòu),它提供了一種簡潔的方式來創(chuàng)建列表、字典、集合等數(shù)據(jù)結(jié)構(gòu)。


# 列表推導(dǎo)式
[expression for item in iterable if condition]

squares = [x**2 for x in range(10)]
print(squares)  # 輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  • expression:對每個元素進(jìn)行的操作。
  • item:從 iterable 中依次取出的元素。
  • iterable:一個序列、集合或其他迭代器。
  • condition(可選):一個布爾表達(dá)式,只有滿足條件的元素才會被包括在內(nèi)。
# 字典推導(dǎo)式
{key_expression: value_expression for item in iterable if condition}

squares_dict = {x: x**2 for x in range(10)}
print(squares_dict)  # 輸出:{0: 0, 1: 1, 2: 4, 3: 9, ...}

  • key_expression:字典的鍵。
  • value_expression:字典的值。

8.函數(shù)

閉包是在一個函數(shù)內(nèi)部定義的另一個函數(shù),內(nèi)部函數(shù)引用了外部函數(shù)的變量。在外部函數(shù)返回內(nèi)部函數(shù)時,會形成一個閉包,因為內(nèi)部函數(shù)攜帶了外部函數(shù)的上下文,即使外部函數(shù)已經(jīng)執(zhí)行完畢。


def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

# 創(chuàng)建一個閉包
closure = outer_function(2)

# 使用閉包
print(closure(3))  # 輸出:5

函數(shù)內(nèi)使用外部變量:


x = 10  # 全局變量

def my_function():
    y = 5  # 局部變量
    print(x)  # 可以訪問全局變量

my_function()

在 Python 中,所有的參數(shù)傳遞都是按引用傳遞。然而,由于 Python 中的數(shù)字、字符串和元組等是不可變類型,所以當(dāng)它們作為參數(shù)傳遞給函數(shù)時,表現(xiàn)得像是按值傳遞。

  • 不可變類型(按值傳遞):如果參數(shù)是不可變類型,對參數(shù)的修改不會影響原始數(shù)據(jù)。
  • 可變類型(按引用傳遞):如果參數(shù)是可變類型(如列表、字典等),則可以在函數(shù)內(nèi)部修改它們,并且這些修改會影響到原始數(shù)據(jù)。
  • global
  • 在函數(shù)外部定義的變量默認(rèn)是全局變量,但在函數(shù)內(nèi)部定義的變量默認(rèn)是局部變量。如果你想在函數(shù)內(nèi)部修改全局變量,你需要使用 global 關(guān)鍵字來聲明。

函數(shù)參數(shù)可以通過多種方式傳遞給函數(shù)。以下是一些常見的參數(shù)傳遞方式:


# 位置參數(shù)
def func(a, b, c):
    print(a, b, c)

func(1, 2, 3)  # 輸出: 1 2 3

# 關(guān)鍵字參數(shù)
def func(a, b, c):
    print(a, b, c)

func(a=1, b=2, c=3)  # 輸出: 1 2 3
func(c=3, a=1, b=2)  # 輸出: 1 2 3

# 默認(rèn)參數(shù)
def func(a, b, c=0):
    print(a, b, c)

func(1, 2)        # 輸出: 1 2 0
func(1, 2, 3)     # 輸出: 1 2 3

# 可變參數(shù)
def func(*args):
    for arg in args:
        print(arg, end=' ')

func(1, 2, 3)  # 輸出: 1 2 3

# 關(guān)鍵字可變參數(shù)
def func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

func(a=1, b=2, c=3)  # 輸出: a: 1 b: 2 c: 3

9.面向?qū)ο?/h3>

Python 是一種支持面向?qū)ο缶幊蹋∣bject-Oriented Programming, OOP)的高級編程語言。面向?qū)ο缶幊淌且环N編程范式,它使用“對象”來設(shè)計應(yīng)用程序和程序的結(jié)構(gòu)。

類(Class):

  • 類是創(chuàng)建對象的模板或藍(lán)圖。它定義了一組屬性(變量)和方法(函數(shù))。
  • 類可以包含構(gòu)造器(__init__),這是一個特殊的方法,當(dāng)創(chuàng)建類的新實例時會自動調(diào)用。
class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model

對象(Object):

  • 對象是類的實例。創(chuàng)建類的新實例時,會創(chuàng)建一個對象。
  • 對象可以接收數(shù)據(jù)(即類的屬性)和執(zhí)行操作(即類的方法)。
my_car = Car("Toyota", "Corolla")

繼承(Inheritance):

  • 繼承是一種創(chuàng)建新類的方式,新類可以從現(xiàn)有類中繼承屬性和方法。
  • 子類(派生類)繼承父類(基類)的特性,并可以添加或覆蓋它們。
class ElectricCar(Car):
    def __init__(self, make, model, battery_size):
        super().__init__(make, model)
        self.battery_size = battery_size

封裝(Encapsulation):

  • 封裝是將數(shù)據(jù)(屬性)和代碼(方法)捆綁在一起的過程,并對對象的某些部分隱藏起來,只暴露有限的接口。
  • 在 Python 中,可以通過在屬性名前加雙下劃線(__)來實現(xiàn)屬性的私有化。
class Car:
    def __init__(self, make, model):
        self.__make = make
        self.__model = model

多態(tài)(Polymorphism):

  • 多態(tài)性是指允許不同類的對象對同一消息做出響應(yīng)的能力,即同一個接口,使用不同的實例而執(zhí)行不同操作。
  • 在 Python 中,多態(tài)可以通過方法重載和重寫來實現(xiàn)。
class Car:
    def start(self):
        print("Car is starting")

class ElectricCar(Car):
    def start(self):
        print("Electric Car is starting with no noise")

屬性(Attributes):

  • 屬性是對象的狀態(tài)信息,即對象的變量。
  • 屬性可以是公有的,也可以是私有的。

方法(Methods):

  • 方法是對象的行為,即對象可以執(zhí)行的操作。
  • 方法通常用來修改對象的狀態(tài)或執(zhí)行與對象相關(guān)的操作。

類變量和實例變量:

  • 類變量是定義在類中的變量,所有實例共享同一個類變量。
  • 實例變量是定義在方法中的變量,每個實例都有自己的實例變量。

類方法和靜態(tài)方法:

  • 類方法不接收隱式的 self 參數(shù),而是接收 cls 作為第一個參數(shù),它是屬于類的,而不是實例的。
  • 靜態(tài)方法不接收 self 或 cls 參數(shù),它們可以不依賴于對象或類直接被調(diào)用。

特殊方法:

  • __init__(self, ...): 類的構(gòu)造器,當(dāng)一個實例被創(chuàng)建時調(diào)用。
  • __del__(self): 類的析構(gòu)器,當(dāng)一個實例被銷毀時調(diào)用。
  • __call__(self, ...): 允許一個實例像函數(shù)那樣被調(diào)用。
  • __getitem__(self, key): 獲取序列的元素,如 obj[key]。
  • __setitem__(self, key, value): 設(shè)置序列的元素,如 obj[key] = value。
  • __delitem__(self, key): 刪除序列的元素,如 del obj[key]。
  • __len__(self): 返回容器中元素的數(shù)量,如 len(obj)。
  • __iter__(self): 返回對象的迭代器,用于迭代操作,如 for x in obj。
  • __next__(self): 返回迭代器的下一個元素。
  • __repr__(self): 返回對象的“官方”字符串表示,通常用于調(diào)試。
  • __str__(self): 返回對象的“非官方”字符串表示,用于打印。
  • __bytes__(self): 返回對象的字節(jié)串表示。
  • __format__(self, format_spec): 定義對象的格式化字符串表示。
  • __lt__(self, other), __le__(self, other), __eq__(self, other), __ne__(self, other), __gt__(self, other), __ge__(self, other): 定義對象的比較操作。
  • __hash__(self): 返回對象的哈希值。
  • __bool__(self): 定義布爾值測試。
  • __getattr__(self, name): 當(dāng)訪問一個不存在的屬性時調(diào)用。
  • __setattr__(self, name, value): 當(dāng)設(shè)置一個屬性的值時調(diào)用。
  • __delattr__(self, name): 當(dāng)刪除一個屬性時調(diào)用。
  • __getattribute__(self, name): 在訪問屬性之前調(diào)用,可以重寫以攔截屬性訪問。
  • __dir__(self): 返回對象的屬性目錄。
  • __enter__(self), __exit__(self, exc_type, exc_value, traceback): 用于定義上下文管理器,如 with obj。
  • __copy__(self), __deepcopy__(self, memo): 用于定義對象的淺拷貝和深拷貝行為。
  • __new__(cls, ...): 創(chuàng)建并返回類的新實例。

10.多線程

Python 多線程是指在 Python 程序中同時運行多個線程的能力。線程是操作系統(tǒng)能夠進(jìn)行運算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實際運作單位。Python 提供了 threading 模塊來支持多線程編程。

  • threading.Thread 類:用于創(chuàng)建線程??梢酝ㄟ^繼承 Thread 類并重寫其 run() 方法來定義線程任務(wù)。
    start() 方法:啟動線程。必須在 Thread 實例上調(diào)用此方法以開始線程的執(zhí)行。
  • join() 方法:阻塞調(diào)用它的線程,直到線程終止。這通常用于等待線程完成其任務(wù)。
  • is_alive() 方法:返回線程是否仍然存活(即正在運行或等待)。
  • getName() 方法:返回線程的名稱。
  • setName() 方法:設(shè)置線程的名稱。
  • current_thread() 函數(shù):返回當(dāng)前線程的 Thread 實例。
  • enumerate() 函數(shù):返回一個列表,包含當(dāng)前活動的線程。
  • active_count() 函數(shù):返回當(dāng)前活動線程的數(shù)量。
  • Lock 類:用于線程同步的鎖??梢杂糜诒Wo(hù)共享資源,避免競爭條件。
  • RLock 類:可重入鎖。它允許同一個線程多次獲得鎖。
  • Semaphore 類:信號量。用于限制對共享資源的訪問數(shù)量。
  • BoundedSemaphore 類:有界信號量。與 Semaphore 類似,但初始化時需要指定一個最大值。
  • Event 類:事件。用于線程間的通信,允許一個線程通知其他線程某個事件已經(jīng)發(fā)生。
  • Condition 類:條件變量。用于復(fù)雜的線程同步,允許一個或多個線程等待,直到被另一個線程通知。
  • Barrier 類:屏障。用于多線程同步,使得一組線程相互等待,直到到達(dá)某個共同點。
  • Timer 類:計時器。在指定的時間后執(zhí)行一個函數(shù)。
  • local 和 stack_local 類:用于創(chuàng)建線程局部數(shù)據(jù)。
  • ThreadError 異常:當(dāng)線程操作出錯時拋出的異常。
  • settrace() 函數(shù):設(shè)置一個全局的線程追蹤函數(shù)。
  • setprofile() 函數(shù):設(shè)置一個全局的線程分析函數(shù)。

常用示例:


import threading

class MyThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name

    def run(self):
        print(f"Thread {self.name} is running")

# 創(chuàng)建線程
t1 = MyThread(name="Thread-1")
t2 = MyThread(name="Thread-2")

# 啟動線程
t1.start()
t2.start()

# 等待線程結(jié)束
t1.join()
t2.join()

線程同步是確保多個線程在訪問共享資源時避免數(shù)據(jù)不一致和競態(tài)條件的重要機制。Python 提供了多種同步原語,如鎖(Lock)、事件(Event)、條件(Condition)和信號量(Semaphore)等。

鎖(Lock),鎖是最基本的同步原語,用于確保同一時間只有一個線程可以執(zhí)行某個代碼段:


# 創(chuàng)建鎖
import threading
lock = threading.Lock()

# 使用 .acquire() 方法獲取鎖。如果鎖已被其他線程獲取,則當(dāng)前線程將阻塞,直到鎖被釋放。
lock.acquire()

# 釋放鎖
lock.release()

# Lock 對象可以作為上下文管理器使用,確保在離開代碼塊時自動釋放鎖
with lock:
    # 執(zhí)行臨界區(qū)代碼
    pass

# 嘗試獲取鎖,如果鎖已經(jīng)被其他線程獲取,則立即返回 False 而不是等待。
if lock.try_acquire():
    try:
        # 執(zhí)行臨界區(qū)代碼
        pass
    finally:
        lock.release()

# .acquire(timeout=...) 方法可以設(shè)置超時時間,如果在指定的時間內(nèi)無法獲取鎖,則拋出 TimeoutError。
try:
    lock.acquire(timeout=5)
except threading.TimeoutError:
    print("Could not acquire lock within the timeout period")

Event(事件) ,事件用于線程之間的通信,一個線程可以等待事件被另一個線程設(shè)置:


import threading

event = threading.Event()

def waiter():
    event.wait()
    print("Event is set")

def setter():
    print("Waiting for 5 seconds...")
    threading.sleep(5)
    event.set()

t1 = threading.Thread(target=waiter)
t2 = threading.Thread(target=setter)

t1.start()
t2.start()

t1.join()
t2.join()

Condition,條件變量用于復(fù)雜的線程同步,允許一個或多個線程等待,直到被另一個線程通知:


import threading

c = threading.Condition()

def consumer():
    with c:
        print("Consumer is waiting for data")
        c.wait()
        print("Consumer received data")

def producer():
    with c:
        print("Producer is producing data")
        c.notify()
        print("Data produced")

t1 = threading.Thread(target=consumer)
t2 = threading.Thread(target=producer)

t1.start()
t2.start()

t1.join()
t2.join()

11.with語句

with 語句在 Python 中是一種語法結(jié)構(gòu),它用于包裹執(zhí)行代碼塊,以確保資源的正確管理,特別是在處理文件操作、線程鎖和其他需要設(shè)置和清除資源的場合。

  • 當(dāng)執(zhí)行到 with 語句時,Python 會調(diào)用上下文管理器的 __enter__ 方法,并且通常會將 __enter__ 方法的返回值賦值給 as 后面的變量。
  • 執(zhí)行 with 代碼塊內(nèi)的代碼。
  • 代碼塊執(zhí)行完成后,無論是否發(fā)生異常,都會調(diào)用上下文管理器的 __exit__ 方法。如果發(fā)生異常,__exit__ 方法的參數(shù)會接收到異常的類型、值和 traceback 對象,否則這些參數(shù)都是 None。
# 文件操作
with open('file.txt', 'r') as file:
    data = file.read()
    # 文件會在此處自動關(guān)閉

# 線程鎖
lock = threading.Lock()
with lock:
    # 執(zhí)行臨界區(qū)代碼
    pass
# 鎖會在此處自動釋放

# 上下文管理器
class ManagedResource:
    def __enter__(self):
        print("Entering context.")
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Exiting context.")
        # 可以在這里處理異常
with ManagedResource() as resource:
    # 使用資源
    pass

12. asyncio  

在 Python 3.4 版本中,asyncio 模塊被引入作為標(biāo)準(zhǔn)庫,提供了異步編程的支持。

從 Python 3.5 開始,async 和 await 關(guān)鍵字被引入,使得編寫異步代碼更加直觀和簡潔。

Python 3.7 版本進(jìn)一步優(yōu)化了 asyncio,引入了 asyncio.run() 這樣的高級方法,讓編寫和管理異步程序變得更加簡單。

事件循環(huán)(Event Loop):

  • 事件循環(huán)是 asyncio 的核心,它不斷地執(zhí)行事件和任務(wù),直到?jīng)]有更多的事件和任務(wù)為止。
  • 事件循環(huán)負(fù)責(zé)調(diào)度協(xié)程,處理 I/O 事件,執(zhí)行回調(diào)函數(shù)等。
# 在函數(shù)定義前加上 async 關(guān)鍵字定義異步函數(shù)
import asyncio

async def say_after(delay, what):
    await asyncio.sleep(delay)  # 模擬異步操作,比如網(wǎng)絡(luò)請求
    print(what)

# 使用 asyncio.run() 來運行主異步函數(shù)
asyncio.run(say_after(1, 'hello'))

# 異步的主函數(shù),它調(diào)度多個異步任務(wù)
async def main():
    await say_after(1, 'hello')
    await say_after(2, 'world')

# 并發(fā)運行多個異步任務(wù),并等待它們?nèi)客瓿?async def main():
    # 并發(fā)運行多個異步任務(wù)
    await asyncio.gather(
        say_after(1, 'hello'),
        say_after(2, 'world')
    )

asyncio.run(main())

# 創(chuàng)建任務(wù)(Task)來并發(fā)運行協(xié)程。任務(wù)是協(xié)程的執(zhí)行單元。
async def main():
    # 創(chuàng)建任務(wù)
    task1 = asyncio.create_task(say_after(1, 'hello'))
    task2 = asyncio.create_task(say_after(2, 'world'))

    # 等待任務(wù)完成
    await task1
    await task2

asyncio.run(main())

# 為異步操作設(shè)置超時,或者取消正在運行的任務(wù)。
async def main():
    try:
        # 設(shè)置超時
        await asyncio.wait_for(say_after(10, 'this takes too long'), timeout=5)
    except asyncio.TimeoutError:
        print('Timeout occurred!')

asyncio.run(main())

# 取消任務(wù)
async def main():
    task = asyncio.create_task(say_after(10, 'this will be cancelled'))
    await asyncio.sleep(2)
    task.cancel()
    try:
        await task
    except asyncio.CancelledError:
        print('Task was cancelled')

asyncio.run(main())

# 在異步函數(shù)中使用 try/except 塊來捕獲和處理異常
async def main():
    try:
        await say_after(1, 'this will raise an exception')
    except Exception as e:
        print(f'An error occurred: {e}')

asyncio.run(main())

13. json處理

Python數(shù)據(jù)轉(zhuǎn)Json:


import json

# 一個 Python 字典
data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 輸出到文件
json_str = json.dump(data, file)

# 轉(zhuǎn)換為 JSON 字符串
json_str = json.dumps(data)

Json轉(zhuǎn)字典:


import json

# 一個 JSON 字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'

# 解析為 Python 字典
data = json.loads(json_str)

14.日期與時間

datetime 模塊是 Python 標(biāo)準(zhǔn)庫中處理日期和時間的核心模塊。它提供了以下類:

  • datetime.date:表示日期(年、月、日)。
  • datetime.time:表示時間(時、分、秒、微秒)。
  • datetime.datetime:表示日期和時間。
  • datetime.timedelta:表示兩個日期或時間之間的差異。
  • datetime.tzinfo:所有時區(qū)信息類的基類。
  • datetime.timezone:用于表示固定時區(qū)偏移量的類。

常用函數(shù)和方法

  • date.today():返回當(dāng)前本地日期。
  • datetime.now():返回當(dāng)前日期和時間。
  • datetime.utcnow():返回當(dāng)前的 UTC 日期和時間。
  • datetime.combine(date, time):將日期和時間合并為一個 datetime 對象。
  • datetime.strptime(date_string, format):根據(jù)指定的格式將字符串解析為 datetime 對象。
  • datetime.strftime(format):將 datetime 對象格式化為字符串。

time 模塊提供了各種與時間相關(guān)的函數(shù),主要用于處理時間戳。

  • time.time():返回當(dāng)前時間的時間戳。
  • time.sleep(seconds):暫停執(zhí)行指定的秒數(shù)。
  • time.localtime([secs]):根據(jù)給定的時間戳返回本地時間的 struct_time 對象。
  • time.gmtime([secs]):根據(jù)給定的時間戳返回 UTC 時間的 struct_time 對象。
  • time.mktime(tuple):將 struct_time 對象轉(zhuǎn)換為時間戳。

calendar 模塊提供了生成日歷的功能和一些與日歷相關(guān)的函數(shù)。

  • calendar.month(year, month):返回一個多行字符串,顯示一個月的日歷。
  • calendar.monthcalendar(year, month):返回一個列表,包含一個月中的每一天是星期幾。
  • calendar.monthrange(year, month):返回一個月的第一天是星期幾和該月的天數(shù)。
from datetime import datetime

# 獲取當(dāng)前日期和時間
now = datetime.now()

# 格式化日期和時間
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的日期和時間:", formatted_date)

# 時間戳格式化輸出

import time
from datetime import datetime

# 獲取當(dāng)前時間的時間戳
timestamp = time.time()

# 將時間戳轉(zhuǎn)換為日期時間對象
dt_object = datetime.fromtimestamp(timestamp)
print("時間戳轉(zhuǎn)日期時間:", dt_object)

# 也可以使用 utcfromtimestamp() 來獲取 UTC 時間
dt_utc = datetime.utcfromtimestamp(timestamp)
print("UTC 時間戳轉(zhuǎn)日期時間:", dt_utc)

# 字符串轉(zhuǎn)時間戳

from datetime import datetime

# 日期時間字符串
date_string = "2024-05-29 12:30:45"

# 將字符串解析為日期時間對象
dt_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")

# 將日期時間對象轉(zhuǎn)換為時間戳
timestamp = dt_object.timestamp()
print("字符串轉(zhuǎn)時間戳:", timestamp)

15.獲取指定數(shù)據(jù)的類型


# 獲取不同類型的數(shù)據(jù)類型
number = 10
string = "Hello, World!"
list_data = [1, 2, 3]
dict_data = {'key': 'value'}
tuple_data = (1, 2, 3)
set_data = {1, 2, 3}
frozenset_data = frozenset([1, 2, 3])
bool_value = True

# 使用 type() 函數(shù)獲取類型
print(type(number))          # <class 'int'>
print(type(string))          # <class 'str'>
print(type(list_data))       # <class 'list'>
print(type(dict_data))       # <class 'dict'>
print(type(tuple_data))      # <class 'tuple'>
print(type(set_data))        # <class 'set'>
print(type(frozenset_data))  # <class 'frozenset'>
print(type(bool_value))      # <class 'bool'>

16.文件和目錄

  • os.remove(file),刪除指定文件
  • os.listdir(path): 列出指定路徑下的所有文件和目錄名。
  • os.mkdir(path): 創(chuàng)建一個新目錄。
  • os.makedirs(path): 創(chuàng)建新目錄,如果中間的目錄不存在也會一并創(chuàng)建。
  • os.rmdir(path): 刪除一個空目錄。
  • os.removedirs(path): 刪除目錄及其所有內(nèi)容。
  • os.path.exists(path): 檢查指定路徑是否存在。
  • os.path.isfile(path): 檢查指定路徑是否為文件。
  • os.path.isdir(path): 檢查指定路徑是否為目錄。
  • os.path.join(path, *paths): 將多個路徑組合成一個路徑。
  • os.path.getsize(path): 獲取文件的大小。
  • os.path.basename(path): 獲取路徑的基本名稱。
  • os.path.dirname(path): 獲取路徑的目錄名稱。
  • os.rename(src, dst): 重命名文件或目錄。

Pip使用方法

1.基礎(chǔ)命令

相關(guān)地址:https://mirrors4.tuna.tsinghua.edu.cn/help/pypi/

pip和pip3的區(qū)別

pip 和 pip3 都是 Python 的包管理工具,用于安裝和管理 Python 包。它們的主要區(qū)別在于它們默認(rèn)關(guān)聯(lián)的 Python 版本。

相關(guān)命令:


# 安裝最新的包
pip3 install package_name

# 安裝指定版本的包
pip3 install package_name==version

# 卸載包
pip3 uninstall package_name

# 安裝指定文件內(nèi)的包
pip install -r requirements.txt 

# 查看已安裝
pip3 list

# 查看指定包的安裝信息
pip3 show funasr



版本管理
https://github.com/pyenv/pyenv

2.其它包管理

PDM:https://github.com/pdm-project/pdm

PipEnv:https://pipenv.pypa.io/en/latest/

Python虛擬環(huán)境(venv)

Python虛擬環(huán)境是一個獨立的Python解釋器和庫的副本。它允許您在不影響系統(tǒng)全局Python安裝的情況下安裝和管理項目特定的包。

1.創(chuàng)建虛擬環(huán)境


# 建一個名為venv的虛擬環(huán)境
python3 -m venv venv

這將在項目目錄中創(chuàng)建一個名為venv的文件夾,其中包含您的虛擬環(huán)境。您可以將該文件夾命名為其他名稱,但通常將其命名為venv是一個很好的做法。

2.激活虛擬環(huán)境

激活虛擬環(huán)境將確保您在該環(huán)境中安裝的包和運行的Python命令是隔離的。


# 在Unix或macOS上
source venv/bin/activate

# 在Windows上
.venv/Scripts/activate

# 激活虛擬環(huán)境后,您的終端或命令提示符將顯示虛擬環(huán)境的名稱
(venv) $

3.退出虛擬環(huán)境


# 退出虛擬環(huán)境
deactivate

Flask

中文文檔:https://dormousehole.readthedocs.io/en/latest/index.html

1.request

  • request.args:一個不可變的 MultiDict 類型,包含了 URL 查詢字符串參數(shù)。例如,對于請求 ?key=value,可以通過 request.args.get('key') 來獲取值。
  • request.form:一個不可變的 MultiDict 類型,包含了表單數(shù)據(jù)(通常是 POST 請求中的數(shù)據(jù))??梢酝ㄟ^ request.form.get('key') 來獲取特定的表單字段。
  • request.json:如果請求的內(nèi)容類型是 application/json,那么 request.json 將是一個解析后的對象(通常是字典或列表),包含 JSON 數(shù)據(jù)。
  • request.headers:一個不可變的 EnvironHeaders 類型,包含了 HTTP 請求頭。例如,request.headers.get('Content-Type') 可以獲取內(nèi)容類型。
  • request.cookies:一個不可變的 MultiDict 類型,包含了 HTTP cookies。
  • request.files:一個不可變的 ImmutableMultiDict 類型,包含了上傳的文件。可以通過 request.files.get('file') 來獲取特定的文件對象。
  • request.data:包含請求體的數(shù)據(jù),通常是 POST 請求的數(shù)據(jù)。默認(rèn)情況下,它是一個字節(jié)字符串,但你可以使用 request.data.decode() 將其解碼為字符串。
  • request.method:表示請求使用的 HTTP 方法(如 GET, POST, PUT, DELETE 等)。
  • request.path:請求的路徑部分,例如 /home.
  • request.url:完整的請求 URL。
  • request.base_url:包含 URL 的基礎(chǔ)部分(包括域名和端口,如果有的話),但不包括查詢字符串。
  • request.host:請求的主機名,例如 example.com.
  • request.host_url:主機名和請求路徑的組合,例如 http://example.com/home.
  • request.script_root:與 request.path 相同,通常用于重定向。
  • request.url_root:與 request.base_url 相同,通常用于重定向。
  • request.referrer:表示引用請求的頁面 URL(即 HTTP Referer 頭部的值)。
  • request.remote_addr:發(fā)出請求的客戶端 IP 地址。
  • request.is_xhr:一個布爾值,表示請求是否由一個 Ajax 請求發(fā)出(通過檢查 X-Requested-With 請求頭)。
  • request.access_route:包含客戶端到服務(wù)器的路由列表。
  • request.scheme:請求使用的協(xié)議,通常是 http 或 https。

要使用 request 對象,你需要從 flask 模塊中導(dǎo)入它:


from flask import request

@app.route('/some-path', methods=['POST'])
def some_function():
    user_id = request.form.get('user_id')
    content_type = request.headers.get('Content-Type')
    is_ajax = request.is_xhr
    # ... 其他操作

2.response

  • response.data:設(shè)置響應(yīng)體的內(nèi)容。這是一個字符串屬性,你可以賦予它任何想要返回給客戶端的數(shù)據(jù)。
  • response.status_code:設(shè)置 HTTP 狀態(tài)碼。例如,200 表示成功,404 表示未找到。
  • response.headers:一個字典對象,用于設(shè)置響應(yīng)頭。你可以添加、修改或刪除頭部字段。
  • response.mimetype:設(shè)置響應(yīng)的內(nèi)容類型(MIME 類型)。默認(rèn)通常是 text/html,但你可以更改它,比如設(shè)置為 application/json。
  • response.location:設(shè)置 HTTP 頭中的 Location 字段,通常用于重定向。
  • response.charset:設(shè)置響應(yīng)編碼。默認(rèn)是 utf-8。
  • response.cookies:一個字典對象,用于設(shè)置客戶端的 cookies。
  • response.set_cookie(key, value, expires=None, max_age=None, domain=None, path=None, secure=None, httponly=None, samesite=None):用于設(shè)置一個 cookie。你可以指定 expires、max_age、domain、path、secure、httponly 和 samesite 等參數(shù)。
  • response.delete_cookie(key, path='/', domain=None):用于刪除一個 cookie。
  • response.autocorrect_location_header(url):自動糾正 Location 頭字段中的相對 URL。
  • response.get_data():獲取響應(yīng)體的內(nèi)容。如果內(nèi)容被編碼,它將返回編碼后的版本。
  • response.get_json():如果響應(yīng)體是 JSON 格式的,這個方法可以解析并返回一個 Python 對象。

response 對象代表了客戶端接收到的 HTTP 響應(yīng)。這個對象通常是通過 Flask 的 make_response 函數(shù)或者 jsonify 函數(shù)創(chuàng)建的。


from flask import Flask, make_response, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    # 使用 make_response 創(chuàng)建響應(yīng)對象
    response = make_response('<h1>Hello World</h1>', 200)
    response.headers['Content-Type'] = 'text/html'
    response.headers['X-Custom-Header'] = 'Custom Value'
    return response

@app.route('/json')
def json_response():
    # 使用 jsonify 創(chuàng)建 JSON 響應(yīng)
    data = {'key': 'value'}
    response = jsonify(data)
    response.status_code = 200
    response.headers['X-Custom-Header'] = 'Custom Value'
    return response

if __name__ == '__main__':
    app.run()
    

FastAPI

FastAPI:https://fastapi.tiangolo.com/zh/

1.獲取請求參數(shù)

獲取 GET 參數(shù):


from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_query_item(q: str = Query(...)):
    return {"q": q}

Form 用于從 application/x-www-form-urlencoded 或 multipart/form-data 編碼的請求體中獲取數(shù)據(jù),通常用于處理表單提交的數(shù)據(jù)。以下是 Form 支持的參數(shù):

  • default: 設(shè)置參數(shù)的默認(rèn)值。
  • min_length: 字符串的最小長度。
  • max_length: 字符串的最大長度。
  • regex: 字符串必須匹配的正則表達(dá)式。
  • required: 指定字段是否為必填項,默認(rèn)為 True。

獲取POST參數(shù):


from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/items/")
async def create_item(name: str = Form(...), price: float = Form(...)):
    return {"name": name, "price": price}

Query 用于從 URL 的查詢字符串中獲取數(shù)據(jù)。它支持以下參數(shù):

  • default: 設(shè)置參數(shù)的默認(rèn)值。
  • alias: 為參數(shù)設(shè)置一個別名,這在 URL 中使用的名稱與函數(shù)參數(shù)名稱不一致時非常有用。
  • title: 為參數(shù)設(shè)置一個標(biāo)題,這通常用于 API 文檔。
  • description: 為參數(shù)提供一個描述,這在 API 文檔中顯示,有助于說明參數(shù)的用途。
  • gt (greater than): 參數(shù)值必須大于指定的值。
  • lt (less than): 參數(shù)值必須小于指定的值。
  • ge (greater than or equal to): 參數(shù)值必須大于或等于指定的值。
  • le (less than or equal to): 參數(shù)值必須小于或等于指定的值。
  • min_length: 參數(shù)的最小長度(對于字符串)。
  • max_length: 參數(shù)的最大長度(對于字符串)。
  • regex: 參數(shù)值必須匹配指定的正則表達(dá)式。
  • example: 為參數(shù)提供一個示例值,這在 API 文檔中顯示。

獲取JSON參數(shù):


from fastapi import FastAPI

app = FastAPI()

@app.post("/items/")
async def create_item(item: dict):
    return {"item": item}
    

2.Request對象

Request 對象代表了進(jìn)入應(yīng)用的 HTTP 請求。


from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/items/")
async def read_items(request: Request):
    query_param = request.query_params("query")  # 獲取查詢參數(shù)
    headers = request.headers  # 獲取請求頭
    body = await request.json()  # 獲取 JSON 請求體
    return {"query_param": query_param, "headers": dict(headers), "body": body}

3.Response 對象

Response 對象用于構(gòu)建和返回 HTTP 響應(yīng)。


from fastapi import FastAPI, Response

app = FastAPI()

@app.get("/items/")
async def read_items(response: Response):
    content = {"item": "some item"}
    response.headers["X-Custom-Header"] = "Value"  # 設(shè)置響應(yīng)頭
    response.status_code = 200  # 設(shè)置狀態(tài)碼
    return response  # 返回 Response 對象
    

4.校驗JSON參數(shù)

在 FastAPI 中,當(dāng)你在路徑操作函數(shù)中聲明一個參數(shù),并將其類型指定為 Pydantic 模型時,F(xiàn)astAPI 會自動將請求體解析為 JSON 并進(jìn)行驗證。


from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    return {"name": item.name, "description": item.description}

卷積神經(jīng)網(wǎng)絡(luò)

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是人工智能領(lǐng)域中一種重要的深度學(xué)習(xí)模型,被廣泛應(yīng)用于圖像識別、目標(biāo)檢測、自然語言處理等領(lǐng)域。

1.大模型平臺

Python項目

收集一些很厲害的Python倉庫:

大模型:

實用庫:

Rembg

Rembg 是一個基于 Python 的背景去除工具,它使用深度學(xué)習(xí)技術(shù)來從圖像中去除背景。

Pytorch:https://pytorch.org/get-started/locally/

開源地址:https://github.com/danielgatis/rembg

詳見Github倉庫的說明:https://github.com/danielgatis/rembg

1.基礎(chǔ)知識

相關(guān)名詞介紹:

  • U2-Net是由Xuebin Qin等人開發(fā)的一種用于顯著目標(biāo)檢測(Salient Object Detection, SOD)的深度學(xué)習(xí)模型。
  • ONNXRuntime是由微軟推出,用于優(yōu)化和加速機器學(xué)習(xí)推理和訓(xùn)練,適用于ONNX模型,是一個跨平臺推理和訓(xùn)練機器學(xué)習(xí)加速器(ONNX Runtime is a cross-platform inference and training machine-learning accelerator)
  • Rembg和U2-Net之間的關(guān)系是工具與核心算法的關(guān)系,Rembg利用U2-Net作為其圖像分割的引擎。

開源地址:

2.關(guān)于訓(xùn)練模型

  • 數(shù)據(jù)收集:人工或自動化工具收集數(shù)據(jù),這可能包括從數(shù)據(jù)庫、文件、網(wǎng)絡(luò)或其他數(shù)據(jù)源獲取數(shù)據(jù)。
  • 數(shù)據(jù)清洗:人工檢查數(shù)據(jù)集,識別并處理缺失值、異常值和錯誤數(shù)據(jù)。
  • 特征選擇:人工或使用自動化算法選擇對模型預(yù)測有用的特征。
  • 數(shù)據(jù)標(biāo)注:對于監(jiān)督學(xué)習(xí),需要人工標(biāo)注數(shù)據(jù),例如在圖像識別中標(biāo)記圖像中的物體,在文本分類中為文本分配類別標(biāo)簽。
  • 數(shù)據(jù)分割:人工或使用自動化方法將數(shù)據(jù)集分割為訓(xùn)練集、驗證集和測試集。
  • 模型選擇:根據(jù)問題的性質(zhì)和數(shù)據(jù)的特點,人工選擇或設(shè)計一個合適的模型。
  • 模型配置:人工設(shè)置模型參數(shù),如神經(jīng)網(wǎng)絡(luò)的層數(shù)和節(jié)點數(shù),選擇損失函數(shù)和優(yōu)化器。
  • 訓(xùn)練過程:通常由自動化腳本執(zhí)行,但人工可能需要監(jiān)控訓(xùn)練過程,調(diào)整參數(shù)以優(yōu)化模型性能。
  • 模型評估:使用驗證集或測試集評估模型,人工分析評估結(jié)果,確定模型是否滿足要求。
  • 模型調(diào)優(yōu):根據(jù)評估結(jié)果,人工調(diào)整模型結(jié)構(gòu)或參數(shù),進(jìn)行超參數(shù)優(yōu)化。
  • 模型驗證:人工驗證模型在實際應(yīng)用中的性能,確保模型的泛化能力。
  • 模型部署:將訓(xùn)練好的模型部署到生產(chǎn)環(huán)境,可能需要人工配置和監(jiān)控。

3.問題記錄

importing onnxruntime_pybind11_state: 找不到指定的模塊

安裝VC_redist:https://aka.ms/vs/16/release/VC_redist.x64.exe

FunASR


FunASR是一個基礎(chǔ)語音識別工具包,提供多種功能,包括語音識別(ASR)、語音端點檢測(VAD)、標(biāo)點恢復(fù)、語言模型、說話人驗證、說話人分離和多人對話語音識別等。

Github:https://github.com/modelscope/FunASR/blob/main/README_zh.md#%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B

1.安裝

服務(wù)端部署文檔:https://github.com/modelscope/FunASR/blob/main/runtime/readme_cn.md


# 安裝
pip3 install torch torchvision torchaudio

# 安裝
pip3 install -U funasr

Segment Anything

Github:https://github.com/facebookresearch/segment-anything


請登錄后查看

小碼二開 最后編輯于2024-10-09 14:19:53

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
2046
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動態(tài) 精選推薦 首頁頭條 首頁動態(tài) 首頁推薦
取 消 確 定
回復(fù)
回復(fù)
問題:
問題自動獲取的帖子內(nèi)容,不準(zhǔn)確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊

切換手機號登錄

{{ bind_phone ? '綁定手機' : '手機登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服