Time of Update: 2017-01-19
在瞭解裝飾器的之前一定要先瞭解函數作為參數傳遞, 什麼是函數內嵌,請參考我之前寫的部落格函數簡介 因為在python裡面,函數也是對象,也可以作為參數進行傳遞.python裝飾器本質也是一種特殊函數,它接收的參數是函數對象,然後動態地函數參數添加額外的功能,而不用修改原有的函數對象.python裝飾器傳入的參數是函數,返回的值也是函數!python裝飾器思想有點類似設計模式的裝飾模式,
Time of Update: 2017-01-19
通過列表產生式,我們可以直接建立一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立一個包含100萬個元素的列表,不僅佔用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在Python中,這種一邊迴圈一邊計算的機制,稱為產生器(Generator)。簡單產生器要建立一個generator,有很多
Time of Update: 2017-01-19
這裡先解釋一下幾個概念 - 位置參數:按位置設定的參數,隱式用元組儲存對應形參.平時我們用的大多數是按位置傳參.比如有函數def func(a,b,c),調用func(1,2,3).即a=1,b=2,c=3 - 關鍵字參數:可以通過關鍵字設定參數,不用關心參數位置,隱式用字典儲存形參.比如有函數def func(a,b,c),調用func(b=1,c=2,a=3),即a=3,b=1,c=2普通格式複製代碼 代碼如下:def func(opt_args): ..
Time of Update: 2017-01-19
與大多數程式員一樣,我經常需要標識存在於文字文件中的組件和結構,這些文檔包括:記錄檔、設定檔、分隔的資料以及格式更自由的(但還是半結構化的)報表格式。所有這些文檔都擁有它們自己的“小語言”,用於規定什麼能夠出現在文檔內。我編寫處理這些非正式解析任務的程式的方法總是有點象大雜燴,其中包括定製狀態機器、Regex以及上下文驅動的字串測試。這些程式中的模式大概總是這樣:“讀一些文本,弄清是否可以用它來做些什麼,然後可能再多讀一些文本,一直嘗試下去。”各種形式的解析器將文檔中組件和結構的描述提煉成簡明、
Time of Update: 2017-01-19
讓我們描繪一下本文的情節:假設您要在本地機器上運行一個進程,而部分程式邏輯卻在另一處。讓我們特別假設這個程式邏輯會不時更新, 而您運行進程時,希望使用最新的程式邏輯。有許多方法可以滿足剛提到的要求;本文將向您說明其中幾種方法。隨著“可愛的 Python”專欄不斷進行,已經討論了我的公用域公用程式 Txt2Html 的進行中的增強。該公用程式將“智能 ASCII”文字檔轉換成 HTML。以前的文章討論了公用程式的 Web Proxy版本和公用程式的 curses
Time of Update: 2017-01-19
curses 庫 ( ncurses ) 提供了控制字元螢幕的獨立於終端的方法。curses 是大多數類似於 UNIX 的系統(包括 Linux)的標準部分,而且它已經移植到 Windows 和其它系統。curses 程式將在純文字系統上、xterm 和其它視窗化控制台會話中運行,這使這些應用程式具有良好的可移植性。介紹 cursesPython 的標準 curses 提供了“玻璃電傳”(glass teletype)(在 20 世紀 70 年代,原始 curses 庫剛建立時,它叫做 CRT)
Time of Update: 2017-01-19
字串 -- 不可改變的序列如同大多數進階程式設計語言一樣,變長字串是 Python 中的基本類型。Python 在“後台”分配記憶體以儲存字串(或其它值),程式員不必為此操心。Python 還有一些其它進階語言沒有的字串處理功能。在 Python 中,字串是“不可改變的序列”。儘管不能“按位置”修改字串(如位元組組),但程式可以引用字串的元素或子序列,就象使用任何序列一樣。Python
Time of Update: 2017-01-19
什麼是狀態機器?關於狀態機器的一個極度確切的描述是它是一個有向圖形,由一組節點和一組相應的轉移函數組成。狀態機器通過響應一系列事件而“運行”。每個事件都在屬於“當前”節點的轉移函數的控制範圍內,其中函數的範圍是節點的一個子集。函數返回“下一個”(也許是同一個)節點。這些節點中至少有一個必須是終態。當到達終態,狀態機器停止。但一個抽象的數學描述(就像我剛給出的)並不能真正說明在什麼情況下使用狀態機器可以解決實際編程問題。另一種策略就是將狀態機器定義成一種強制性程式設計語言,其中節點也是源碼行。從實
Time of Update: 2017-01-19
在撰寫本 developerWorks 系列文章的過程中,我曾遇到過以最佳格式進行撰寫的問題。文文書處理程式格式都是專用的,在格式之間轉換總不能盡如人意,也很麻煩(而且每種格式都會各自將文檔綁定到不同的專用工具,這種情況又與開放源碼的精神相違背)。HTML 還算中立 -- 也許您現在閱讀的文章正是這種格式 -- 但它也添加了標記,而這些標記很容易引起誤輸入(或者使人束縛於 HTML 增強型編輯器)。DocBook 是一種有趣的 XML 格式,它可以轉換成許多目標格式,並且它擁有技術文章(或書籍)
Time of Update: 2017-01-19
文件物件模型xml.dom 模組對於 Python 程式員來說,可能是使用 XML 文檔時功能最強大的工具。不幸的是,XML-SIG 提供的文檔目前來說還比較少。W3C 語言無關的 DOM 規範填補了這方面的部分空白。但 Python 程式員最好有一個特定於 Python 語言的 DOM 的快速入門手冊。本文旨在提供這樣一個指南。在 上一篇專欄文章 中,某些樣本中使用了樣本 quotations.dtd 檔案,並且這些檔案可以與本文中的代碼樣本檔案檔案一起使用。有必要瞭解 DOM
Time of Update: 2017-01-19
有很多時候,我們會在python的運行過程中得到一些重要的變數,比如一個資料量很龐大的dict。而且,後面的某些程式也會用到這個dict,那麼我們就最好把它儲存到本地來,然後下次調用的時候,先讀取本地的檔案,匯入到字典類型中,調用即可。這樣就免去了重新學習這個字典的過程。那麼在python中如何把資料存放區到本地呢?我們用到的是python中的pickle模組。如下:import pickledata1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string',
Time of Update: 2017-01-19
在python中,任務並發一種方式是通過進程分支來實現的.在linux系統在,通過fork()方法來實現進程分支.1.fork()調用後會建立一個新的子進程,這個子進程是原父進程的副本.子進程可以獨立父進程外運行.2.fork()是一個很特殊的方法,一次調用,兩次返回.3.fork()它會返回2個值,一個值為0,表示在子進程返回;另外一個值為非0,表示在父進程中返回子進程ID.以下只能在linux中運行,不能在window下運行.進程分支fork()執行個體如下:複製代碼
Time of Update: 2017-01-19
實際上JSON就是Python字典的字串表示,但是字典作為一個複雜物件是無法直接傳遞,所以需要將其轉換成字串形式.轉換的過程也是一種序列化過程.用json.dumps序列化為json字串格式複製代碼 代碼如下:>>> import json>>> dic {'Connection': ['keep-alive'], 'Host': ['127.0.0.1:5000'], 'Cache-Control': ['max-age=0']}>>>
Time of Update: 2017-01-19
匿名管道管道是一個單向通道,有點類似共用記憶體緩衝.管道有兩端,包括輸入端和輸出端.對於一個進程的而言,它只能看到管道一端,即要麼是輸入端要麼是輸出端.os.pipe()返回2個檔案描述符(r, w),表示可讀的和可寫的.範例程式碼如下:複製代碼 代碼如下:#!/usr/bin/pythonimport timeimport osdef child(wpipe): print('hello from child',
Time of Update: 2017-01-19
multiprocessing.Pipe([duplex]) 返回2個連線物件(conn1, conn2),代表管道的兩端,預設是雙向通訊.如果duplex=False,conn1隻能用來接收訊息,conn2隻能用來發送訊息.不同於os.open之處在於os.pipe()返回2個檔案描述符(r, w),表示可讀的和可寫的執行個體如下:複製代碼 代碼如下:#!/usr/bin/python#coding=utf-8import osfrom multiprocessing import
Time of Update: 2017-01-19
httplib模組是一個底層基礎模組,實現的功能比較少,正常情況下比較少用到.推薦用urllib, urllib2, httplib2.HTTPConnection 對象class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]]) 建立HTTPConnection對象HTTPConnection.request(method, url[, body[, headers]])
Time of Update: 2017-01-19
1. 過程概述Python先把代碼(.py檔案)編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。2. 位元組碼位元組碼在Python虛擬機器程式裡對應的是PyCodeObject對象。.pyc檔案是位元組碼在磁碟上的表現形式。3. pyc檔案PyCodeObject對象的建立時機是模組載入的時候,即import。Python
Time of Update: 2017-01-19
概述考慮這樣一個問題,有hello.py指令碼,輸出”hello, world!”;有TestInput.py指令碼,等待使用者輸入,然後列印使用者輸入的資料。那麼,怎麼樣把hello.py輸出內容發送給TestInput.py,最後TestInput.py列印接收到的”hello, world!”。下面我來逐步講解一下shell的互動方式。hello.py代碼如下:複製代碼 代碼如下:#!/usr/bin/pythonprint "hello, world!"TestInput.py代碼如下:
Time of Update: 2017-01-19
剛開始學習python,python相對於java確實要簡潔易用得多。記憶體回收類似hotspot的可達性分析,
Time of Update: 2017-01-19
多重裝飾器,即多個裝飾器修飾同一個對象【實際上並非完全如此,且看下文詳解】1.裝飾器無參數:複製代碼 代碼如下:>>> def first(func): print '%s() was post to first()'%func.func_name def _first(*args,**kw): print 'Call