用模組來合理組織你的python **是簡單又自然的方法。你應該建立一種統一且容易閱讀的結構,並將它應用到每乙個檔案中去。下面就是一種非常合理的布局:
# (1) 起始行(unix)
# (2) 模組文件
# (3) 模組匯入
# (4) 變數定義
# (5) 類定義
# (6) 函式定義
# (7) 主程式
圖3–1 乙個典型模組的內部結構**。
主程式無論這個模組是被別的模組匯入還是作為指令碼直接執行,都會執行這部分**。通常這裡不會有太多功能性**,而是根據執行的模式呼叫不同的函式
主程式中的**通常包括變數賦值, 類定義和函式定義,隨後檢查__name__來決定是否呼叫另乙個函式(通常呼叫main()函式)來完成該模組的功能。主
程式通常都是做這些事。(我們上面的例子中使用test()而不是main()是為了避免你在讀到核心筆記前感到迷惑。) 不管用什麼名字,我們想強調一點那就是:這兒是放置測試**的好地方。大部分的python 模組都是用於匯入呼叫的,直接執行模組應該呼叫該模組的回歸測試**。
核心筆記:__name__ 指示模組應如何被載入,由於主程式**無論模組是被匯入還是被直接執行都會執行, 我們必須知道模組如何決定執行方向。乙個應用程式可能需要匯入另乙個應用程式的乙個模組,以便重用一些有用的**(否則就只能用拷貝貼上那種非物件導向的愚蠢手段)。這種情況下,你只想訪問那些位於其它應用程式中的**,而不是想執行那個應用程式。因此乙個問題出現了,「python 是否有一種方法能在執行時檢測該模組是被匯入還是被直接執行呢?」答案就是......(鼓聲雷動).....沒錯! __name__ 系統變數就是正確答案。
如果模組是被匯入, __name__ 的值為模組名字
如果模組是被直接執行, __name__ 的值為 '__main__'
在主程式中書寫測試**
優秀的程式設計師和軟體工程師,總是會為我們的應用程式提供一組測試**或者簡單教程。
對那些僅僅為了讓別的程式匯入而建立的模組來說, python 有效的簡化了這個任務。這些模組理論上永遠不會被直接執行, 那麼,在這個模組被直接執行時進行系統測試豈不妙哉? 設定起來難嗎? 一點兒也不。
測試**僅當該檔案被直接執行時執行, 也就是說不是被別的模組匯入時。上文及核心筆記中提到如何判斷乙個模組是被直接執行還是被匯入。我們應該利用 __name__ 變數這個有利條件。將測試**放在乙個或者叫main(), 或者叫test()(或者你隨便取個啥名字)的函式中,
如果該模組是被當成指令碼執行, 就呼叫這個函式。
if __name__ == '__main__'
新增改程式的測試**
***************=寫檔案*************************=
#!/usr/bin/python
import os
ls = os.linesep
fname = raw_input('enter the file name: ')
#fname ='/root/licmtest/test1.txt'
while true:
if os.path.exists(fname):
print "error:'%s' already exists" %fname
break
else:
break
all=
print "\nenter lines('.'by itself to quit).\n"
fobj = open(fname,'w')
fobj.writelines(['%s%s' %(x,ls) for x in all])
fobj.close()
print 'done!'
python中,os.linesep是幹什麼的?---------------- os.linesep字串給出當前平台使用的行終止符。例如,windows使用'\r\n',linux使用'\n'而mac使用'\r'。
os.path.exists() 是 os 模組中乙個有用的函式, 幫助我們確認這一點。 當有輸入乙個不存在的檔名時, os.path.exists() 才會返回 false, 這時我們中斷迴圈繼續下面
的**。
***************===讀檔案***************==
#!/usr/bin/python
fname = raw_input('enter your filename like')
#fname = '/root/licmtest/test1.txt'
try:
fobj = open(fname,'r')
except ioerror,e:
print "***file open error: ", e
else:
for eachline in fobj:
print eachline,
fobj.close
**********=for迴圈的使用:
['%s%s' % (x, ls) for x in all]
>>> squared = [x ** 2 for x in range(4)]
>>> for i in squared:
... print i01
493def displaynumtype(num):
4 print num, 'is',
5 if isinstance(num, (int, long, float, complex)):
6 print 'a number of type:', type(num).__name__
7 else:
8 print 'not a number at all!!'
910 displaynumtype(-69)
11 displaynumtype(9999999999999999999999l)
12 displaynumtype(98.6)
13 displaynumtype(-5.2+1.9j)
14 displaynumtype('***')
Python檔案讀寫
今天在看python檔案讀寫操作,發現python file name mode buffering file 函式用於建立乙個file物件,它有乙個別名叫open 可能更形象一些,它們是內建函式。來看看它的引數。它引數都是以字串的形式傳遞的。name是檔案的名字。mode 是開啟的模式,可選的值為...
python檔案讀寫
檔案讀寫模式 模式 描述 r以讀方式開啟檔案,可讀取檔案資訊。w以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容 a以追加模式開啟檔案 即一開啟檔案,檔案指標自動移到檔案末尾 如果檔案不存在則建立 r 以讀寫方式開啟檔案,可對檔案進行讀和寫操作。w 消除檔案內容,然後以讀寫...
python 讀寫檔案
python讀寫檔案在文字不大的情況可以用正常的 open 然後讀入 readline行讀入 或者整體讀入 read readlines 基本知識 file open path,r 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只...