
16個你絕不知道的Python神奇技能
文 | Andrew Liu
顯示有限的接口到外部
當發(fā)布python第三方package時, 并不希望代碼中所有的函數或者class可以被外部import, 在__init__.py中添加__all__屬性,
該list中填寫可以import的類或者函數名, 可以起到限制的import的作用, 防止外部import其他函數或者類
with的魔力
with語句需要支持上下文管理協(xié)議的對象, 上下文管理協(xié)議包含__enter__和__exit__兩個方法. with語句建立運行時上下文需要通過這兩個方法執(zhí)行進入和退出操作.
其中上下文表達式是跟在with之后的表達式, 該表示大返回一個上下文管理對象
詳細原理可以查看這篇文章, 淺談 Python 的 with 語句
知道具體原理, 我們可以自定義支持上下文管理協(xié)議的類, 類中實現__enter__和__exit__方法
執(zhí)行結果如下:
證明了會先執(zhí)行__enter__方法, 然后調用with內的邏輯, 最后執(zhí)行__exit__做退出處理, 并且, 即使出現異常也能正常退出
filter的用法
相對filter而言, map和reduce使用的會更頻繁一些, filter正如其名字, 按照某種規(guī)則過濾掉一些元素
一行作判斷
當條件滿足時, 返回的為等號后面的變量, 否則返回else后語句
裝飾器之單例
使用裝飾器實現簡單的單例模式
staticmethod裝飾器
·
類中兩種常用的裝飾, 首先區(qū)分一下他們
·
·
普通成員函數, 其中第一個隱式參數為對象
·
·
classmethod裝飾器, 類方法(給人感覺非常類似于OC中的類方法), 其中第一個隱式參數為類
·
·
staticmethod裝飾器, 沒有任何隱式參數. python中的靜態(tài)方法類似與C++中的靜態(tài)方法
·
property裝飾器
定義私有類屬性
將property與裝飾器結合實現屬性私有化(更簡單安全的實現get和set方法)
fget是獲取屬性的值的函數,fset是設置屬性值的函數,fdel是刪除屬性的函數,doc是一個字符串(like a comment).從實現來看,這些參數都是可選的
property有三個方法getter(), setter()和delete() 來指定fget, fset和fdel。 這表示以下這行
iter魔法
通過yield和__iter__的結合, 我們可以把一個對象變成可迭代的
通過__str__的重寫, 可以直接通過想要的形式打印對象
神奇partial
partial使用上很像C++中仿函數(函數對象).
在stackoverflow給出了類似與partial的運行方式
利用用閉包的特性綁定預先綁定一些函數參數, 返回一個可調用的變量, 直到真正的調用執(zhí)行
神秘eval
eval我理解為一種內嵌的python解釋器(這種解釋可能會有偏差), 會解釋字符串為對應的代碼并執(zhí)行, 并且將執(zhí)行結果返回
看一下下面這個例子
exec
·
exec在Python中會忽略返回值, 總是返回None, eval會返回執(zhí)行代碼或語句的返回值
·
·
exec和eval在執(zhí)行代碼時, 除了返回值其他行為都相同
·
·
在傳入字符串時, 會使用compile(source, '<string>', mode)編譯字節(jié)碼. mode的取值為exec和eval
·
getattr
getattr(object, name[, default])Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, ‘foobar’) is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.
通過string類型的name, 返回對象的name屬性(方法)對應的值, 如果屬性不存在, 則返回默認值, 相當于object.name
命令行處理
讀寫csv文件
各種時間形式轉換
只發(fā)一張網上的圖, 然后差文檔就好了, 這個是記不住的
字符串格式化
一個非常好用, 很多人又不知道的功能
來自:http://andrewliu.in/2015/11/14/Python%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數的日期轉換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數據處理中,日期格式轉換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數據庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數據分析師:表結構數據 “獲取 - 加工 - 使用” 全流程的賦能者 表結構數據(如數據庫表、Excel 表、CSV 文件)是企業(yè)數字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數據分析師:解鎖表結構數據特征價值的專業(yè)核心 表結構數據(以 “行 - 列” 規(guī)范存儲的結構化數據,如數據庫表、Excel 表、 ...
2025-09-17Excel 導入數據含缺失值?詳解 dropna 函數的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數據時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數據分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數據差異是否 “ ...
2025-09-16CDA 數據分析師:掌控表格結構數據全功能周期的專業(yè)操盤手 表格結構數據(以 “行 - 列” 存儲的結構化數據,如 Excel 表、數據 ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數據分析師:激活表格結構數據價值的核心操盤手 表格結構數據(如 Excel 表格、數據庫表)是企業(yè)最基礎、最核心的數據形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數據爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數據的科學計數法問題 為幫助 Python 數據從業(yè)者解決pd.read_csv讀取長浮點數據時的科學計數法問題 ...
2025-09-12CDA 數據分析師:業(yè)務數據分析步驟的落地者與價值優(yōu)化者 業(yè)務數據分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數據把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數據驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數據分析師與戰(zhàn)略 / 業(yè)務數據分析:概念辨析與協(xié)同價值 在數據驅動決策的體系中,“戰(zhàn)略數據分析”“業(yè)務數據分析” 是企業(yè) ...
2025-09-11Excel 數據聚類分析:從操作實踐到業(yè)務價值挖掘 在數據分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數據中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數據解讀到決策支撐的價值導向 統(tǒng)計模型作為數據分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10