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

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

Python基礎(chǔ)知識(shí),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 命令行工具和選項(xiàng):

  • python3,用途:運(yùn)行 Python 腳本。python3 your_script.py。
  • -m,運(yùn)行庫(kù)模塊作為腳本,python3 -m http.server 8000 啟動(dòng)一個(gè)簡(jiǎn)單的 HTTP 服務(wù)器。
  • -c,執(zhí)行一段 Python 代碼,python3 -c "print('Hello, World!')"。
  • -i,交互式解釋器,執(zhí)行完命令后保持交互模式,python3 -i。
  • -v,輸出 Python 解釋器啟動(dòng)時(shí)的版本和版權(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í)行前不寫(xiě)入 __pycache__ 目錄,python3 -B your_script.py。
  • --check,檢查源文件中的語(yǔ)法錯(cuò)誤,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,強(qiáng)制 Python 以非緩沖的方式運(yùn)行,python3 -u your_script.py。
  • -S,在執(zhí)行前不導(dǎo)入 site.py,python3 -S your_script.py。
  • -R,在執(zhí)行前不運(yùn)行 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,顯示命令行選項(xiàng)的幫助信息,python3 --help。

2.基礎(chǔ)知識(shí)

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

常量:

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

內(nèi)置類型:

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

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

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

內(nèi)置異常:

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

內(nèi)置模塊:

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

3.基本語(yǔ)法

三元運(yùn)算:


# 三元運(yùn)算符
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
)

條件語(yǔ)句:使用 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)用于在滿足條件時(shí)重復(fù)執(zhí)行代碼塊。

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


# 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 語(yǔ)句只能用來(lái)退出最內(nèi)層的循環(huán)。與某些其他編程語(yǔ)言不同,Python 不支持直接使用標(biāo)簽或指定層級(jí)來(lái)跳出多層嵌套循環(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)

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

4.異常和錯(cuò)誤處理

在 Python 中,異常處理是通過(guò)使用 try 和 except 語(yǔ)句來(lái)實(shí)現(xiàn)的。


try:
    result = 10 / 0
    raise ValueError("這是一個(gè)錯(cuò)誤")
except ExceptionType1:
    # 處理 ExceptionType1 的代碼塊
    pass
except (ExceptionType2, ExceptionType3) as e:
    # 同時(shí)處理 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("沒(méi)有異常發(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)換為大寫(xiě)。
  • .lower():轉(zhuǎn)換為小寫(xiě)。
  • .capitalize():首字母大寫(xiě)。
  • .title():每個(gè)單詞的首字母大寫(xiě)。
  • .strip():移除字符串開(kāi)頭和結(jié)尾的空白字符。
  • .split():按照指定分隔符切分字符串。
  • .join():將序列中的元素以指定的字符連接生成一個(gè)新的字符串。
  • .find() 或 .index():查找子字符串并返回索引位置。
  • .replace():替換字符串中的某些字符。
  • .len():返回字符串長(zhǎng)度。

字符串格式化:


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 代碼的文件,通常是一個(gè) .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")

包是包含多個(gè)模塊的目錄,它必須包含一個(gè)名為 __init__.py 的文件(可以為空),該文件標(biāo)識(shí)該目錄為 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()

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


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

7.元組、列表、字典

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


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

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

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

# 解包
a, b, c = my_tuple

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


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

# 訪問(wèn)
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()

字典是一個(gè)無(wú)序的鍵值對(duì)集合,鍵必須是不可變類型,如字符串或元組。


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

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

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

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


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

# 使用大括號(hào) {} 創(chuàng)建空集合是無(wú)效的,因?yàn)榭占?Python 中用 set() 函數(shù)表示。

# 添加元素
my_set.add(4)

# 刪除元素
my_set.remove(2)
my_set.discard(5)  # 即使 5 不存在,也不會(huì)報(bào)錯(cuò)

