Time of Update: 2017-01-19
本文有兩個目的: 一是講述實現電腦語言解譯器的通用方法,另外一點,著重展示如何使用Python來實現Lisp方言Scheme的一個子集。我將我的解譯器稱之為Lispy (lis.py)。幾年前,我介紹過如何使用Java編寫一個Scheme解譯器,同時我還使用Common Lisp語言編寫過一個版本。這一次,我的目的是儘可能簡單明了地示範一下Alan Kay所說的“軟體的麥克斯韋方程組” (Maxwell's Equations of
Time of Update: 2017-01-19
(ob1 is ob2) 等價於 (id(ob1) == id(ob2))首先id函數可以獲得對象的記憶體位址,如果兩個對象的記憶體位址是一樣的,那麼這兩個對象肯定是一個對象。和is是等價的。Python原始碼為證。 static PyObject * cmp_outcome(int op, register PyObject *v, register PyObject *w){ int res = 0; switch (op) { case PyCmp_IS: res = (v ==
Time of Update: 2017-01-19
我們將會看到一些在Python中使用線程的執行個體和如何避免線程之間的競爭。你應當將下邊的例子運行多次,以便可以注意到線程是不可預測的和線程每次運行出的不同結果。聲明:從這裡開始忘掉你聽到過的關於GIL的東西,因為GIL不會影響到我想要展示的東西。樣本1我們將要請求五個不同的url:單線程 import timeimport urllib2 def get_responses(): urls = [ 'http://www.google.com',
Time of Update: 2017-01-19
如果你是我的長期讀者,那麼你應該知道我在尋找一個完美備份程式,最後我寫了一個基於bup的我自己的加密層。在寫encbup的時候,我對僅僅恢複一個檔案就必須要下載整個巨大的檔案檔案的做法不甚滿意,但仍然希望能將EncFS和 rdiff-backup一起使用來實現可遠程掛載、加密、去重、版本化備份的功能。再次試用obnam 後(囉嗦一句:它還是慢的出奇),我注意到了它有一個mount命令。深入研究後,我發現了fuse-python和fusepy,感覺用Python寫一個FUSE檔案系統應該挺簡單的。
Time of Update: 2017-01-19
我們曾經提到,Oyster.com的Python web伺服器怎樣利用一個巨大的Python dicts(hash table),緩衝大量的靜態資源。我們最近在Image類中,用僅僅一行__slots__代碼,讓每個6G記憶體佔用的服務進程(共4個),省出超過2G來。這是其中一個伺服器在部署代碼前後的截圖:我們alloc了大約一百萬個類似如下class的執行個體: class Image(object): def __init__(self, id,
Time of Update: 2017-01-19
我們將使用Python線程來解決Python中的生產者—消費者問題。這個問題完全不像他們在學校中說的那麼難。如果你對生產者—消費者問題有瞭解,看這篇部落格會更有意義。為什麼要關心生產者—消費者問題: 可以幫你更好地理解並發和不同概念的並發。 資訊隊列中的實現中,一定程度上使用了生產者—消費者問題的概念,而你某些時候必然會用到訊息佇列。當我們在使用線程時,你可以學習以下的線程概念:
Time of Update: 2017-01-19
什麼是method?function就是可以通過名字可以調用的一段代碼,我們可以傳參數進去,得到傳回值。所有的參數都是明確的傳遞過去的。method是function與對象的結合。我們調用一個方法的時候,有些參數是隱含的傳遞過去的。下文會詳細介紹。instancemethod In [5]: class Human(object): ...: def __init__(self, weight): ...: self.weight = weight ...:
Time of Update: 2017-01-19
如果不首先想想這句Knuth的名言,就開始進行最佳化工作是不明智的。可是,你很快寫出來加入一些特性的代碼,可能會很醜陋,你需要注意了。這篇文章就是為這時候準備的。那麼接下來就是一些很有用的工具和模式來快速最佳化Python。它的主要目的很簡單:儘快發現瓶頸,修複它們並且確認你修複了它們。寫一個測試在你開始最佳化前,寫一個進階測試來證明原來代碼很慢。你可能需要採用一些最小值資料集來複現它足夠慢。通常一兩個顯示運行時秒的程式就足夠處理一些改進的地方了。有一些基礎測試來保證你的最佳化沒有改變原有代碼的
Time of Update: 2017-01-19
對於程式開發新手來說,一個最常見的困惑是測試的主題。他們隱約覺得“單元測試”是很好的,而且他們也應該做單元測試。但他們卻不懂這個詞的真正含義。如果這聽起來像是在說你,不要怕!在這篇文章中,我將介紹什麼是單元測試,為什麼它有用,以及如何對Python的代碼進行單元測試。什麼是測試?在討論為什麼測試很有用、怎樣進行測試之前,讓我們先花幾分鐘來定義一下“單元測試”究竟是什麼。在一般的編程術語中,“測試”指的是通過編寫可以調用的代碼(獨立於你實際應用程式的代碼)來協助你確定程式中是否有錯誤。這並不能證明
Time of Update: 2017-01-19
Stickyworld 的網頁應用已經可使用視訊撥放一段時間,但都是通過YouTube的嵌入模式實現。我們開始提供新的版本可使用視訊操作,可以讓我們的使用者不用受制於YouTube的服務。我過去曾經參與過一個項目,客戶需要視頻轉碼功能,這實在不是個容易達成的需求。需要大量的讀取每一個視頻、音訊與視頻容器的格式再輸出符合網頁使用與喜好的視頻格式。考慮到這一點,我們決定將轉碼的工作交給 Encoding.com
Time of Update: 2017-01-19
眾所周知,Python的平行處理能力很不理想。我認為如果不考慮線程和GIL的標準參數(它們大多是合法的),其原因不是因為技術不到位,而是我們的使用方法不恰當。大多數關於Python線程和多進程的教材雖然都很出色,但是內容繁瑣冗長。它們的確在開篇鋪陳了許多有用資訊,但往往都不會涉及真正能提高日常工作的部分。經典例子DDG上以“Python threading tutorial
Time of Update: 2017-01-19
翻譯自StackOverflow中一個關於Python異常處理的問答。問題:為什麼“except:pass”是一個不好的編程習慣?我時常在StackOverflow上看到有人評論關於except: pass的使用,他們都提到這是一個不好的Python編程習慣,應該避免。可我想知道為什嗎?有時候我並不在意出現的錯誤,而是只想讓我的程式繼續進行下去。就像這樣: try: somethingexcept:
Time of Update: 2017-01-19
綜述 多線程是程式設計中的一個重要方面,尤其是在伺服器Deamon程式方面。無論何種系統,線程調度的開銷都比傳統的進程要快得多。 Python可以方便地支援多線程。可以快速建立線程、互斥鎖、訊號量等等元素,支援線程讀寫同步互斥。美中不足的是,Python的運行在Python 虛擬機器上,建立的多線程可能是虛擬線程,需要由Python虛擬機器來輪詢調度,這大大降低了Python多線程的可用性。希望高版本的Python可以
Time of Update: 2017-01-19
Flask-Admin是一個功能齊全、簡單易用的Flask擴充,讓你可以為Flask應用程式增加管理介面。它受django-admin包的影響,但用這樣一種方式實現,開發人員擁有最終應用程式的外觀、感覺和功能的全部控制權。本文是關於Flask-Admin庫的快速入門。本文假設讀者預先具有一些Flask架構的知識。 介紹 初始化 增加視圖 &
Time of Update: 2017-01-19
線程池的概念是什嗎?在物件導向編程中,建立和銷毀對象是很費時間的,因為建立一個對象要擷取記憶體資源或者其它更多資源。在Java中更是 如此,虛擬機器將試圖跟蹤每一個對象,以便能夠在對象銷毀後進行記憶體回收。所以提高服務程式效率的一個手段就是儘可能減少建立和銷毀對象的次數,特別是一些
Time of Update: 2017-01-19
本文執行個體講述了python實現根據使用者輸入從電影網站擷取影片資訊的方法。分享給大家供大家參考。具體如下:這段python代碼主要示範了使用者終端輸入,Regex,網頁抓取等#!/usr/bin/env python27#Importing the modulesfrom BeautifulSoup import BeautifulSoupimport sysimport urllib2import reimport json#Ask for movie titletitle =
Time of Update: 2017-01-19
本文執行個體講述了python中列表元素串連方法join用法。分享給大家供大家參考。具體分析如下:建立列表:>>> music = ["Abba","Rolling Stones","Black Sabbath","Metallica"]>>> print music輸出:['Abba', 'Rolling Stones', 'Black Sabbath', 'Metallica']通過join函數通過空格串連列表中的元素:>>>
Time of Update: 2017-01-19
filter(function or None, sequence),其中sequence 可以是list ,tuple,string。這個函數的功能是過濾出sequence 中所有以元素自身作...filter(function or None, sequence),其中sequence 可以是list ,tuple,string。這個函數的功能是過濾出sequence 中所有以元素自身作為參數調用function時返回True或bool(傳回值)為True的元素並以列表返回.
Time of Update: 2017-01-19
在Python中,變數是沒有類型的,這和以往看到的大部分編輯語言都不一樣。在使用變數的時候,不需要提前聲明,只需要給這個變數賦值即可。但是,當用變數的時候,必須要給這個變數賦值;如果唯寫一個變數,而沒有賦值,那麼Python認為這個變數沒有定義。如下: >>> aTraceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'a'
Time of Update: 2017-01-19
在資料分析領域,最熱門的莫過於Python和R語言,此前有一篇文章《別老扯什麼Hadoop了,你的資料根本不夠大》指出:只有在超過5TB資料量的規模下,Hadoop才是一個合理的技術選擇。這次拿到近億條日誌資料,千萬級資料已經是關係型資料庫的查詢分析瓶頸,之前使用過Hadoop對大量文本進行分類,這次決定採用Python來處理資料: 硬體環境 CPU:3.5 GHz