




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
在python中有多種運行外部程序的方法,比如,運行操作系統命令或另外的python,或pythonpython解節約了資源,因為重復實現這些代碼肯定是不合邏輯的,更是浪費時間和人力。python給當前 (apply(),filter(),map()reduce(),這四住這些對象的任何或者別名都是可調用的。函我們介紹的第一種可調用的對象python有3種不同類型函一種是內建函數。內BIF是用c/c++寫的,編譯過后放入python解釋器,然后把它們作為第一(內建)名字空間的一部分加載進系統。如前面章節所提到的,這些函數在_bulitin_模塊里,并作為builtins模14.1BIF屬 描bif.selfbif.module
文檔字符串(存放bif定義的模塊名字(或None)你可以用dir()列出函數的所有屬性:>>>['call','class','cmp','delattr','doc'getattribute','hash','init','module'name','new','reduce','reduce_ex'repr','self','setattr','str從機制來看因為BIFs和內建方法(BIMs)屬于相同的類型所以對BIF或者BIM調用type()的>>><type>>><type>>><type用戶定義的函數UDF(User-DefinedFunction,用戶定義的函數)通常是用python寫的,定義在模塊的,數體內定義,并且由于在2.2表14.2用戶自定義函數屬性UDF屬 udf.udf.
字符串類型的函數名字(也可以用 全局名字空間字典;和從函數調用globals(x)一樣 (見上面的udf.doc) (見上面的udf.func_closure包含了變量的的單元對象元組(自用變量在UDF中使用,但在別處定義;參見python[語言]參考手冊)中從機制來看,用戶自定義的函數是“函數“類型的,如在下面的例子中用type()表明的>>>deffoo():>>><typelambda或把它們的賦值給一個變量,然后就可以直接調用或者再通過函數來調用。變量僅是個別名,者func_name屬性給定為字符串"<lambda>"。使用type()工廠函數,我們來演示下lambda表達式返>>>lambdaFunc=lambdax:x*>>>lambdaFunc(100)>>><type用type():>>><type>>>>>>lambdaF從11.9小節中我們可以看到,一旦函數以后(且函數對象可用,程序員也可以自定義函數屬性。所有的新屬性變成udf.dict對象的一部分。在本章的稍后內容中,獲取含有python代碼的字符串并執行該代碼。到了本章最后,會有一個組合例子,著重描寫函數屬性和python代碼(字符串)的動態求值和執行語句。方13python類型,比如列表和字典,也有方法,這些被稱為內建方法。為了進一步說明“所“的類型,方14.3內建方法(BIM) 描bim.
內建方法供一個內建對象來BIM:>>><type此外,BIM和BIF兩者也都享有相同屬性。不同之處在于BIM的 屬性指向一個BIFNone可以用在BIM上:>>>['call','class','cmp','delattr','doc'getattribute','hash','init','module'name','new','reduce','reduce_ex'repr','self','setattr','str然而,不用多久就會發現,從功能上看,用實際的對象去其方法并不是非常有用,如最后的例子。由于沒有來保存這個對象,所以它立即被回收了。你處理這種的類型唯一的用處就是顯示BIT有什么方法。用戶定義的方法UDM(User-definedmethod,用戶定義的方法僅有定義它們的類可以使用。如果沒有在子類定義中被覆蓋掉,也可以通過子類實例來調用它們。正如在13章解釋的那樣,UDM與類對象是關聯的(非綁定方法定方法UMsUMDtype()調用:classC(object):defineclass義deffoo(self):pass#defineUDM#定義cC()instantiation例type(C)typeofclass的類<type>>>type(c)typeofinstance#實例的<class'main>>>type(C.footypeofunboundmethod#非綁定方法的<typetype(c.foo)#typeofboundmethod#綁定方法的類<typeC.foounboundmethodobject#非綁定方法對<unboundmethodc.foo#boundmethodobject定方法對<boundmethodC.fooof<main.Cobjectat instancefoo()'sboundto#foo()實例被綁定到<main.Cobjectat14.4UDM屬 描udm.module
文檔字符串(udm.im_fuc.doc相同字符串類型的方法名字(umd.im_相同)定義udm的模塊的名字(或none) 方法的函數對象( 類化。類有默認構造函數,該函數什么都不做,基本上只有一個pass語句。程序員可以通過實現 >>>class init(self,print'Instantiatedwiththesearguments:\n',>>>c1=C()#invokingclasstoinstantiatec1Instantiatedwiththesearguments:>>>c2=C('Thenumberofthecountingshallbe',3)Instantiatedwiththesearguments:('Thenumberofthecountingshallbe',3)我們已經很熟悉實例化過程以及它是如何完成的,在這里將不再贅述。不過,一個新的問題是python給類提供了名為call的特別方法,該方法允許程序員創建可調用的對象(實例。默認情況下,call()方法是沒有實現的,這意味著大多數實例都是不可調用的。然而,如果在類和foo.call(foo)的效果相同,這里foo也作為參數出現,因為是對自己的,實例將自 就和調用foo.call(foo,arg)一樣。這里我們給出一個可調用實例的例子,和前面小節的例子>>>class... call(self,...print"I'mcallable!Calledwithargs:\n",>>>c=instantiation例>>>our #我們的<main.Cinstanceat>>>callable(c)instanceiscallable#實例是可調用的c()instanceinvoked#調用實I'mcallable!Calledwithc(3invokedwith1arg呼叫的時候給出一個參I'mcallable!Calledwithc(3,'nomore,noless')invokedwith2args#呼叫的時候給出兩個參I'mcallable!Calledwith(3,'nomore,no記住只有定義類的時候實現了 可調用的對象是python執行環境里最重只是冰山一python語句賦值,表每個可調用物的都是代碼對象,由語句,賦值,表達式,以及其他可調用物組成。察看一一般說來,代碼對象可以作為函數或者方法調用的一部分來執行,也可用exec語句或內建函python(又稱字節碼。這才是udm.im_func函數對象又是怎么一回事呢?因為那也是一個函數對象,所以他同樣有它自己的可執行的對象和內建函Python提供了大量的BIF來支持可調用/可執行對象,其中包括exec語句。這些函數幫助程序員執行代碼對象,也可以用內建函數complie()來生成代碼對象。表14.5可執行對象和內建函數 eval(obj,glo- execobj 執行obj、單一的python語句或者語句的集合,也就是說格式 是代碼對象或者字符串;obj也可以是一個文件對象(已經打開的效python中 callable()是一個布爾函數,確定一個對象是否可以通過函數操作符(())來調用。如果函數可調用便返回True,否則便是False(對與2.2和較早的版本而言10。這里有些對象及其對應的callable返回值callable(dir)built-infunction#內建函callable(1)integer#整數>>>deffoo():callable(foo)#user-definedfunction#用戶自定義函 string字符>>>classC(object):callable(C)classcompile()函數允許程序員在運行時刻迅速生成代碼對象,然后就可以用exec語句或者內建函eval()來執行這些對象或者對它們進行求值。一個很重要的觀點是:execeval()都可以執行字PythonPython最后的參數是個字符串,它用來表碼對象的類型。有三個可能值'eval'可求值的表達式[和eval()一起使用]'single'單一可執行語句[和exec'exec'exec可求值表達>>>eval_code=compile('100+200','',>>>eval(eval_code)單一可執行語句>>>single_code=compile('printoworld!"','',>>><codeobject?at120998,file"",line>>>execsingle_codeoworld!可執行語句組>>>exec_code=...req=input('Counthowmanynumbers?...foreachNumin...print...""",'',>>>exec12345內建函數input()是在本章稍后的一個快捷函數。eval()對表達式求值,后者可以為字符串或內建函數complie()創建的預編譯代碼對象。這是 以是任意的對象,比如,一個實現了getitem()方法的對象。(在2.4之前,local必須是一個字典)globals()locals()返回的對象,如果只傳入了localseval():>>>eval('932')>>>int('932')932932,932”932”所代表的整數。當我們用純字符串表達式>>>eval('100+>>>int('100+200')Traceback(innermostFile"<stdin>",line1,inValueError:invalidliteralforint():100+出返回值300。而對int()的調用失敗了,因為字符串參數不是能代表整數的字符串,因為在字符的引號,接著假設“如果我是python解釋器,我會怎樣去觀察表達式呢?”,換句話說,eval()相似,execpythoncompile()exec>>>exec...x=...print'xiscurrently:',...whilex<...x+=...print'incrementingxto:',...xiscurrently:0incrementingxto:1incrementingxto:2incrementingxto:3incrementingxto:4incrementingxto:最后,exec還可以接受有效的python文件對象。如果我們用上面的多行代碼創建一個叫>>>f=open('xcount.py')#openthe>>>execf#executethefilexiscurrently:0incrementingxto:1incrementingxto:2incrementingxto:3incrementingxto:4incrementingxto:5>>>exec #哦,失敗 為什么14.3這或許讓你感到吃驚。事實上,exec已從文件中了全部的數據且停留在文件末尾(EOF)。當用相同文件對象對exec進行調用的時候,便沒有可以執行的代碼了,所以exec什么都不做,如同上面看見的行為。我們如何知道它在EOF呢?我們用文件對象的 我們xcount.py有多大。這樣你就會發現,兩個數字完全一樣:>>>f #whereareweinthefile?#我們在文件的什么地方f.close()closethefile文>>>fromos.pathimportgetsize('xcount.py')whatisthefilesize?#文件有多大seek()到文件最開頭并再次調用exec了。比如,假定我們還沒有調用f.close(),那么我們可以這樣做:f.seek(0)#rewindtobeginning會文件開>>>execxiscurrently:0incrementingxto:incrementingincrementingxto:>>>內建函數input()eval()raw_input()的組合,等價于eval(raw_input())),input()有一個可選的參數,該參數代表了給用戶的字符串提示。如果不給定參數的話,該字符串默認為空串。從功能上看,input不同于raw_input(),因為raw_input()總是以字符串的形式,逐字地返回用戶的輸入。inputpythoninput()返回的數據是對輸入表達式求值的結果:一個python對象。而input()返回實際的列表:>>>aString=raw_input('Enteralist:')Enteralist:[123,'xyz',45.67>>>"[123,'xyz',45.67>>>type(aString)<type>>>aList=input('Enteralist:')Enteralist:[123,'xyz',45.67>>>[123,'xyz',>>><type使用Python在運行時生成和執行Python第一個例子是loopmake.py,一個簡單的、迅速生成和執行循環的計算機輔助工程(CASE((while或for),迭代的數據類型[數字或序列]),生Example14.1動態生成和執行Python1#!/usr/bin/env23dashes='\n'+'-'*50#dashed4exec_dict{6'f':"""#for7for%sin8print911's':"""#sequencewhile12%s=013%s=14while%s<15print16%s=%s+17'n':"""#countingwhile%s=while%s<print%s=%s+}27def29ltype=raw_input('Looptype?(For/While)30dtype=raw_input('Datatype?(Number/Seq)32ifdtype==33start=input('Startingvalue?34stop=input('Endingvalue(non-inclusive)?35step=input('Stevalue?36seq=str(range(start,stop,step))3839seq=raw_input('Entersequence:')41var=raw_input('Iterativevariablename?')43ifltype==46elifltype==47ifdtype==48svar=raw_input('Entersequencename?49exec_str=exec_dict['s']%50(var,svar,seq,var,svar,svar,var,var,52elifdtype==53exec_str=exec_dict['n']%54(var,start,var,stop,var,var,var,step)56print57print'Yourcustom-generatedcode:'+58printexec_str+59print'Testexecutionofthecode:'+60exec61print63 64
=='main以下執行的例%Looptype?(For/While)Datatype?(Number/Sequence)nStartingvalue?0Endingvalue(non-inclusive)?Stepvalue?Iterativevariablename?Thecustom-generatedcodeforyouis:forcounterin[0,1,2,3]:printTestexecutionofthecode:123%Looptype?(For/While)Datatype?(Number/Sequence)nStartingvalue?0Endingvalue(non-inclusive)?4Stevalue?1Iterativevariablename?Yourcustom-generatedcode:counter=0whilecounter<printcountercounter=counter+1Testexecutionofthecode:123%Looptype?(For/While)Datatype?(Number/Sequence)Entersequence:[932,'grail',3.0,'arrrghhh']Iterativevariablename?eachItemYourcustom-generatedforeachItemin[932,'grail',3.0,'arrrghhh']:printeachItemTestexecutionofthe%Looptype?(For/While)Datatype?(Number/Sequence)Entersequence:[932,'grail',3.0,'arrrghhh']Iterativevariablename?eachIndexEntersequencename?Yourcustom-generatedcode:eachIndex=0myList=[932,'grail',3.0,whileeachIndex<len(myList):printmyList[eachIndex]eachIndex=eachIndex+1Testexecutionofthecode:Lines在的第一部分,我們設置了兩個全局變量。第一個是由一行破折號(即是名字)組成的靜態字符串,第二個則是由用于生成循環的骨架代碼組成的字典。for'f',用于迭代序列的while循環的則是"s",而記數while循環的是'n‘LinesLines返回一個python對象LinesLineLines43–44LinesLinesLinesLines有條件地執行代碼第二個例子著重描寫了在第11章"函數"引入的函數屬Python增強23(PEP232)中的例子得到的靈感。假設你是一位負責質量控制的開發者,你鼓勵你的工程師將回歸測試或Example14.2FunctionAttributes該值默認為01#!/usr/bin/env23def4return56def7'bar()doesnotdomuch'8return9foo. ='foo()doesnotdofoo.tester=ifprintprintforeachAttrinobj=ifisinstance(obj,ifhasattr(obj,'docprint'\nFunction"%s"hasadocstring:\n\t%s'%(eachAttr,obj.doc)ifhasattr(obj,print'Function"%s"hasatester...executing'%execprint'Function"%s"hasnotester...ski'%print'"%s"isnotafunction'%Lines我們在的開始部分定義了foo()和bar()。兩個函數都只是返回True。不同點在于foo()沒有屬性而bar()有文檔字串。Linespython代碼組成。Linesdir()迭代現在(即全局)名字空間開始。它返回的列表包含了所有對象的名字。因為這些都是字符串,我們需要在第19行將它們轉化為真正的python對象。除了預期的系統變量,比如,builtins,我們還期望顯示函數。我們只對函數有;第有文檔字串,如果有的話,把它顯示出來。23-27行表演了魔法。如果函數有檢測屬性,那么就執$python"builtins"isnotafunction"doc"isnotafunction"file"isnotafunction"name"isnotabar()doesnotdomuchFunction"bar"hasnotester...skifoo()doesnotdomuchFunction"foo"hasatester...executing執行其他(Python)程當執行其他程序時,我們把它們分類為python程序和其他所有的非python程序,后者包os模塊調用外部程序。導碼才是全局變量,全局類,和全局函數。筆記:當模塊導入后,就執行所有的這只是一個善意的提醒:在先前的第3章和第12章已經談過了,現在再說一次,當導入python模塊后,就執行所有的模塊!當導入python模塊后,會執行該模塊!當你導入foo模塊時候,它運行所有別的(即沒有縮進的)python代碼,比如,'main()。如果foo含有bar函數的,那么便執行deffoo再問一次為什么會這樣做呢?……由于某些原因,bar必須被識別為foo模塊中一個有效的名字,也就是說bar在foo的名字空間中,其次,解釋器要知道它是一個已的函數,就像本地模塊中的任何一個函數?,F在我們知道要做什么了,那么如何處理那些不想每次導入都執行的代碼呢?縮進它,并放入if =='main'的。跟著應該是一個if語句,它通過檢測name來確定是否要調用,比如,“ifname==當導入python模塊后,會執行該模塊!當你導入foo模塊時候,它運行所有別的(即沒有縮進的)python代碼,……再問一次為什么會這樣做呢?……由于某些原因,bar必須被識別為foo模塊中一個有效的名字,也就是說bar在foo的名字空間中,其次,解釋器要知道它是一個已的函數,就像本地模塊中的任何一個函數?,F在我們知道要做什么了,那么如何處理那些不想每次導入都執行的代碼呢?縮進它,并放入if =='main'的。#print'loadedimport1'importimport2#print'loaded>>>importimport1loadedimport1loaded根據建議檢測nameimport1.pyimport2.py#import1.pyimport =='mainprint'loaded#if =='main'print'loadedimport2'>>>importexecff.close()來執行模塊。execfile()函數的語法非常類似于eval()函數的。execfile(filename,globals=globals(),類似eval(),globals和locals都是可選的,如果不提供參數值的話,默認為執行環境的名字空間。如果只給定globals,那么locals默認和globals相同。如果提供locals值的話,它可以是任何對象[一個定義/覆蓋了getitem()的對象]。在在2.4之前,locals必須是一個字典。是否有副作用。execfile()不保證不會修改局部名字空間。見python庫參考手冊對execfile()的解將模塊作 執 python2.4里加入了一個新令行選項(或開關,允許從s或DOS提示符,直接把模塊作為來執行。當以的方式來書寫你的模塊的時候,執行它們是很容易的。你可以使用命令行從你的工作調用你的。$myScript.py#or$pythonsite-packages的pythonweb服務器,以便創建和測試你自己的web頁面和CGI。$python/usr/local/lib/python2x/CGIHTTPServer.pyServingHTTPonport8000...這是段很 令,如果它是 的,你不得不深入到site-packages去找到它真正定位pythonc$python-c"importCGIHTTPServer;pythonname模塊不是‘main’........而是你正在使用的模塊。(需要的話,你可以參閱前面的3.4.1 在if =='main'之下的代碼是不會執行的,所以你不得不手動地調用模塊的test()函數,就如同前面我們所做的一樣。所以我們想同時要兩者的優點——能夠在類庫中執行作為的模塊而不是作為導入的模塊。這就是-m參數的?,F在可以像這樣運行:$python-m這是不小的改進。盡管如此,還沒有完全如預想那樣實現特性。所以在python2.5中,-m開關所以初始版本的-m選項是不能運行特殊的模塊如PyCHecker(python的lintprofiler(注意這些是裝載和運行其他模塊的模塊。但是2.5版本解決了這個問題。執行其他(非Python)程pythonpython它們的解釋器(perl,bash,等等,二進制必須是可的(和本地機器的構架兼容)而有的程序返回輸出以及執行完成時的錯誤代碼,也許有的兩者都做。針對不同的環境,pythonTable14.6執行外部程序的osos模塊函 描 cmd(字符串,等待程序結束,返回退出代碼(windows始終為0) execl(file,arg0,arg1,...)arg0,arg1execv(file,arglist) execl()相同execle(file,arg0,arg1,...env)execlenvexecve(file,arglist,envexecle()execlp(cmd,arg0,arg1,...)execl()名execvp(cmd, Table14.6os(續表)(uunixwwindowsos模塊函 execlpe(cmd,arg0,arg1,...env) 和execlp相同,但提供了環境變量字典envexecvpe(cmd,arglist,env) 和execvp相同,但提供了環境變量字典envspawn*a(mode,file,args[, 等待子進程完成[通常和fock和exec*()一起使用]U 等待指定的子進程完成[通常和fock和exec*()一起使用] 用關聯的應用程序執行路徑spawn*()函數命名與exec*()相似(兩個都有8個成員;spawnv()和spawnve()在python1.5.2加入,其他的六個spawn*()函數在python1.6加入;spawnlp(),spawnlpe(),spawnvp()和spawnvpe()只適用于unix平臺。隨著越來越接近的操作系統層面,你就會發現執行跨平臺程序(甚至是python)的一致性開始有些不確定了。上面我們提到在這個小節中描述的程序在ososUnix(Linux,MacOSX,Solaris,BSD)posixmacimportospython在我們看看每個模塊函數之前,對于python2.4或者更新版本的用戶,這里有個subprocess模給出subprocess.Popen類和subprocess.call()函數的等價使用方法。system(),一個非常簡單的函數,接收字符串形式的系統命令并執回值形式給出退出狀態,python的執行也會繼續。system()保留了現有的標準文件,包括標準的輸出,意味著執行任何令和程序顯示輸出都文本標示語言(HTML)字符串之外的輸出,經過標準輸出發送回客戶端,會引起web瀏覽器錯誤。system()通常和不會產生輸出令一起使用,其中的一些命令包括了壓縮或轉換文件的程序,掛載磁盤到系統的程序,或其他執行特定任務令---通過退出狀態顯示成功或失敗而不是通過輸入和/或輸出通信。通常的約定是利用退出狀態,0表示成功,非零表示其他類型的錯誤。>>>import>>>result=os.system('cat/etc/motd')Havealotof>>>result=os.system('uname-Linuxsolo2.2.13#1MonNov815:08:22CET1999i586unknown>>>result0執行dos命令的例子:popen()system()system()相同,但它可以建立一個指向那個程序的單向連接,然后如文件一樣這個程序。如果程序要求輸入,那么你要>>>import>>>f=os.popen('uname->>>data=>>>>>>printLinuxsolo2.2.13#1MonNov815:08:22CET1999i586如你所見,popen()返回一個類文件對象;注意readline(),往往,保留輸入文本行尾的os.fork(),(process會在調用fork()后立刻運行。因為代碼是相同的,如果沒有其他的動作,會看到同樣的執行PIDret=os.fork()#spawn2processes,bothreturn#產生兩個進程,都返回ifret==0: #childreturnswithPIDof0#子進程返回的PID是0child_suitechildcode#子進程的代 #parentreturnswithchild'sPID#父進程返回是子進程的PID #parentcode#父進程的代碼fork()?,F在子進程和父進程同時在運行。子進程本身有虛擬內存地址空間的拷貝,以及一份父進程地址空間的原樣拷貝。是的,兩者幾乎都是相同的。fork()返回所有版本的exec*()都會用給定文件作為現在要執行的程序取代當前(子)進程的Python解釋器。和system()不一樣,對于Python來說沒有返回值(因為Python已經被替代了。如果因為某種原因,程序不能執行,那么exec*()就會失敗,進而導致異常ret=ifret==0: childcode#子進程代碼execvp('xbill',['xbill']) #parentcode#父進程代 wait()的調用。當子進程執行完畢,需要它們的父進程進行掃尾工作。這個任務,稱為”收獲孩子(reaachild,可以用wati*()函數完成。緊跟在fork()是用wait*()函數中的一個。獲它們之后才能掉比如,waits,直到子進程信號終止。wait()將會收獲子進程,所有的資源。如果子進程已經完成,那么wait()只是進行函數spawn*()和fork,exec*()相似,因為它們在新進程中執行命令;然而,你不需要分別調用兩個函數來創建進程,并讓這個進程執行命令。你只需調用一次spawn*()。由于其簡單性,你放棄了“”父進程和子進程執行的能力;該模型類似于程中啟動函數。還有點不同的是你必須知道傳入spawn*()的魔法模式參數。在其他的操作系統中(尤其是實時操作系統[RTOSspawn*(fork()不是這種情況的操作系統通(copy-on-write)subprocess在python2.3出來之后,一些關于popen5模塊的工作開始展開。一開始該命名繼承了先前中了我們在這章的大部分面向進程的函數。同樣也有名為call()的便捷函數,可以輕易地取代os.system()。在python2.4中,subprocess初次登場。下面就是演示該模塊的例子:Linux上的例子:>>>fromsubprocessimport>>>import>>>res=call(('cat',Linuxstarship2.4.18-1-686#4SatNov2910:18:26EST2003i686>>>res取代>>>fromsubprocessimportPopen,>>>f=Popen(('uname','-a'),>>>data=>>>>>>printLinuxstarship2.4.18-1-686#4SatNov2910:18:26EST2003i686>>>f=Popen('who',>>>data=[eachLine.strip()foreachLineinf>>>>>>foreachLinein...print14.7文件對象屬 描 執行文件,打開文件,從新創建的運行程序(stdout),或者該程序寫 或者向該程序寫 執行文件,打開文件,從新創建的運行程序(結合stdout, U 在python歷史某個時期內,存在著使用了rexec和bastion模塊的限制執行的概念。第一個模由于一個顯著的缺點和彌補安全的,這些模塊便被廢棄了。那些使用了這些模塊的老14.6結束執當程序運行完成,所有模塊的語句執行完畢后退出,我們便稱這是干凈的執行??赡苡衟ythonsys.exit()and當調用sys.exit()時,就會systemExit()異常。除非對異常進行(在一個try語句和合適的except子句中,異常通常是不會捉到或處理的,解釋器會用給定的狀態參數退出,如果沒有給出的該參數默認為0SystemExit是唯一不看作錯誤的異它僅僅表示要退出python數目不正確。下面的例子14.4(args.py)僅僅是一個測試,在正確執行之前需要給出確定數目$Atleast2argumentsrequired(incl.cmdname).usage:args.py [arg3...]$args.pyAtleast2argumentsrequired(incl.cmdname).usage:args.pyarg1arg2[arg3...]$args.py123abcnumberofargsentered:args(incl.cmdname)were:['args.py','123',$args.py-x-2fooargs(incl.cmdname)were:['args.py','-x','-2',Example14.4ExitingImmediay(args.py)立即退出該值默認為0;1#!/usr/bin/envpython5def6print'Atleast2arguments(incl.cmd7print'usage:args.pyarg1arg2[arg3...8sys.exit(1)argc=ifargc<print"numberofargsentered:",print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省蘇北地區達標名校2025屆初三5月聯考英語試題試卷試卷含答案
- 煙臺大學《系統空間設計》2023-2024學年第二學期期末試卷
- 銀川第二中學2024-2025學年高三五月中旬物理試題含解析
- 木工勞務分包合同
- 江蘇省鹽城市東臺第一教育集團2024-2025學年初三第十一模(最后一卷)英語試題含答案
- 山東工業職業學院《西醫臨床技能訓練》2023-2024學年第二學期期末試卷
- 信陽職業技術學院《現代農業技術導論(種植類)》2023-2024學年第二學期期末試卷
- 新疆維吾爾巴音郭楞蒙古自治州且末縣2025屆五年級數學第二學期期末檢測模擬試題含答案
- 云南省蒙自一中2025屆高三4月模擬考試(一模)語文試題含解析
- 上海市十一校2025年高三第一次調研考試英語試題理試題含解析
- GB/T 3785.3-2018電聲學聲級計第3部分:周期試驗
- 焦化廠生產工序及工藝流程圖
- 特變電工-財務報表分析課件
- optimact540技術參考手冊
- 第一章電力系統仿真軟件介紹課件
- 產品QC工程圖 (質量保證工程圖)Excel表格
- 人民醫院人才隊伍建設規劃人才隊伍建設五年規劃
- 電氣平行檢驗用表
- GB∕T 14527-2021 復合阻尼隔振器和復合阻尼器
- 患者隨訪率低原因分析以及對策
- DB32∕T 2349-2013 楊樹一元立木材積表
評論
0/150
提交評論