# 清空集合
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 中的一種語(yǔ)法結(jié)構(gòu),它提供了一種簡(jiǎn)潔的方式來(lái)創(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:對(duì)每個(gè)元素進(jìn)行的操作。
  • item:從 iterable 中依次取出的元素。
  • iterable:一個(gè)序列、集合或其他迭代器。
  • condition(可選):一個(gè)布爾表達(dá)式,只有滿足條件的元素才會(huì)被包括在內(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ù)

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


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

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

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

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


x = 10  # 全局變量

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

my_function()

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

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

函數(shù)參數(shù)可以通過(guò)多種方式傳遞給函數(shù)。以下是一些常見(jiàn)的參數(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)的高級(jí)編程語(yǔ)言。面向?qū)ο缶幊淌且环N編程范式,它使用“對(duì)象”來(lái)設(shè)計(jì)應(yīng)用程序和程序的結(jié)構(gòu)。

類(Class):

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

對(duì)象(Object):

  • 對(duì)象是類的實(shí)例。創(chuàng)建類的新實(shí)例時(shí),會(huì)創(chuàng)建一個(gè)對(duì)象。
  • 對(duì)象可以接收數(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ù)(屬性)和代碼(方法)捆綁在一起的過(guò)程,并對(duì)對(duì)象的某些部分隱藏起來(lái),只暴露有限的接口。
  • 在 Python 中,可以通過(guò)在屬性名前加雙下劃線(__)來(lái)實(shí)現(xiàn)屬性的私有化。
class Car:
    def __init__(self, make, model):
        self.__make = make
        self.__model = model

多態(tài)(Polymorphism):

  • 多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)的能力,即同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作。
  • 在 Python 中,多態(tài)可以通過(guò)方法重載和重寫(xiě)來(lái)實(shí)現(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):

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

方法(Methods):

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

類變量和實(shí)例變量:

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

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

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

特殊方法:

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

10.多線程

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

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

# 啟動(dòng)線程
t1.start()
t2.start()

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

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

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


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

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

# 釋放鎖
lock.release()

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

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

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

Event(事件) ,事件用于線程之間的通信,一個(gè)線程可以等待事件被另一個(gè)線程設(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ù)雜的線程同步,允許一個(gè)或多個(gè)線程等待,直到被另一個(gè)線程通知:


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語(yǔ)句

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

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

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

# 上下文管理器
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)庫(kù),提供了異步編程的支持。

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

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

事件循環(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ò)請(qǐng)求
    print(what)

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

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

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

asyncio.run(main())

# 創(chuàng)建任務(wù)(Task)來(lái)并發(fā)運(yùn)行協(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è)置超時(shí),或者取消正在運(yùn)行的任務(wù)。
async def main():
    try:
        # 設(shè)置超時(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 塊來(lái)捕獲和處理異常
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

# 一個(gè) 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

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

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

14.日期與時(shí)間

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

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

常用函數(shù)和方法

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

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

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

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

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

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

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

# 時(shí)間戳格式化輸出

import time
from datetime import datetime

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

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

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

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

from datetime import datetime

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

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

# 將日期時(shí)間對(duì)象轉(zhuǎn)換為時(shí)間戳
timestamp = dt_object.timestamp()
print("字符串轉(zhuǎn)時(shí)間戳:", 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)建一個(gè)新目錄。
  • os.makedirs(path): 創(chuàng)建新目錄,如果中間的目錄不存在也會(huì)一并創(chuàng)建。
  • os.rmdir(path): 刪除一個(gè)空目錄。
  • os.removedirs(path): 刪除目錄及其所有內(nèi)容。
  • os.path.exists(path): 檢查指定路徑是否存在。
  • os.path.isfile(path): 檢查指定路徑是否為文件。
  • os.path.isdir(path): 檢查指定路徑是否為目錄。
  • os.path.join(path, *paths): 將多個(gè)路徑組合成一個(gè)路徑。
  • 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)境是一個(gè)獨(dú)立的Python解釋器和庫(kù)的副本。它允許您在不影響系統(tǒng)全局Python安裝的情況下安裝和管理項(xiàng)目特定的包。

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


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

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

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

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

