🏆🏆🏆教程全知識點簡介:1.靜態Web服務器涵蓋固定頁面數據返回、命令行啓動動態端口綁定。2. Python高級特性包括閉包變量修改、裝飾器(定義、語法糖、執行時間統計)、property屬性、with語句和上下文管理器、深拷貝和淺拷貝。3. 正則表達式涉及多字符匹配(*、{m,n})、開頭結尾匹配(^$)、字符排除匹配、分組匹配。4. 操作系統基礎包括操作系統概念、虛擬機軟件、Ubuntu系統、Linux內核及發行版。5. Linux命令系統涵蓋目錄查看、路徑操作、文件操作(ls、mkdir、rm、cp、mv)、重定向、文件內容查看、鏈接、壓縮解壓縮(tar、zip)。6. 系統管理包括文件權限(chmod)、用户權限(whoami、passwd)、用户創建、編輯器vim、軟件安裝卸載。7. 併發編程涵蓋多任務概念、進程(進程編號獲取、參數傳遞)、線程(執行特性、共享變量、死鎖處理)、進程線程對比、協程(概念、優點、gevent)。8. 網絡編程包括端口概念、TCP協議特點、socket使用、TCP開發流程、客户端服務端開發。9. HTTP協議涉及瀏覽器服務器通信、URL組成、開發者工具使用。
<!-- start:bj1 -->
📚📚倉庫code.zip 👉直接-->: https://gitee.com/yinuo112/Backend/blob/master/Python/嘿馬pyt... 🍅🍅
<!-- end:bj1 -->
✨ 本教程項目亮點
🧠 知識體系完整:覆蓋從基礎原理、核心方法到高階應用的全流程內容
💻 全技術鏈覆蓋:完整前後端技術棧,涵蓋開發必備技能
🚀 從零到實戰:適合 0 基礎入門到提升,循序漸進掌握核心能力
📚 豐富文檔與代碼示例:涵蓋多種場景,可運行、可複用
🛠 工作與學習雙參考:不僅適合系統化學習,更可作為日常開發中的查閲手冊
🧩 模塊化知識結構:按知識點分章節,便於快速定位和複習
📈 長期可用的技術積累:不止一次學習,而是能伴隨工作與項目長期參考
🎯🎯🎯全教程總章節
🚀🚀🚀本篇主要內容
This file file serves as your book's preface, a great place to describe your book's content and ideas.
property屬性
學習目標
- 能夠知道裝飾器方式的property屬性的定義方式
1. property屬性的介紹
property屬性就是負責把一個方法當做屬性進行使用,這樣做可以簡化代碼使用。
定義property屬性有兩種方式
- 裝飾器方式
- 類屬性方式
2. 裝飾器方式
class Person(object):
def __init__(self):
self.__age = 0
# 裝飾器方式的property, 把age方法當做屬性使用, 表示當獲取屬性時會執行下面修飾的方法
@property
def age(self):
return self.__age
# 把age方法當做屬性使用, 表示當設置屬性時會執行下面修飾的方法
@age.setter
def age(self, new_age):
if new_age >= 150:
print("成精了")
else:
self.__age = new_age
# 創建person
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000
運行結果:
0
100
成精了
代碼説明:
- @property 表示把方法當做屬性使用, 表示當獲取屬性時會執行下面修飾的方法
- @方法名.setter 表示把方法當做屬性使用,表示當設置屬性時會執行下面修飾的方法
- 裝飾器方式的property屬性修飾的方法名一定要一樣。
3. 類屬性方式
class Person(object):
def __init__(self):
self.__age = 0
def get_age(self):
"""當獲取age屬性的時候會執行該方法"""
return self.__age
def set_age(self, new_age):
"""當設置age屬性的時候會執行該方法"""
if new_age >= 150:
print("成精了")
else:
self.__age = new_age
# 類屬性方式的property屬性
age = property(get_age, set_age)
# 創建person
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000
運行結果:
0
100
成精了
代碼説明:
-
property的參數説明:
- 第一個參數是獲取屬性時要執行的方法
- 第二個參數是設置屬性時要執行的方法
4. 小結
-
定義property屬性有兩種方式:
- 裝飾器方式
- 類屬性方式
-
裝飾器方式:
- @property 修飾獲取值的方法
- @方法名.setter 修飾設置值的方法
-
類屬性方式:
- 類屬性 = property(獲取值方法, 設置值方法)
with語句和上下文管理器
學習目標
- 能夠知道自定義上下文管理器的兩種方式
1. with語句的使用
基礎班向文件中寫入數據的示例代碼:
# 1、以寫的方式打開文件
f = open("1.txt", "w")
# 2、寫入文件內容
f.write("hello world")
# 3、關閉文件
f.close()
代碼説明:
- 文件使用完後必須關閉,因為文件對象會佔用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的
這種寫法可能出現一定的安全隱患,錯誤代碼如下:
# 1、以讀的方式打開文件
f = open("1.txt", "r")
# 2、讀取文件內容
f.write("hello world")
# 3、關閉文件
f.close()
運行結果:
Traceback (most recent call last):
File "/home/python/Desktop/test/xxf.py", line 4, in <module>
f.write("hello world")
io.UnsupportedOperation: not writable
代碼説明:
- 由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。
- 為了保證無論是否出錯都能正確地關閉文件, 可以使用try ... finally來解決
安全寫法, 代碼如下:
try:
# 1、以讀的方式打開文件
f = open("1.txt", "r")
# 2、讀取文件內容
f.write("xxxxx")
except IOError as e:
print("文件操作出錯", e)
finally:
# 3、關閉文件
f.close()
運行結果:
文件操作出錯 not writable
這種方法雖然代碼運行良好,但是缺點就是代碼過於冗長,並且需要添加try-except-finally語句,不是很方便,也容易忘記.
在這種情況下,Python提供了 with 語句的這種寫法,既簡單又安全,並且 with 語句執行完成以後自動調用關閉文件操作,即使出現異常也會自動調用關閉文件操作。
with 語句的示例代碼:
# 1、以寫的方式打開文件
with open("1.txt", "w") as f:
# 2、讀取文件內容
f.write("hello world")
2. 上下文管理器
一個類只要實現了__enter__()和__exit__()這個兩個方法,通過該類創建的對象 就稱之為上下文管理器。
上下文管理器可以使用 with 語句,with語句之所以這麼強大,背後是由上下文管理器做支撐的,也就是説剛才使用 open 函數創建的文件對象就是就是一個上下文管理器對象。
自定義上下文管理器類,模擬文件操作:
定義一個File類,實現 __enter__() 和 __exit__()方法,然後使用 with 語句來完成操作文件, 示例代碼:
class File(object):
# 初始化方法
def __init__(self, file_name, file_model):
# 定義變量保存文件名和打開模式
self.file_name = file_name
self.file_model = file_model
# 上文方法
def __enter__(self):
print("進入上文方法")
# 返回文件資源
self.file = open(self.file_name,self.file_model)
return self.file
# 下文方法
def __exit__(self, exc_type, exc_val, exc_tb):
print("進入下文方法")
self.file.close()
if __name__ == '__main__':
# 使用with管理文件
with File("1.txt", "r") as file:
file_data = file.read()
print(file_data)
運行結果:
進入上文方法
hello world
進入下文方法
代碼説明:
__enter__表示上文方法,需要返回一個操作文件對象__exit__表示下文方法,with語句執行完成會自動執行,即使出現異常也會執行該方法。
3. 小結
- Python 提供了 with 語句用於簡化資源釋放的操作,使用 with 語句操作建立在上下文管理器(實現
__enter__和__exit__)的基礎上
生成器的創建方式
學習目標
- 能夠知道生成器的兩種創建方式
1. 生成器的介紹
根據程序員制定的規則循環生成數據,當條件不成立時則生成數據結束。數據不是一次性全部生成出來,而是使用一個,再生成一個,可以節約大量的內存。
2. 創建生成器的方式
- 生成器推導式
- yield 關鍵字
生成器推導式:
- 與列表推導式類似,只不過生成器推導式使用小括號
# 創建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)
# next獲取生成器下一個值
# value = next(my_generator)
# print(value)
# 遍歷生成器
for value in my_generator:
print(value)
代碼説明:
- next 函數獲取生成器中的下一個值
- for 循環遍歷生成器中的每一個值
運行結果:
<generator object <genexpr> at 0x101367048>
0
2
4
6
8
yield 關鍵字:
- 只要在def函數裏面看到有 yield 關鍵字那麼就是生成器
def mygenerater(n):
for i in range(n):
print('開始生成...')
yield i
print('完成一次...')
if __name__ == '__main__':
g = mygenerater(2)
# 獲取生成器中下一個值
# result = next(g)
# print(result)
# while True:
# try:
# result = next(g)
# print(result)
# except StopIteration as e:
# break
# # for遍歷生成器, for 循環內部自動處理了停止迭代異常,使用起來更加方便
for i in g:
print(i)
代碼説明:
- 代碼執行到 yield 會暫停,然後把結果返回出去,下次啓動生成器會在暫停的位置繼續往下執行
- 生成器如果把數據生成完成,再次獲取生成器中的下一個數據會拋出一個StopIteration 異常,表示停止迭代異常
- while 循環內部沒有處理異常操作,需要手動添加處理異常操作
- for 循環內部自動處理了停止迭代異常,使用起來更加方便,推薦大家使用。
運行結果:
開始生成...
0
完成一次...
開始生成...
1
完成一次...
3. 生成器的使用場景
數學中有個著名的斐波拉契數列(Fibonacci),數列中第一個數為0,第二個數為1,其後的每一個數都可由前兩個數相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
現在 使用生成器來實現這個斐波那契數列,每次取值都通過算法來生成下一個數據, 生成器每次調用只生成一個數據,可以節省大量的內存。
def fibonacci(num):
a = 0
b = 1
# 記錄生成fibonacci數字的下標
current_index = 0
while current_index < num:
result = a
a, b = b, a + b
current_index += 1
# 代碼執行到yield會暫停,然後把結果返回出去,下次啓動生成器會在暫停的位置繼續往下執行
yield result
fib = fibonacci(5)
# 遍歷生成的數據
for value in fib:
print(value)
運行結果:
0
1
1
2
3
4. 小結
- 生成器是根據算法生成數據的一種機制,每次調用生成器只生成一個值,可以節省大量內存。
-
生成器的創建有兩種方式:
-
- 生成器推導式
-
- yield 關鍵字
-
🚀✨ (未完待續)項目系列下一章
📚下一篇 將進入更精彩的環節!
🔔 記得收藏 & 關注,第一時間獲取更新!
🍅 一起見證整個系列逐步成型的全過程。