天天看點

Python奇技淫巧你知道多少?

顯示有限的接口到外部

當釋出python第三方package時, 并不希望代碼中所有的函數或者class可以被外部import, 在​

​__init__.py​

​中添加​

​__all__​

​屬性,

該list中填寫可以import的類或者函數名, 可以起到限制的import的作用, 防止外部import其他函數或者類

Python奇技淫巧你知道多少?

執行結果如下:

Python奇技淫巧你知道多少?
證明了會先執行​

​__enter__​

​方法, 然後調用with内的邏輯, 最後執行​

​__exit__​

​做退出處理, 并且, 即使出現異常也能正常退出

filter的用法

相對​

​filter​

​而言, map和reduce使用的會更頻繁一些, ​

​filter​

​正如其名字, 按照某種規則​

​過濾​

​掉一些元素

Python奇技淫巧你知道多少?

一行作判斷

當條件滿足時, 傳回的為等号後面的變量, 否則傳回else後語句

Python奇技淫巧你知道多少?

裝飾器之單例

使用裝飾器實作簡單的單例模式

Python奇技淫巧你知道多少?

staticmethod裝飾器

類中兩種常用的裝飾, 首先區分一下他們

  • 普通成員函數, 其中第一個隐式參數為​

    ​對象​

  • ​classmethod裝飾器​

    ​, 類方法(給人感覺非常類似于OC中的類方法), 其中第一個隐式參數為​

    ​類​

  • ​staticmethod裝飾器​

    ​, 沒有任何隐式參數. ​

    ​python中的靜态方法類似與C++中的靜态方法​

Python奇技淫巧你知道多少?

property裝飾器

  • 定義私有類屬性

将​

​property​

​與裝飾器結合實作屬性私有化(​

​更簡單安全的實作get和set方法​

​)#python内建函數property(fget=None, fset=None, fdel=None, doc=None)​

​fget​

​是擷取屬性的值的函數,​

​fset​

​是設定屬性值的函數,​

​fdel​

​是删除屬性的函數,​

​doc​

​是一個字元串(like a comment).從實作來看,這些參數都是可選的property有三個方法​

​getter()​

​, ​

​setter()​

​和​

​delete()​

​ 來指定fget, fset和fdel。這表示以下這行

Python奇技淫巧你知道多少?

iter魔法

  • 通過yield和​

    ​__iter__​

    ​的結合, 我們可以把一個對象變成可疊代的
  • 通過​

    ​__str__​

    ​的重寫, 可以直接通過想要的形式列印對象
Python奇技淫巧你知道多少?

神奇partial

partial使用上很像C++中仿函數(函數對象).在stackoverflow給出了類似與partial的運作方式

Python奇技淫巧你知道多少?

利用用閉包的特性綁定預先綁定一些函數參數, 傳回一個可調用的變量, 直到真正的調用執行

Python奇技淫巧你知道多少?

神秘eval

eval我了解為一種内嵌的python解釋器(這種解釋可能會有偏差), 會解釋字元串為對應的代碼并執行, 并且将執行結果傳回看一下下面這個例子

Python奇技淫巧你知道多少?

exec

  • exec在Python中會忽略傳回值, 總是傳回None, eval會傳回執行代碼或語句的傳回值
  • ​exec​

    ​和​

    ​eval​

    ​在執行代碼時, 除了傳回值其他行為都相同
  • 在傳入字元串時, 會使用​

    ​compile(source, '<string>', mode)​

    ​編譯位元組碼. mode的取值為​

    ​exec​

    ​和​

    ​eval​

Python奇技淫巧你知道多少?

etattr

​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

Python奇技淫巧你知道多少?

指令行處理

Python奇技淫巧你知道多少?

讀寫csv檔案

Python奇技淫巧你知道多少?

各種時間形式轉換

隻發一張網上的圖, 然後差文檔就好了, 這個是記不住的

Python奇技淫巧你知道多少?

字元串格式化

一個非常好用, 很多人又不知道的功能>>> name = "andrew">>> "my name is {name}".format(name=name)'my name is andrew'

作者:code123

背景回複關鍵字:1024,擷取一份精心整理的技術幹貨背景回複關鍵字:進群,帶你進入高手如雲的交流群。推薦閱讀      

這是一個能學到技術的公衆号,歡迎關注