要使用 request 對(duì)象,你需要從 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)容。這是一個(gè)字符串屬性,你可以賦予它任何想要返回給客戶端的數(shù)據(jù)。
  • response.status_code:設(shè)置 HTTP 狀態(tài)碼。例如,200 表示成功,404 表示未找到。
  • response.headers:一個(gè)字典對(duì)象,用于設(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:一個(gè)字典對(duì)象,用于設(shè)置客戶端的 cookies。
  • response.set_cookie(key, value, expires=None, max_age=None, domain=None, path=None, secure=None, httponly=None, samesite=None):用于設(shè)置一個(gè) cookie。你可以指定 expires、max_age、domain、path、secure、httponly 和 samesite 等參數(shù)。
  • response.delete_cookie(key, path='/', domain=None):用于刪除一個(gè) cookie。
  • response.autocorrect_location_header(url):自動(dòng)糾正 Location 頭字段中的相對(duì) URL。
  • response.get_data():獲取響應(yīng)體的內(nèi)容。如果內(nèi)容被編碼,它將返回編碼后的版本。
  • response.get_json():如果響應(yīng)體是 JSON 格式的,這個(gè)方法可以解析并返回一個(gè) Python 對(duì)象。

response 對(duì)象代表了客戶端接收到的 HTTP 響應(yīng)。這個(gè)對(duì)象通常是通過(guò) 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)對(duì)象
    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.獲取請(qǐng)求參數(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 編碼的請(qǐng)求體中獲取數(shù)據(jù),通常用于處理表單提交的數(shù)據(jù)。以下是 Form 支持的參數(shù):

  • default: 設(shè)置參數(shù)的默認(rèn)值。
  • min_length: 字符串的最小長(zhǎng)度。
  • max_length: 字符串的最大長(zhǎng)度。
  • regex: 字符串必須匹配的正則表達(dá)式。
  • required: 指定字段是否為必填項(xiàng),默認(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è)置一個(gè)別名,這在 URL 中使用的名稱與函數(shù)參數(shù)名稱不一致時(shí)非常有用。
  • title: 為參數(shù)設(shè)置一個(gè)標(biāo)題,這通常用于 API 文檔。
  • description: 為參數(shù)提供一個(gè)描述,這在 API 文檔中顯示,有助于說(shuō)明參數(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ù)的最小長(zhǎng)度(對(duì)于字符串)。
  • max_length: 參數(shù)的最大長(zhǎng)度(對(duì)于字符串)。
  • regex: 參數(shù)值必須匹配指定的正則表達(dá)式。
  • example: 為參數(shù)提供一個(gè)示例值,這在 API 文檔中顯示。

獲取JSON參數(shù):


from fastapi import FastAPI

app = FastAPI()

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

2.Request對(duì)象

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


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  # 獲取請(qǐng)求頭
    body = await request.json()  # 獲取 JSON 請(qǐng)求體
    return {"query_param": query_param, "headers": dict(headers), "body": body}

3.Response 對(duì)象

Response 對(duì)象用于構(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 對(duì)象
    

4.校驗(yàn)JSON參數(shù)

在 FastAPI 中,當(dāng)你在路徑操作函數(shù)中聲明一個(gè)參數(shù),并將其類型指定為 Pydantic 模型時(shí),F(xiàn)astAPI 會(huì)自動(dòng)將請(qǐng)求體解析為 JSON 并進(jìn)行驗(yà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)用于圖像識(shí)別、目標(biāo)檢測(cè)、自然語(yǔ)言處理等領(lǐng)域。

1.大模型平臺(tái)

Python項(xiàng)目

收集一些很厲害的Python倉(cāng)庫(kù):

大模型:

實(shí)用庫(kù):

Rembg

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

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

開(kāi)源地址:https://github.com/danielgatis/rembg

詳見(jiàn)Github倉(cāng)庫(kù)的說(shuō)明:https://github.com/danielgatis/rembg

1.基礎(chǔ)知識(shí)

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

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

開(kāi)源地址:

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

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

3.問(wèn)題記錄

importing onnxruntime_pybind11_state: 找不到指定的模塊

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

FunASR


FunASR是一個(gè)基礎(chǔ)語(yǔ)音識(shí)別工具包,提供多種功能,包括語(yǔ)音識(shí)別(ASR)、語(yǔ)音端點(diǎn)檢測(cè)(VAD)、標(biāo)點(diǎn)恢復(fù)、語(yǔ)言模型、說(shuō)話人驗(yàn)證、說(shuō)話人分離和多人對(duì)話語(yǔ)音識(shí)別等。

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


請(qǐng)登錄后查看

小碼二開(kāi) 最后編輯于2024-10-09 14:19:53

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

{{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 || '暫無(wú)簡(jiǎn)介'}}
附件

{{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}}
2163
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

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

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

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

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服