25個關鍵技術點,帶你熟悉Python
摘要:本文收納了Python學習者經常使用的庫和包,並介紹了Python使用中熱門的問題。
01、Python 簡介
什麼是 Python
- 一種物件導向的高階動態可解釋型指令碼語言。
- Python 直譯器一次讀取一行程式碼,將其解釋為低階機器語言 (如位元組程式碼) 並執行它。
- 因此這種語言經常會引發執行錯誤。
為什麼選擇 Python (優勢)
- Python 是當前最流行的語言,因為它更容易編碼且具有很強的可解釋性。
- Python 是一種物件導向的程式語言,也可用於編寫一些功能程式碼。
- Python 是能夠很好地彌補業務和開發人員之間差距。
- 與其他語言 (如 C#/Java) 相比,Python 程式被推向市場的時間更短。
- Python 自帶大量的機器學習和分析包。
- 大量社群和書籍可用於支援 Python 開發人員。
- 從預測分析到UI,幾乎所有型別的應用程式都可以用 Python 實現。
- Python 程式無需宣告變數型別。 因此,所構建的應用程式能有更快的執行速度。
為什麼不選擇 Python (劣勢)
- 與其他語言 (C++,C#,Java) 相比,Python 程式的執行更慢,這是因為Python 中缺少類似 Just In Time 最佳化器的支援。
- Python 語法空白約束給新手編碼實現帶來一些困難。
- Python 不像 R 語言那樣提供高階的統計功能。
- Python 不適合進行低階系統和硬體互動。
Python 是如何工作
下圖展示了 Python 在機器上的執行機制。這裡的關鍵是直譯器,它是負責將高階的 Python 語言編譯成低階的機器語言,以便理解。
02、變數——目標型別及範圍
- 可在程式中使用的變數儲存資訊,如儲存使用者輸入,程式的本地狀態等。
- Python 中的變數以名字命名。
Python 中變數型別包括數字,字串,集合,列表,元組和字典,這些都是標準的資料型別。
宣告並給變數賦值
如下所示:這裡首先分別為變數 myFirstVariable 分配整型數值1,字串“Hello You”。由於 Python 中的資料型別是動態變化的,因此這種重複賦值操作是可以實現的。
Python 中變數賦值操作又稱為繫結 (blinding)。
數值型
如下所示,Python 支援整型,小數,浮點型資料。
此外,也能支援長整型,以 L 為字尾表示,如999999999999L。
字串
字串就是字母的序列表示文字資訊。
字串的值用引號括起來,如下所示。
字串是不可改變的,一旦建立,就不能被修改。如下所示:
當字串變數被賦予一個新值時,Python 將建立一個新的目標來儲存這個變數值。
區域性變數和全域性變數
區域性變數
區域性變數,如在一個函式內宣告一個變數,則該變數只存在於該函式中。
區域性變數在外部是不能被訪問的,如下所示。
Python 中 if-else 和 for/while 迴圈模組是不能建立區域性變數,如下所示在 for/while 迴圈中:
輸出為:
在 if-else 模組中:
輸出為
全部變數
- 全域性變數可以透過任意一個全域性函式訪問,它們存在於 __main__ 框架中。
- 此外,在函式之外你也可以宣告一個全域性變數。值得注意得是,當需要為一個全域性變數分配新值時,必須使用“global”關鍵字,如下所示:
當移除“Global TestMode”只能在 some_function() 函式中將變數設定為 False。如果你想在多個模組間共享一個全域性變數,那麼你需要建立一個共享模組檔案。如 configuration.py,並在檔案中找到你所需的變數。最後匯入共享模組。
檢視變數型別
- 透過 type() 函式來檢視變臉型別,如下所示。
整型變數中的逗號
- 逗號可視為是變數序列,如下所示。
03、操作
數值操作
Python 支援基礎的加減乘除數值計算,也支援地板除法 (floor division),如下所示。
此外,Python 還支援指數運算 (**),如下所示。
同時,Python 還能進行除法取餘操作,如下所示。
字串操作
字串拼接
字串複製
字串切片
字串反序
負索引
如果你想得到字串的最後一個字元,那需要使用負索引值,如下所示。
檢視索引值
正規表示式
- split():透過正規表示式將一個字串分割得到一個列表。
- sub():透過正規表示式取代所要匹配的字元。
- subn():透過正規表示式取代所要匹配的字元並返回所替代字元的個數。
Casting
- str(x):將變數 x 轉為字串型別
- int(x):將變數 x 轉為整型
- float(x):將變數 x 轉為浮點型
集合操作
- 集合是一種無序的資料集合,定義一個集合變數,如下所示。
集合交集
- 獲取兩個集合的公共部分,如下所示。
集合差異
- 獲取兩個集合之間的不同部分,如下所示。
集合並集
- 獲取兩個集合的並集,如下所示。
三元運算子
- 用於在一行編寫條件語句,語法結構為 [If True] if [Expression] Else [If False],如下所示。
04、註釋
單行註釋
多行註釋
05、表示式
可用於布林運算,如:
- Equality:==
- Not Equality:!=
- Greater:>
- Less:<
- Greater or Equal:>=
- Less or Equal:<=
06、Pickling
將物件轉換為字串並將字串轉儲為一個檔案的過程稱為 pickling,反之則稱為 unpickling。
07、函式
- 函式是一種可以在程式碼中執行的語句序列。如果在你的程式碼中出現重複的語句,那麼可以建立一個可重用的函式並在程式中使用它。
- 函式也可以引用其他函式。
- 函式消除了程式碼中的重複,這使得程式碼除錯和問題查詢變得更容易。
- 函式使得程式碼更易於理解且易於管理。
- 函式允許將一個大型的應用程式拆分為一些小的模組。
定義一個新的函式
呼叫一個函式
檢視字串的長度
可以呼叫函式 len(x),如下所示。
引數
引數可以被新增到一個函式中,使得函式更通用。
透過引數,可以將一個變數傳遞給方法,如下所示。
可選引數
為引數提供一個預設值來傳遞一個可選引數,如下所示。
* 引數
如果想讓函式使用任意數量的引數,那麼需要在引數名前新增 *,如下所示。
** 引數
** 允許傳遞可變數量的關鍵字引數給函式,同時也可以傳遞一個字典值作為關鍵字引數。
Return
函式能夠返回一個值,如下所示。
如果一個函式需要返回多個值的話,那麼最好返回一個元組 (以逗號隔開每個值),如下所示。
Lambda 函式
- 是一種單行表示式的匿名函式
- 是一種行內函數
- Lambda 函式沒有宣告,只是透過一個表示式來實現,如下所示。
函式的語法結構為:variable = lambda arguments: expression
Lambda 函式也可以作為引數傳遞給其他的函式。
dir() 和 help()
- dir() 用於顯示定義的符號
- help() 用於顯示幫助文件
08、模組
什麼是模組
- Python 語言附帶了200多個標準模組。
- 模組是一種將 python 程式中相似功能進行分組的元件。
- 任何 python 程式碼檔案都可以打包為模組,然後再匯入。
- 模組允許使用者在自己的程式碼解決方案中進行元件化設計。
- 模組提供了名稱空間的概念,幫助使用者共享資料和服務。
- 模組鼓勵程式碼重用,並減少變數名稱衝突。
PYTHONPATH
- 這是 python 的環境變數,表示用於操作模組的 python 直譯器所在的位置。PYTHONHOME 是一個用於搜尋該路徑的模組。
如何匯入模組
如果你有一個檔案:MyFirstPythonFile 包含很多個函式,變數和物件,然後你可以將這些功能匯入到其他類中,如下所示。
Python 內部會將模組檔案編譯為二進位制再執行模組的程式碼
如果想匯入模組中的所有物件,可以這樣:
如果模組中包含的函式或物件命名為 my_object,那麼你可以將其列印出來,如下所示。
值得注意的是,如果你不想在載入時執行模組的話,那麼你需要檢查是否有 __name__ == ‘__main__’
From 匯入模組
如果你只是想訪問模組中的一個物件或某個部分,可以這樣:
這種方式匯入模組允許使用者在訪問模組中的物件,而無需引用模組,如下所示。
可以透過 from * 來匯入模組中的所有物件,如下所示。
值得注意的是,模組只能在第一次 import 時匯入。如果你想使用 C 模組,那麼你可以使用 PyImport_ImportModule。此外,如果你想在兩個不同模組中使用定義相同的物件,那麼可以將 import 和 from 結合起來匯入模組。
09、包 (Packages)
Python 中包是模組的目錄。
如果你的 Python 程式碼中提供了大量功能,這些功能被分組到模組檔案中,那麼可以從模組中建立一個包,以便更好地分配和管理這些模組。
包能夠更好地管理和組織模組,這有助於使用者更輕鬆地解決問題和查詢模組。
可以將第三方軟體包匯入到程式碼中,如 pandas/scikit learn 和 tensorflow等等。
包可以包含大量的模組。
如果程式碼中的某些部分提供相似的功能,那麼可以將模組分組到一個包中,如下所示。
上圖中 packageroot 是一個根目錄 (root folder),packagefolder 是其根目錄下面的一個子目錄,而 my_module 是在 packagefolder 目錄下的一個 python 模組檔案。
此外,資料夾名可以作為名稱空間,如下所示。
值得注意的是,需要確保所匯入的包中每個目錄都包含一個 __init__.py 檔案。
PIP
- PIP 是 python 的包管理器。
- 可以使用 PIP 來下載包,如下所示。
10、條件語句
條件語句 if else,如下所示。
請注意冒號和縮排在條件語句中的使用。
檢查型別
你也可以在 else 部分繼續新增條件邏輯語句,這樣構成巢狀條件結構,如下所示。
11、迴圈
While
While 語句提供一個條件,執行迴圈語句直到滿足該條件位置,迴圈終止,如下所示。
For
迴圈一定的次數,如下所示。
迴圈遍歷整個字串的所有字元,如下所示。
單行 for 迴圈
語法結構為 [Variable] AggregateFunction ([Value] for [item] in [collection])
Yielding
- 假定你的列表中包含一萬億條資料,需要從列表中計算偶數的數量。這時候將整個列表載入到記憶體中並不是最佳的做法,你可以透過列表來生成每個項。
- 使用 xrange 的迴圈結構
結合條件 if 的 for 迴圈
透過帶 if 的 for 迴圈來查詢兩個單詞中的字母,如下所示。
Break
如果你想終止迴圈,可以這樣:
使用 Fibonacci 函式的迴圈結構,如下所示。
12、遞迴
函式呼叫自身的過程稱為遞迴。
下面來演示一個階乘遞迴函式:
建立一個階乘函式,輸入為 n
如果輸入 n=0,則0! = 1
如果輸入 n != 0,則n! = n(n-1)!
此外,Fibonacci 遞迴函式的流程如下所示:
建立一個 Fibonacci 遞迴函式,輸入為 n
建立前兩個變數,併為其分別賦值0和1
如果輸入 n = 0,則返回0;如果輸入 n =1,則返回1;否則,返回 (n-1)+(n-2)
值得注意的是,遞迴結構需要有一個退出檢查,否則函式將進行無限迴圈。
13、框架 Frames 和棧 Stack 呼叫
Python 程式碼被載入到堆疊中的框架。
函式及其引數和變數一起被載入到框架中。
框架以正確的執行順序被載入到堆疊中。
堆疊描述了函式的執行。在函式外宣告的變數被儲存在 __main__ 中。
堆疊首先執行最後一個框架。
如果遇到執行錯誤,可以使用回溯 (traceback) 來查詢函式列表。
14、集合 Collections
列表 Lists
列表是一種能夠包含任何資料型別的序列資料結構,這種結構是可變的。
列表可以進行整數索引,可以使用中括號來建立一個列表,如下所示。
使用索引值來新增、更新、刪除列表中的項,如下所示。
此外,複製和切片同樣適用於列表 (可類比字串中的操作), 列表還支援排序操作,如下所示。
元組 Tuples
在某種程度上元組和列表類似,都是可以儲存任意物件序列的資料結構。
元組的執行比列表更快速。
元組可以進行整數索引
元組是不可變的,如下所示。
值得注意的是,如果一個元組中的元素包含一個列表,那麼可以對列表進行修改。同樣,當為一個物件賦值並將該物件儲存到列表中,隨後如果物件發生變化的話,相應地,列表中的物件也會進行更新。
字典 Dictionaries
字典是程式語言中最重要的一種資料結構之一,它能夠儲存鍵值對 (key/value) 物件。
字典有許多優點,能夠輕鬆地進行資料檢索,如下所示。
可以透過如下方式建立一個字典。
列印字典中的內容,如下所示。
字典中的值可以是任意型別的資料,包括字串,數值,布林型,列表甚至是字典,如下所示。
值得注意的是,如果你想對一個列表進行向量或矩陣操作,可以呼叫 Numpy 包來實現。
15、編譯 (Compilation) 與關聯 (Linking)
- 這些特徵可用於一些以其他語言編寫的檔案,例如 C 或 C++ 等。
- 一旦將程式碼寫入檔案後,可以將檔案放在 Modules 目錄中。
- 在 Setup.local 檔案中新增一行是非常重要的,這能確保新建立的檔案能夠被載入。
編譯 Compilation
允許無任何錯誤地進行新擴充套件的編譯過程。
關聯 Linking
一旦新的擴充套件編譯完成,他們之間就會被關聯。
16、迭代器 Iterators
Iterators
- 允許遍歷一個集合
- 所有迭代器都包含 __iter __() 和 __next __() 函式
- 只需在列表,字典,字串或集合上執行 iter(x) 即可
- 可以執行例項 next(iter),這裡 iter = iter(list)
- 如果集合中元素項的數目非常大且無法一次載入記憶體中的所有檔案,此時迭代器很有用
- 有一些通用的迭代器使開發人員能夠實現函數語言程式設計,如下:
Filter
- 根據條件過濾掉相應的值
Map
- 對集合中的每個值進行計算,即將值進行對映,如將文字轉為整型數值。
Reduce
- 減少集合中的值,即得到一個更小的集合。如集合求和,它本質上是可迭代的。
Zip
- 獲取多個集合並返回一個新集合
- 新集合的每個項,包含每個輸入集合中的元素
- Zip 允許同時對多個集合進行橫向操作,如下所示。
17、物件導向設計——類 Classes
- Python 允許建立自定義型別,將這些使用者自定義的型別稱為類。這些類具有自定義屬性和功能。
- 物件導向的設計允許程式設計師根據自身所需的屬性和功能自定義建立物件。
- 屬性也可以引用另一個物件。
- Python 中的類可以引用其他類。
- Python 支援封裝 -- 例項函式和變數。
- Python 支援繼承,如下所示。
- 類的一個例項稱為物件。物件具有可變性,一旦建立物件,相應的屬性也將被更新。
__init__
- __init__ 函式在所有類中都存在。當需要進行類例項化時,該函式就將被執行。__init__ 函式可以根據需要設定相應的屬性,如下所示。
值得注意的是,self 引數將包含物件的引用,這與 C# 語言中的 this 引數類似。
__str__
當呼叫 print 時,返回一個物件的字串結果,如下所示。
因此,當執行 print 語句時,__str__ 將會被執行。
__cmp__
如果想要提供自定義邏輯來比較同一例項的兩個物件,可以使用__cmp__ 例項函式。
__cmp__ 函式返回1 (更大), - 1 (更低) 和0 (相等),以指示兩個物件的大小。
可以將 __cmp__ 想象成其他程式語言中的 Equals() 方法。
Overloading
透過將更多引數作為例項,來過載一個物件。
還可以透過為 __add__ 來實現想要的運算子,如 +。
物件的淺複製 (Shallow Copy) 和深複製 (Deep Copy)
等效物件 – 包含相同的值
相同物件 – 引用相同的物件 – 記憶體中指向相同的地址
如果要複製整個物件,可以使用複製模組 (copy module),如下所示。
這將導致淺複製,因為屬性的引用指標將會被複制。
如果物件的一個屬性是物件引用,那麼它將簡單地指向與原始物件相同的引用地址。
更新源物件中的屬性將導致目標物件中的屬性也會更新。
淺複製是複製引用指標。
這種情況下可以利用深複製,如下所示。
如果 MyClass 包含引用 MyOtherClass 物件的屬性,則屬性的內容將透過 deepcopy 複製到新建立的物件中。
深複製將對物件進行新的引用。
18、物件導向設計——繼承
Python支援物件的繼承,即物件可以繼承其父類的功能和屬性。
繼承的類可以在其函式中包含不同的邏輯。
如果一個父類 ParentClass 有兩個子類 SubClass1 和 SubClass2,那麼你可以使用Python來建立類,如下所示。
上例中兩個子類都將包含 my_function() 函式
類的繼承屬性鼓勵程式碼的重用性和可維護性。
此外,python 中支援多類繼承,這與 C# 語言不同。
多類繼承 multi-Inheritance
如果你想呼叫父類函式,可以這樣:
19、垃圾收集——記憶體管理
Python 中的所有物件都儲存在一個堆積空間 (heap space),而 Python 直譯器可以訪問此空間。
Python 有一個內建的垃圾收集機制。
這意味著 Python 可以自動為程式進行分配和取消記憶體,這與 C++ 或 C# 等其他語言類似。
垃圾收集機制主要是清除程式中未引用/使用的那些物件的記憶體空間。
由於多個物件可以共享記憶體引用,因此 python 使用兩種機制:
- 引用計數:計算引用物件的數目。如果物件的計數為0,則取消物件的空間分配。
- 迴圈引用:這種機制關注的是迴圈引用:當取消分配 (deallocation) 的數目大於閾值時,僅取消物件所在的記憶體空間分配。
在 Python 中新建立的物件,可以透過如下方式進行檢查:
此外,也可以透過及時或者基於事件機制來進行手動的垃圾收集。
20、 I/O
From Keyboard
使用 raw_input() 函式,如下所示。
檔案 Files
使用with/as語句來開啟並讀取檔案,這與 C# 中讀取檔案的操作一致。
此外,with 語句還可以處理關閉連線和其他清理操作。
開啟一個檔案,如下所示。
需要注意的是,readline() 可用於讀取檔案中的每一行。
開啟兩個檔案,如下所示。
檔案寫入,如下所示。
Python 中對檔案的操作通常涉及 os 和 shutil 模組。rw 表示讀寫模式,a代表可新增模式。
SQL
開啟一個連線,如下所示。
執行一個 SQL 宣告,如下所示。
網路服務 (Web Services)
查詢一個閒置服務,如下所示:
序列化和反序列化 JSON 檔案
反序列化 JSON,如下所示:
序列化 JSON,如下所示:
21、異常處理
丟擲異常
如果你想丟擲異常,那麼可以使用 raise 關鍵字,如下所示。
捕獲異常
可以透過如下方式捕獲異常資訊:
如果想捕獲特定的異常,可以這樣:
如果想使用 try/catch/finally 結構捕獲異常資訊,可以這樣:
值得注意的是,無論 finally 部分的程式碼是否觸發,你都可以使用 finally 來關閉資料庫/檔案的連線。
Try/Except/Else
如果想為異常資訊分配一個變數,可以這樣:
如果想定義用於自定義的限制,可以透過 assert 關鍵字實現,如下所示:
值得注意的是,python 中的異常同樣具有繼承性。
此外,你也可以建立自己的異常類,如下所示:
22、多執行緒和 GIL
- GIL 表示 Global Interpreter Lock。
- GIL 確保執行緒可以在任何時間執行,並允許 CPU 選擇要執行的所需執行緒。
- GIL 能夠傳遞當前正在執行的執行緒。
- Python 支援多執行緒。
此外,GIL 會增加程式碼執行的計算開銷。因此,執行多執行緒時需謹慎。
23、裝飾器 Decorators
- 裝飾器可以為程式碼新增功能,其本質上是一種呼叫其他物件/函式的函式。 它是可呼叫函式,因此在呼叫裝飾器函式時將返回隨後需要呼叫的物件。
- 透過封裝包/裝一個類/函式,然後在呼叫函式時執行特定的程式碼。
- 此外,還可以透過實現通用邏輯來記錄,進行安全檢查等,然後使用 property 標記方法的屬性。
24、Python 中的單元測試
Python 中有許多單元測試和模擬庫
下面以 unittest 為例
假定你的函式每次將輸入值減少1,如下所示:
可以透過如下方式來進行單元測試:
同樣地,也可以使用 doctest 來測試 docstrings 中所編寫的程式碼。
25、一些與 Python 有關的熱門話題
為什麼要使用 Python
- 編碼簡單,易於學習
- 物件導向程式語言
- 強大的分析功能和機器學習包
- 更快速地開發並將解決方案推向市場
- 提供內建的記憶體管理功能
- 提供巨大的社群支援和應用程式
- 無需編譯,因為它本身是一種可解釋的語言
- 動態輸入,即無需宣告變數
如何讓 Python 執行得更快
- Python 是一種高階語言,不適合在系統程式或硬體層面訪問。
- Python 不適用於跨平臺的應用程式。
- Python 是一種動態型別的解釋語言。與低階語言相比,它的最佳化和執行速度較慢。
- 實現基於 C 語言的擴充套件。
- 可以使用 Spark 或 Hadoop 建立多程式
- 可以利用 Cython,Numba 和 PyPy 來加速 Python 程式碼或用 C 語言編寫它並在 Python 中公開。
Python 愛好者都是用哪些 IDEs?
- 包括 Spyder,Pycharm 等。此外,還會使用各種的 notebooks,如 Jupyter。
Python 中熱門的框架和包有哪些
- Python 中必須掌握的包有很多,包括 PyUnit (單元測試), PyDoc (文件), SciPy (代數和數值計算), Pandas (資料管理), Sci-Kit learn (機器學習和資料科學), Tensorflow (人工智慧), Numpy (陣列和數值計算), BeautifulSoap (網頁爬取), Flask (微服務框架), Pyramid (企業應用), Django (UI MVVM), urllib (網頁爬取), Tkinter (GUI), mock (模擬庫), PyChecker (bug 檢測器), Pylint (模組程式碼分析) 等。
如何託管 Python 包
對於 Unix 系統:製作指令碼檔案,模式為可執行且檔案第一行必須是:
可以使用命令列工具並執行它。也可以透過 PyPRI 和 PyPI 服務。
Python 和 R 語言能合併嗎
R 語言中有著大量豐富的統計庫,可以使用 Rpy2 python 包或在 Juputer 中使用 beaker 筆記本或 IR 核心,在 Python 中執行 R 程式碼。
在執行 Python 前有沒有辦法能夠捕獲異常?
在執行程式碼之前,可以使用 PyChecker 和 PyLink 來捕獲異常資訊。
總結
本文概述了 Python 最重要的25個概念,這些知識對初學者來說足以編寫自己的 Python 包或使用現有的 Python 包,希望能幫助大家更好地學習 Python。
本文分享自華為雲社群《Python從入門到精通25個關鍵技術點》,原文作者:簡單堅持。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756/viewspace-2796164/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一場成功的技術面試的幾個關鍵點面試
- 帶你熟悉CSS浮動CSS
- 剖析 golang 的25個關鍵字Golang
- 6 個技術點帶你理解 Kafka 高效能背後的原理Kafka
- QTP關鍵技術QT
- 技術管理的6個關鍵原則
- CDGA|2分鐘帶你瞭解大資料治理必備能力和關鍵技術大資料
- 九個問題帶你-從入門到熟悉 HTTPSHTTP
- 從零到熟悉,帶你掌握Python len() 函式的使用Python函式
- 每天收入25美元即為“繁榮”?這裡是你需要了解的4個關鍵資料點
- Android無埋點資料收集SDK關鍵技術Android
- 字元畫軟體的四個關鍵技術 (轉)字元
- 一文帶你瞭解關鍵點標註 | 資料標註
- 技術大佬:我去,你竟然還不會用 this 關鍵字
- golang25個基礎關鍵詞註釋Golang
- 都知道RFID技術,可你瞭解RFID的關鍵技術是哪些嗎?
- 盤點近期重大技術成就及其將帶給你的影響,與你我息息相關!
- 帶你盤點那些死於2014年的技術
- 現代資料架構的7個關鍵技術架構
- Laravel——你真的熟悉關聯模型麼?Laravel模型
- 大資料的關鍵技術大資料
- 清華尹成帶你實戰GO案例(25)Go 打點器Go
- Java相關技術點及技術內容Java
- Python字串關鍵點總結Python字串
- 6個例項帶你解讀TinyVue 元件庫跨框架技術Vue元件框架
- 雲集技術學社|帶你瞭解DevOps技術原理dev
- Java軟體架構師-25個關注點Java架構
- 實現VR直播的關鍵技術VR
- 語音技術——關鍵詞搜尋
- Qtum量子鏈關鍵技術解讀QT
- 一文帶你瞭解HDFS技術
- 25 個你需要知道的人工智慧術語人工智慧
- 帶你熟悉鴻蒙輕核心Kconfig使用指南鴻蒙
- 想自學Android的速來!通宵都要看完這個Android關鍵技術點,值得收藏!Android
- 帶你輕鬆瞭解C# Lock 關鍵字C#
- 技術分享:Linux多核並行程式設計關鍵技術Linux並行行程程式設計
- 帶你入門Python爬蟲,8個常用爬蟲技巧盤點Python爬蟲
- 從一個實戰專案來看一下React Native開發的幾個關鍵技術點React Native