fbpx

Python 3: 深度研究 (第 1 部分)

變數、函數和函數式程式設計、閉包 ( Closures )、裝飾器 ( Decorators )、模組和套件

課程介紹:English 简中

從這 44.5 小時的課程,你會學到

  • 深入了解變數( variables )、記憶體( memory )、命名空間( namespaces )和範籌( scopes )
  • 深入研究 Python 的記憶體管理和優化
  • 深入理解和使用 Python 的數值資料類型(布林、整數、浮點數、小數點、分數、複數)
  • 高級布林( Boolean )表達式和運算符
  • 可呼叫函數的進階用法,包括函數、 lambdas 和閉包( closures )
  • 函數式程式設計技術,如 map 、 reduce、filter 和 partials
  • 創建進階的裝飾器,包括參數化裝飾器、類( class )裝飾器和裝飾器類( classes )
  • 進階裝飾器應用程 式,如記憶( memorization )和單一派遣通用函數(single dispatch generic functions )
  • 使用和理解 Python 的複雜模組和套件系統( package system )
  • 慣用 Python 和最佳實踐
  • 理解 Python 的編譯時間和運行時間,以及它如何影響你的程式碼
  • 避免常見的陷阱

要求

  • Python 程式設計的基本知識(變數、條件語句、迴圈、函數、列表、元組、字典、類)。
  • 你需要 Python 3.6 或更高版本,以及選擇的開發環境(命令行、PyCharm、Jupyter等)

課程說明

如果你在看這門課程,你已經對 Python 感興趣了,而且我不會跟你推銷。

你已經知道,這種流行的語言對於解決 REST api 開發、系統腳本編寫、數值分析、操縱資料、資料分析以及機器學習和人工智慧等各種任務非常有用。

但是你想學習慣用的 Python 嗎?

你想了解為什麼某些事情 Python 對其有所幫助嗎?

你想學習 Python的最佳實踐,以及 Python 開發人員可能遇到的常見問題嗎?

你想成為一名精通 Python 的程式設計師,成為正式的專家嗎?

與其給你一個 5 分鐘的解釋如何做 Python ,只給你表面的了解,讓你有可能採用不好的做法踩到陷阱,我會帶你深入地理解各種概念的原理和原理。

我不僅會向你展示程式設計常見模式的各種方式,還會向你展示 Pythonic 方法做這相同操作。

這不是關於學習的 XYZ 資料庫,或關注重要的 Python 語言特性。本課程著重於 Python 語言提供大量功能標準的程式庫( library ) ,在你運用第三方程式庫前應該了解的內容。

在這裡,你將開始學習如何成為一名專業的 Python 開發人員。如果需要的話,可以深入探索的最佳資源。

我們詳細討論各種主題。

例如,數字:下一次,你必須在應用程式中使用實數,才能真正理解為什麼浮點數( floats )按照他們的方式行事,以及是否應該使用小數或分數(並知道如何執行)。

你知道為什麼你絕不使用浮點數( floats )的等號測試(==)嗎?
0.1 + 0.1 + 0.1 == 0.3 – >錯!

你知道為什麼 float 0.1 實際看起來像:0.100000000000000005551115123126
而 0.125 則完全保存為 0.125000000000000000000000000000?

你了解整數除法和 mod(%)運算符嗎? 若是負數? 你想了解他們為什麼這樣做,並避免程式碼中的潛在錯誤?

例如:

2%3 - > 2
-2%3 - > 1
2%-3 - > -1

10 // 3 - > 3
-10 // 3 - > -4
-10 // -3 - > 4

你真的明白布林運算符是如何計算的嗎?
你知道這段程式碼的作用:

a = True
b = False

x = a or b
x --> True

好。 這個怎麼樣?

a = None
b = 'python'

x = a or b
x --> 'python'

你想知道為什麼嗎?

你知道 Python 的相關真值( associated truth values, 真)嗎? 如何利用它來編寫更乾淨、更 Pythonic 的程式碼?

有關 comprehensions 你覺得如何? 你願意學習寫這樣的程式:

def sum_cubes(lst):
sum = 0
for i in range(len(lst)):
sum = sum + lst[i] ** 3
return sum

或者這樣:

def sum_cubes(lst):
return sum(e ** 3 for e in lst)

或者將一個字串轉換為索引( index )和字符( characters )的元組( tuples)列表?

非 Pythonic 的方式來做到這一點:

lst = []
for i in len(lst(s)):
lst.append((i, s[i]))
or the Pythonic way:
lst = list(enumerate(s))

10次中有9次,你可能甚至不需要那裡的清單!

你想知道如何充分利用超靈活的方式來指定 Python 的函數參數嗎?

你懂這嗎?

def my_func(a,b = 10,* args,key1,key2 = None,** kwargs)

你想學習如何打包和解壓參數嗎? 一般來說可迭代?

你知道這是什麼嗎?

a, b, *_, x, y = some_list

或是這個?

x, y = y, x
x, y, z = y, z, x

你想知道為什麼使用可變型別( mutable type )作為函數參數的預設值是危險的嗎? 還是函數呼叫( function call )? 但也要了解你可以在哪裡運用以獲得優勢?

你能在這個 “logging” 功能中發現問題嗎?

