99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀16個你絕不知道的Python神奇技能
16個你絕不知道的Python神奇技能
2015-11-26
收藏

16個你絕不知道的Python神奇技能

| Andrew Liu

 

顯示有限的接口到外部

當發(fā)布python第三方package時, 并不希望代碼中所有的函數(shù)或者class可以被外部import, 在__init__.py中添加__all__屬性,

 

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

 


 

with的魔力

with語句需要支持上下文管理協(xié)議的對象, 上下文管理協(xié)議包含__enter____exit__兩個方法. with語句建立運行時上下文需要通過這兩個方法執(zhí)行進入和退出操作.

 

其中上下文表達式是跟在with之后的表達式, 該表示大返回一個上下文管理對象

 

 

詳細原理可以查看這篇文章, 淺談 Python with 語句

 

知道具體原理, 我們可以自定義支持上下文管理協(xié)議的類, 類中實現(xiàn)__enter____exit__方法

 

 

執(zhí)行結果如下:

 

證明了會先執(zhí)行__enter__方法, 然后調用with內的邏輯, 最后執(zhí)行__exit__做退出處理, 并且, 即使出現(xiàn)異常也能正常退出

 

filter的用法

相對filter而言, mapreduce使用的會更頻繁一些, filter正如其名字, 按照某種規(guī)則過濾掉一些元素

 

 

一行作判斷

當條件滿足時, 返回的為等號后面的變量, 否則返回else后語句

 

 

裝飾器之單例

使用裝飾器實現(xiàn)簡單的單例模式

 

 

staticmethod裝飾器

·          

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

·          

 

·          

普通成員函數(shù), 其中第一個隱式參數(shù)為對象

·          

 

·          

classmethod裝飾器, 類方法(給人感覺非常類似于OC中的類方法), 其中第一個隱式參數(shù)為類

·          

 

·          

staticmethod裝飾器, 沒有任何隱式參數(shù). python中的靜態(tài)方法類似與C++中的靜態(tài)方法

·          

 

 

property裝飾器

定義私有類屬性

 

property與裝飾器結合實現(xiàn)屬性私有化(更簡單安全的實現(xiàn)getset方法)

 

 

fget是獲取屬性的值的函數(shù),fset是設置屬性值的函數(shù),fdel是刪除屬性的函數(shù),doc是一個字符串(like a comment).從實現(xiàn)來看,這些參數(shù)都是可選的

 

property有三個方法getter(), setter()delete() 來指定fget, fsetfdel。 這表示以下這行

 

 

iter魔法

通過yield__iter__的結合, 我們可以把一個對象變成可迭代的

 

通過__str__的重寫, 可以直接通過想要的形式打印對象

 

 

神奇partial

partial使用上很像C++中仿函數(shù)(函數(shù)對象).

 

stackoverflow給出了類似與partial的運行方式

 

 

 

利用用閉包的特性綁定預先綁定一些函數(shù)參數(shù), 返回一個可調用的變量, 直到真正的調用執(zhí)行

 

 

神秘eval

eval我理解為一種內嵌的python解釋器(這種解釋可能會有偏差), 會解釋字符串為對應的代碼并執(zhí)行, 并且將執(zhí)行結果返回

 

看一下下面這個例子

 

 

exec

·          

exec在Python中會忽略返回值, 總是返回None, eval會返回執(zhí)行代碼或語句的返回值

·          

 

·          

exec和eval在執(zhí)行代碼時, 除了返回值其他行為都相同

·          

 

·          

在傳入字符串時, 會使用compile(source, '<string>'mode)編譯字節(jié)碼. mode的取值為execeval

·          

 

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 objects 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ā)一張網(wǎng)上的圖, 然后差文檔就好了, 這個是記不住的

 

 

字符串格式化

一個非常好用, 很多人又不知道的功能

 

 

來自:http://andrewliu.in/2015/11/14/Python%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/

 

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師考試動態(tài)
數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }