Time of Update: 2017-01-19
一個帶有 yield 的函數就是一個 generator,它和普通函數不同,產生一個 generator 看起來像函數調用,但不會執行任何函數代碼,直到對其調用 next()(在 for 迴圈中會自動調用 next())才開始執行。雖然執行流程仍按函數的流程執行,但每執行到一個 yield 語句就會中斷,並返回一個迭代值,下次執行時從 yield 的下一個語句繼續執行。看起來就好像一個函數在正常執行的過程中被 yield 中斷了數次,每次中斷都會通過 yield 返回當前的迭代值。yield
Time of Update: 2017-01-19
效果圖如下:圖1(頭像圖片剪成圓形的,其他為透明) 圖2(給圖片的4個角加橢圓)以前沒處理過,處理起來真是有點費力呀。用到的模組:複製代碼 代碼如下:import os, mathimport Imageimport ImageDraw1 頭像圖片剪成圓形的,其他為透明搜尋了好久,沒有找到比較好的方法,有個部落格(不好意思,忘記部落格地址了)用了一個比較詭異的方法,我試了一下,除了處理jpg圖片沒有格式轉換,其他的都沒有問題,我當時就先按照那個方法來了複製代碼 代碼如下:def circle()
Time of Update: 2017-01-19
1.DNS查詢過程:以查詢 www.baidu.com為例(1)電腦向本地區名伺服器發送解析www.baidu.com的請求(2)本地區名伺服器收到請求後,先查詢本地的緩衝,如果找到直接返回查詢結果,如果沒有該記錄,本地區名伺服器把www.baidu.com的請求發送給根網域名稱伺服器(3)根網域名稱伺服器收到請求後,把.com域的伺服器IP地址返回給本地區名伺服器(4)本地區名伺服器串連.com伺服器,向其請求解析網域名稱www.baidu.com,
Time of Update: 2017-01-19
1.TCP是一種連線導向的可靠地協議,在一方發送資料之前,必須在雙方之間建立一個串連,建立的過程需要經過三向交握,通訊完成後要拆除串連,需要經過四次握手,這是由TCP的半關閉造成的,一方在完成資料發送後要發送一個FIN來終止這個方向的串連,一個TCP串連在收到一個FIN後仍能發送資料,但應用程式很少這麼做,下面是TCP串連建立和拆除的過程:2.python可以實現TCP伺服器和用戶端的編程,下面是代碼:伺服器端:複製代碼 代碼如下:#!/usr/bin/env pythonimport
Time of Update: 2017-01-19
UDP廣泛應用於需要相互傳輸資料的網路應用中,如QQ使用的就是UDP協議。在網路品質不好的情況下,使用UDP協議時丟包現象十分嚴重,但UDP佔用資源少,處理速度快,UDP依然是傳輸資料時常用的協議。下面是用python實現UDP伺服器的代碼:複製代碼 代碼如下:#!/usr/bin/env pythonimport
Time of Update: 2017-01-19
這篇文章中的內容是來源於去年我用美國的VPS搭建部落格的初始階段,那是有很多惡意訪問,我就根據access log中的源IP來進行了很多統計,同時我也將訪問量最高的惡意訪問的源IP拿來查詢其地理位置資訊。所以,我就用到了根據IP查詢地理位置資訊的一些東西,現在將這方面積累的一點東西共用出來。根據IP查詢所在地、電訊廠商等資訊的一些API如下(根據我有限的一點經驗):1. 淘寶的API(推薦):http://ip.taobao.com/service/getIpInfo.php?ip=110.84
Time of Update: 2017-01-19
去年自己寫過一個程式時,不太確定自己的記憶體使用量量,就想找寫工具來列印程式或函數的記憶體使用量量。這裡將上次找到的2個記憶體偵查工具的基本用法記錄一下,今後分析Python程式記憶體使用量量時也是需要的。memory_profiler模組(與psutil一起使用)註:psutil這模組,我太喜歡了,它實現了很多Linux命令的主要功能,如:ps, top, lsof, netstat, ifconfig, who, df, kill, free 等等。範例程式碼(https://github.
Time of Update: 2017-01-19
做伺服器端開發的同學應該都對進程監控不會陌生,最近恰好要更換 uwsgi 為
Time of Update: 2017-01-19
python寫的GTK程式,會有這樣一個怪現象,本來在cmd下用 python xxx.py 啟動,還好好的,但是用py2exe編譯以後,再用subprocess調用命令列程式的時候,就發現一個黑乎乎的cmd視窗跳出來了,特別難看,要消除它其實也還比較容易,但是要使用startupinfo這個windows only的參數,以下代碼是linux和windows通用的例子:複製代碼 代碼如下:if os.name == 'nt': startupinfo =
Time of Update: 2017-01-19
說socket代理之前,先來說說http代理,python的urllib2是內建http代理功能的,可以用如下代碼實現:複製代碼 代碼如下:proxy_handler = urllib2.ProxyHandler({'http' : 'http://地址:連接埠'})opener = urllib2.build_opener(proxy_handler,
Time of Update: 2017-01-19
考慮以下python程式:複製代碼 代碼如下:#!/usr/bin/env pythonimport syssys.stdout.write("stdout1 ")sys.stderr.write("stderr1 ")sys.stdout.write("stdout2 ")sys.stderr.write("stderr2 ")其中的sys.stdout.write也可以換成print。運行這程式,你覺得會輸出什嗎?實驗一下,就會發現,其實輸出並不是複製代碼 代碼如下:stdout1
Time of Update: 2017-01-19
python以其優美的文法和方便的內建資料結構,贏得了不少程式員的親睞。其中有個很有用的資料結構,就是字典(dict),使用非常簡單。說到遍曆一個dict結構,我想大多數人都會想到 for key in dictobj 的方法,確實這個方法在大多數情況下都是適用的。但是並不是完全安全,請看下面這個例子:複製代碼 代碼如下:#這裡初始化一個dict>>> d = {'a':1, 'b':0, 'c':1,
Time of Update: 2017-01-19
工作中,經常會有用python訪問各種資料庫的需求,比如從oracle讀點設定檔或者往mysql寫點結果資訊之類的。這裡列一下可能用到的各個模組。sqlite3: 內建模組用sqlite,有時候確實很方便,我覺得它確實做到了宣稱的“零配置”。python自2.5版以來,就內建了對sqlite3的支援,使用也非常簡單,按照文檔上來:複製代碼 代碼如下:#開啟db檔案,獲得串連conn = sqlite3.connect('資料檔案名')#獲得遊標c =
Time of Update: 2017-01-19
縮排Python最具特色的是用縮排來標明成塊的代碼。我下面以if選擇結構來舉例。if後面跟隨條件,如果條件成立,則執行歸屬於if的一個代碼塊。先看C語言的表達方式(注意,這是C,不是Python!)複製代碼 代碼如下:if ( i > 0 ){ x = 1; y = 2;}如果i >
Time of Update: 2017-01-19
Python的運算子和其他語言類似(我們暫時只瞭解這些運算子的基本用法,方便我們展開後面的內容,進階應用程式暫時不介紹)數學運算複製代碼 代碼如下:>>>print 1+9 # 加法>>>print 1.3-4 # 減法>>>print
Time of Update: 2017-01-19
sequence 序列sequence(序列)是一組有順序的元素的集合(嚴格的說,是對象的集合,但鑒於我們還沒有引入“對象”概念,暫時說元素)序列可以包含一個或多個元素,也可以沒有任何元素。我們之前所說的基礎資料型別 (Elementary Data Type),都可以作為序列的元素。元素還可以是另一個序列,以及我們以後要介紹的其他對象。序列有兩種:tuple(定值表; 也有翻譯為元組) 和 list (表)複製代碼 代碼如下:>>>s1 = (2, 1.3, 'love',
Time of Update: 2017-01-19
簡單的資料類型以及賦值變數不需要聲明Python的變數不需要聲明,你可以直接輸入:複製代碼 代碼如下:>>>a = 10那麼你的記憶體裡就有了一個變數a, 它的值是10,它的類型是integer (整數)。 在此之前你不需要做什麼特別的聲明,而資料類型是Python自動決定的。複製代碼 代碼如下:>>>print a>>>print type(a)那麼會有如下輸出複製代碼 代碼如下:10<type
Time of Update: 2017-01-19
tempfile.TemporaryFile如何你的應用程式需要一個臨時檔案來儲存資料,但不需要同其他程式共用,那麼用TemporaryFile函數建立臨時檔案是最好的選擇。其他的應用程式是無法找到或開啟這個檔案的,因為它並沒有引用檔案系統表。用這個函數建立的臨時檔案,關閉後會自動刪除。執行個體一:複製代碼 代碼如下:import osimport tempfileprint 'Building a file name yourself:'filename =
Time of Update: 2017-01-19
模組層級函數logging.getLogger([name]):返回一個logger對象,如果沒有指定名字將返回root loggerlogging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():設定root logger的記錄層級logging.basicConfig():用預設Formatter為日誌系統建立一個StreamHandler,設定基礎配置並加到root logger中樣本:
Time of Update: 2017-01-19
基本定製型複製代碼 代碼如下:C.__init__(self[, arg1, ...]) 構造器(帶一些可選的參數)C.__new__(self[, arg1, ...]) 構造器(帶一些可選的參數);通常用在設定不變資料類型的子類。C.__del__(self) 解構器C.__str__(self) 可列印的字元輸出;內建str()及print 語句C.__repr__(self) 運行時的字串輸出;內建repr() 和‘‘ 操作符C.__unicode__(self)b Unicode