小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

CDays–3 通過(guò)函數(shù)進(jìn)行功能化 Python基礎(chǔ)教程

 昵稱(chēng)QAb6ICvc 2013-02-20

CDays–3 通過(guò)函數(shù)進(jìn)行功能化 Python基礎(chǔ)教程

image

圖片來(lái)自 《可愛(ài)的Python》 P16

如果我們希望Python 的程序像CMD中的命令一樣,可以添加運(yùn)行參數(shù),那么我們需要將程序做成函數(shù), 就像C語(yǔ)言的函數(shù)。

這種問(wèn)題《可愛(ài)的Python》是不會(huì)告訴我們的,讓我們?nèi)⒖紩?shū)上翻一下?!禤ython 學(xué)習(xí)手冊(cè)》

首先明白一個(gè)問(wèn)題,函數(shù)是什么。

可以這么理解,在程序中,函數(shù)是一個(gè)通用的功能塊,在程序的任何一個(gè)位置調(diào)用一個(gè)函數(shù),他的功能是一樣的。我們可以把一段總在程序中重復(fù)的代碼定義成函數(shù)。

然后在之后的程序中調(diào)用。這樣就可以省去了很多麻煩。

那么如果你學(xué)過(guò)任何一門(mén)語(yǔ)言,那么函數(shù)是很容易理解的。

那么根據(jù)參考書(shū),我們看一下Python的函數(shù)是如何定義的。

def 語(yǔ)句

def語(yǔ)句將創(chuàng)建一個(gè)函數(shù)名,并且定義函數(shù)使用的變量。

函數(shù)的主體往往都含有return語(yǔ)句。

def <name> (arg1, arg2 ,..... argN ):
     ...
     return < value >

有一點(diǎn)值得說(shuō)明,python 的def語(yǔ)句并不像C語(yǔ)言定義函數(shù)一樣,def 可以在程序的任何一個(gè)位置,甚至在if 中,根據(jù)條件不同,配置不同的子函數(shù)。

我們給出一個(gè)def的使用例子。

def test(x ,y):
    return x*y
print test(5,66)

image

在這里個(gè)例子中,我們定義函數(shù)test 的功能就是將兩個(gè)變量相乘。

讓我們嘗試在命令行中調(diào)用它。

image

我想大家已經(jīng)可以理解函數(shù)是怎么被調(diào)用的了。


那么現(xiàn)在我們看下我們的需求。

我們需要指定掃描目錄 以及保存的文件名,讓我們改一下昨天的代碼。

import os
export = ""
for root, dirs, files in os.walk('/media/cdrom0'):
  export+="\n %s;%s;%s" % (root,dirs,files)
open('mycd2.cdc', 'w').write(export)

下面我們加入def

復(fù)制代碼
import os
def cdWalker (cdrom , result_file ):
    export = ""
    for root, dirs, files in os.walk(cdrom):
        export+="\n %s;%s;%s" % (root,dirs,files)
    open(result_file, 'w').write(export)
復(fù)制代碼

我們運(yùn)行一下,然后在命令行中調(diào)用。

image

我們得到了兩個(gè)文件。

image

如此看來(lái),我們定義的函數(shù)是沒(méi)錯(cuò)的。

那又怎么從命令行獲取輸入的參數(shù)呢。

根據(jù)書(shū)上的指引,我們使用 sys.argv 

讓我們查一下sys.argv是干嘛的。

sys.argv 是用來(lái)獲取命令行的參數(shù)的。

sys.argv 的用法

我們從《Python簡(jiǎn)明教程》上取得一個(gè)例子看一下他是怎么用的。

復(fù)制代碼
import sys 
def readfile(filename): 
    ''' Print a file to the standard output. '''
    f = file(filename) 
    while True: 
        line = f.readline() 
        if len(line) == 0: 
            break
        print line  
    f.close() 
  
#Script starts from here 
if len(sys.argv) < 2: 
    print ' NO action specified.'
    sys.exit() 
  
if sys.argv[1].startswith('--'): 
    option = sys.argv[1][2:] 
    if option == 'version': 
        print ' version 1.2 '
    elif option == 'help': 
        print '''This program prints files to the standard output.  
             Any number of files can be specified.  
             Options include:  
             --version : Prints the version number  
             --help     : Display this help'''  
    else: 
        print 'Unknow option.'
else: 
    for filename in sys.argv[1:]: 
        readfile(filename)
復(fù)制代碼

這個(gè)程序要從cmd里面執(zhí)行,讓我們?cè)囈幌隆?/p>

image

功能好像挺簡(jiǎn)單的,那么我們現(xiàn)在分析一下這個(gè)程序。

首先,我們看到了def, 它定義了一個(gè)函數(shù),這個(gè)函數(shù)從名稱(chēng)上看來(lái)是讀取文件的,參數(shù)是文件名。

下面出現(xiàn)了兩個(gè)IF , 第一個(gè)if是判斷sys.argv的長(zhǎng)度,那么我們有了一個(gè)新問(wèn)題。sys.argv得到的是什么,讓我們?cè)偕弦粋€(gè)程序上面補(bǔ)寫(xiě)一句話

print sys.argv

image

我們看到了 sys.argv 的輸出內(nèi)容是一個(gè)list , 如果沒(méi)有 參數(shù),應(yīng)該只有一項(xiàng)。

如果有參數(shù),長(zhǎng)度肯定超過(guò)1 .

第一個(gè)if 就是解決是否提供了參數(shù)的問(wèn)題,如果沒(méi)有參數(shù),程序則退出,使用函數(shù) sys.exit( )

第二個(gè)if 是用來(lái)判斷參數(shù)是什么??梢钥吹竭@里使用了偏移來(lái)索引字符串。

到這里,我們應(yīng)該就很清楚了 sys.argv 的實(shí)質(zhì)是什么了。


現(xiàn)在我們用 sys.argv 來(lái)修改最初的程序。

復(fù)制代碼
import os,sys
CDROM = 'D:\\CDROM'
def cdWalker (cdrom , result_file ):
    export = ""
    for root, dirs, files in os.walk(cdrom):
        export+="\n %s;%s;%s" % (root,dirs,files)
    open(result_file, 'w').write(export)
if '-e'==sys.argv[1] :
    cdWalker (CDROM,sys.argv[2])
    print "CDROM detals is saved in  %s" % sys.argv[2]
else:
    print 'ERROR INPUT !'
復(fù)制代碼

保存它,現(xiàn)在我們?cè)贑MD中運(yùn)行試試看。

image

一個(gè)可以與用戶互動(dòng)的小程序暫時(shí)完成了。

大年初一啊。><

綠色通道

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多