def log(msg, event_time = datetime.utcnow()):
print(f'{event_time}: {msg}')
log('message 1')
# 5 minutes later...
log('message 2')

為什麼這兩種情況下時間都一樣?

你知道如何讓自定義類別(custom classes )支持排序運算符(如<,<=,>,> =,==和!=)嗎? 你是否想知道如何編寫自己的裝飾器( decorator )以將此功能添加到你的類( classes )中,而無需指定所有可能的排序運算符? 或者考慮使用 Python 提供的標準程式庫( library )? 若使用裝飾器來加速某些函數呼叫,採用稱為 memoization 的技術,你覺得怎樣?

你想了解更多關於 map、reduce 和 filter 功能嗎? 如何能全面理解但盡量少用? 或者如何處理偏函數( partial functions )和 lambda 等值? 運算符模組( operator module )?

說到 lambda? “標準”函數和 lambda 表達式之間的區別是什麼?

def say_hello(name):
return f'Hello {name}!'

vs

say_hello = lambda name: f'Hello {name}!'

提示:他們是同一件事! 順便說一句,Lambdas 不是閉包( closures )。

你認為一切都需要成為一堂課嗎? 特別是如果你有 Java 或 C# 等語言的背景? 歡迎來了解Python 的一流功能和裝飾器( decorators )!

說到裝飾器( decorators ),你知道如何建一個裝飾器嗎?

你現在可以擴展它來創建也能接受參數的裝飾器嗎?
你了解裝飾類( decorating classes )? 或用裝飾類來裝飾功能( decorating functions )?

你知道 @wraps 裝飾器是做什麼的嗎? 你想知道它是如何達成其功用?
當你下一次遇到裝飾器時,你會明白它們是如何運作的 – 其實沒什麼神奇之處,一旦你了解了閉包( closures )是什麼、它們是如何運作的,以及如何利用它們,並了解一個事實 Python 是一種動態語言。

單一派遣通用功能?它們是什麼? 我們如何自己創建它們? 標準程式庫中有什麼?

你認為元組( tuples )只是只讀列表( read-only list )嗎? 你確定一個元組永遠不會隨著時間而改變嗎? 再次猜猜 – 我們將學習不變性( immutability )的真正意義以及變數如何映射( map )到記憶中的物件。

如何使用元組( tuples )來回饋多個值。 或者更好的是,使用已命名元組( named tuples )。 並為你的已命名元組指定預設值。

你知道模組( module )和套件( package )之間的區別嗎?命名空間套件 ( namespace packages )?

你知道你可以直接從 zip 檔案( archives )中儲存和運行你的 Python 應用嗎?

你是否了解輸入( imports ) 可以做什麼,如何能夠使用輸入( imports )控制套件的可見部分?你知道各種類型的輸入(from … import …import …, 等)之間的區別嗎?

在本系列的第 1 部分中,我們側重於變數、記憶體參照( memory references )、記憶體管理( memory management ),以及函數式程式設計( functional programming )。包含的主題如數值資料類型、布林和比較運算符、一級函數、lambda 表達式、閉包、裝飾器、內省( introspection )、作為資料結構的元組( tuples ),以及所有關於名稱空間( namespaces )、模組( modules )和套件( packages )的知識。

隨著時間的推移,本課程也會不斷增加內容,因為我一直在常見問題、陷阱和慣用 Python 中添加有用的視訊教學(請參閱附加內容部分)。如果你有特殊要求,請告訴我!

在本系列即將發佈的其他課程,我們將深入探討異常、可迭代( iterables )和迭代器( iterators )、生成器( generators )、hash maps ( dictionaries 和集合)、物件導向的概念、非同步程式設計和元程式設計( meta programming )等主題。

所有這些都在標準 Python 和標準程式庫的情境中。

每個主題通常被分為講座和實作程式時段。 Jupyter 筆記本被完全註釋並可用於每個寫程式的影片,也可通過 GitHub 儲存庫取得。

目標受眾

  • 任何對 Python 有基本了解的人,希望技術能更上一層樓並深入理解 Python 語言及其資料結構。
  • 任何準備參加深入的 Python 技術面試的人。

講師簡介

Fred Baptiste   Professional Developer and Mathematician

嗨,我叫 Fred Baptiste。

我從數學博士開始了自己的職業生涯,並且在多種技術和語言方面進行了 25 年以上的專業程式設計,包括 Python、.Net(C# 和 VB)、Java、C ++ 和 JavaScript 等,以及資料庫 包括 MS SQL Server 和 Postgres 等關聯式 SQL 資料庫( relational SQL database )以及 MongoDB、Couchbase 和Neo4j 等非 SQL資料庫。

自 2011 年以來,我一直專注於 Python,主要用於 REST API 開發以及使用後端資料庫(如SQL Server、Postgres 和 MongoDB)進行資料管理和分析。

我花了很多時間和精力學習並深入了解 Python 並編寫了慣用的 Python,我想與大家分享一下。

我絕對是一個 Python 愛好者,原因很多,我也想和你分享這種熱情!

英文字幕:無

優惠資訊

如何購買這門課程比較划算?可以參考課程合購優惠方案


報名參加課程 


Sponsored by Udemy

也許你會有興趣

 歡迎使用 e-mail 訂閱 Soft & Share 

 

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: