Time of Update: 2016-10-18
“閉包”這個詞語相信大多數學過編程的同學並不陌生,但是有時候理解起來還是有一定難度。先看定義:閉包是由函數和與其相關的引用環境組合而成的實體。比如參考資源中就有這樣的的定義:在實現深約束時,需要建立一個能顯式表示引用環境的東西,並將它與相關的子程式捆綁在一起,這樣捆綁起來的整體被稱為閉包。python閉包(closure)其實並不是什麼很複雜的東西。通俗的講就是:如果在一個內建函式裡,對在外部範圍(但不是在全域範圍)的變數進行引用,那麼內建函式就被認為是閉包(closure)。它只不過是個“內層
Time of Update: 2016-10-18
如題,代碼如下:class MemoryZipFile(object): def __init__(self): #建立記憶體檔案 self._memory_zip = StringIO.StringIO() def append_content(self, filename_in_zip, file_content): """ description: 寫常值內容到zip """ zf =
Time of Update: 2016-10-18
使用Python可以用很簡單的方法得到本機IP地址,不過在Windows和Linux下的方法稍有不一樣的,下面就來詳細介紹下:Windows下獲得IP地址的方法方法一 使用socket模組使用撥接的話,一般都有一個本地ip和一個外網ip,使用python可以很容易的得到這兩個ip 使用gethostbyname和gethostbyname_ex兩個函數可以實現#使用socket模組import socket#得到本地iplocalIP = socket.gethostbyname(socket.
Time of Update: 2016-10-18
說到分詞大家肯定一般認為是很高深的技術,但是今天作者用短短几十行代碼就搞定了,感歎python很強大啊!作者也很強大。不過這個只是正向最大匹配,沒有機器學習能力注意:使用前先要下載搜狗詞庫# -*- coding:utf-8 -*- #寫了一個簡單的支援中文的正向最大匹配的機械分詞,其它不用解釋了,就幾十行代碼#附:搜狗詞庫下載地址:http://vdisk.weibo.com/s/7RlE5 import string__dict = {} def
Time of Update: 2016-10-18
本文介紹的是以為中國的IT資深人士寫的一個簡單的資料庫,沒有我們使用的資料庫那麼強大,但是值得大家借鑒。可以用在特定環境中,更加靈活方便。資料庫的名字叫WawaDB,是用python實現的。由此可見python是灰常強大啊!簡介記錄日誌的需求一般是這樣的:只追加,不修改,寫入按時間順序寫入;大量寫,少量讀,查詢一般查詢一個時間段的資料;MongoDB的固定集合很好的滿足了這個需求,但是MongoDB占記憶體比較大,有點兒火穿蚊子,小題大做的感覺。WawaDB的思路是每寫入1000條日誌,在一個索
Time of Update: 2016-10-18
在WEB開發中經常會遇到寫檔案的情況,最常見的莫過於儲存圖片檔案。如果是檔案數量不多,那我們完全沒有必要擔心其效率問題。但是當你有大量的使用者,大量的圖片的時候,我們怎麼儲存圖片檔案,就會直接影響整個圖片儲存系統的效率。通常,有一種說法是:如1個目錄下有10000個子檔案,那麼讀取某個檔案的速度將會明顯下降。那這種說法到底正確不正確呢?下面我們來看一下: 問:為什麼單目錄下子檔案過多會影響效能?如1個目錄下有10000個子檔案,那麼讀取某個檔案的速度將會明顯慢下來?這和檔案索引有關嗎?索引中如
Time of Update: 2016-10-18
Python和其他指令碼語言通常會被摒棄,因為它們相對於一些類似於C語言的編譯型的語言來說效率很低。比如下面的費伯納西數的例子:C語言中:int fib(int n){ if (n Python中:def fib(n): if n 下面是它們各自的執行時間:$ time ./fib3.099s $ time python fib.py16.655s和預期的一樣,在這個例子中C語言的執行效率要比Python快5倍。在網路抓取的情況下,執行速度並不是很重要因為瓶頸在於I/O -
Time of Update: 2016-10-18
map2=lambda f,seq: [] if seq==[] else [f(seq[0])] + map2(f, seq[1:]) filter2=lambda f, seq: [] if seq==[] else ( [seq[0]]+filter2(f, seq[1:]) if f(seq[0]) else filter2(f, seq[1:]) ) reduce2=lambda f,seq,x: x if seq==[] else reduce2(f, seq[1:], f(x,
Time of Update: 2016-10-18
一個月前心血來潮用python實現了一個簡單的douban.fm用戶端,計劃是陸續將其完善成為Ubuntu下可替代web版本的douban.fm用戶端。但後來因為事多,被一直擱著,沒有再繼續完善。就在昨天,一位園友在評論中提到了登入的實現,雖然最近依然事多,但突然很想實現這個功能。正好,前幾天因為一些需要,曾用python實現過網站登入,約摸估計這douban.fm的登入不會差太多。關於網站身分識別驗證http協議被設計為無連線協定,但現實中,很多網站需要對使用者進行身份識別,cookie就是為
Time of Update: 2016-10-18
學了python以後,知道python的抓取功能其實是非常強大的,當然不能浪費,呵呵。我平時很喜歡美女圖,呵呵,程式員很苦悶的,看看美女,養養眼,增加點樂趣。好,那就用python寫一個美女圖自動抓取程式吧~~其中用到urllib2模組和Regex模組。下面直接上代碼:用python批量抓取美女圖片#!/usr/bin/env python#-*- coding: utf-8 -*-#通過urllib(2)模組下載網路內容import
Time of Update: 2016-10-18
今天在使用python中的json轉換碰到一個問題:接收一個post的json字串:s={"username":"admin","password":"password","tenantid":""}使用python內建的json庫import json>>> a=json.loads(s)Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/json/__init__.py",
Time of Update: 2016-10-18
thrift 是facebook開發並開源的一個二進位通訊中介軟體,通過thrift,我們可以充分利用各個語言的優勢,編寫高效的代碼。關於thrift的論文:http://pan.baidu.com/share/link?shareid=234128&uk=3238841275安裝thrift:http://thrift.apache.org/docs/install/ubuntu/安裝完成後到hbase的目錄下,找到Hbase.thrift,該檔案在hbase-0.94.4/src/main/
Time of Update: 2016-10-18
幾乎所有的微薄都提供了縮短網址的服務,其原理就是將一個url地址按照一定的演算法產生一段字串,然後加在一個短網域名稱後面邊成了一個新的url地址,資料庫中會存放這個短地址和原始的地址,當使用者點擊這個新的短地址後,短地址服務會根據短網域名稱後面的幾個字串從資料庫中讀出原來的地址然後頁面進行跳轉 。比如新浪微薄中的url 是 http://t.cn/xxxxxxx t.cn是其網域名稱
Time of Update: 2016-10-18
說道爬蟲大家或許感覺非常神秘,其實它沒有我們想象的那麼神奇(當然,google和baidu的爬蟲是一場複雜和強大的,它的強大不是爬蟲本身強大,而是背景資料處理和資料採礦演算法非常強大),今天我們就來揭開它神秘的面紗。呵呵,簡單兩步就可以實現一個網頁天氣爬蟲程式。。。爬蟲簡單說來包括兩個部分:1.獲得網頁文本資訊。2.資料分析,擷取其中我們想要的資料。1、獲得網頁文本資訊。python在擷取html方面十分方便,有了urllib庫的協助,只需要幾行代碼就可以實現我們需要的功能。#引入urllib庫
Time of Update: 2016-10-18
發郵件是大家工作中最常用到的。今天來看一下怎麼用python來發送和內送郵件。python實現發送和內送郵件功能主要用到poplib和smtplib模組。poplib用於內送郵件,而smtplib負責發送郵件。代碼如下:#! /usr/bin/env python#coding=utf-8import sys import time import poplib import smtplib #郵件發送函數def send_mail(): try: handle =
Time of Update: 2016-10-18
python網頁抓取功能非常強大,使用urllib或者urllib2可以很輕鬆的抓取網頁內容。但是很多時候我們要注意,可能很多網站都設定了防採集功能,不是那麼輕鬆就能抓取到想要的內容。今天我來分享下載python2和python3中都是如何來類比瀏覽器來跳過屏蔽進行抓取的。最基礎的抓取:#! /usr/bin/env python# -*- coding=utf-8 -*-# @Author pythontabimport urllib.requesturl =
Time of Update: 2016-10-18
在web開發中經常用到驗證碼,為了防止機器人註冊或者惡意登陸和查詢等,作用不容小覷但是驗證碼其實不是一個函數就能搞定的,它需要產生圖片和浮水印,其實每種語言都有相關的函數產生圖片和文字浮水印。包括我熟悉的php,呵呵,今天主要來分享如何用python產生驗證碼。python產生驗證碼主要用到如下模組:Image, ImageDraw, ImageFont, ImageFilter和隨機數產生模組Random。代碼如下:#!/usr/bin/env
Time of Update: 2016-10-18
在一些python小型應用程式中,不需要關係型資料庫時,可以方便的用持久字典來儲存成對的名稱和數值,它與python的字典非常類似,主要區別在於資料是在磁碟讀取和寫入的。另一個區別在於dbm的鍵和值必須是字串類型。1.選擇dbm模組python支援很多dbm模組,遺憾的是,每個dbm模組建立的檔案不相容。下表列出這些模組:模組說明dbm選擇最好的dbm模組dbm.dumb使用dbm庫的一個簡單但可移植的實現dbm.gnu使用GNU dbm的庫一般除非某個dbm庫有特殊進階功能,那就用dbm模組。
Time of Update: 2016-10-18
mysql-python的串連時,預設大家會寫成con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,charset='gbk')一旦指定了"gbk",預設mysql-python會設定use_unicode=True。結果是mysql-python會利用python自己的
Time of Update: 2016-10-18
使用smtplib時,開啟的server,最好使用quit方法來關閉串連,而不是close。server.quit() #好#server.close() #不好因為quit不僅僅會關閉串連,還會關閉session。這個session會跨越串連,而且當這個session中有退信發生時,後續發出的信件會爆出奇怪的SMTP協議錯誤。使用smtplib時,即便每次都重新open server,對dns的解析也只有一次,這樣當一個網域名稱下有多個smtp