===========================================================================
===========================================================================
1. import【轉】(http://www.cnblogs.com/dajianshi/archive/2012/12/28/2837270.html)
眾所周知,python既可以匯入包(import package),也可以匯入模組(import module),package一般理解為多檔案的模組,它是這樣定義的,如果一個目錄下存在”__init__.py”這個檔案,那麼python就認 為這個目錄下的所有檔案同屬於一個package(這和java的namespace有點像,但是java可不需要這麼個特殊檔案),如果沒有這個檔案, 那麼python認為目錄下的py檔案都是不相干的獨立模組。但是在子目錄中你可不能這麼幹,如果子目錄中沒有”__init__.py”,那麼該目錄下 的程式算是白寫了,根本沒有辦法引用。當然,也不是絕對的,除非繞個大彎兒:設定目前的目錄,然後匯入,然後重設目前的目錄。比如,程式需要使用test目錄 中的模組,而test目錄不是package,你只能這樣做:
os.chdir("test") import testfuncs os.chdir("..")
最方便的引入,當然是同一個目錄的模組(除了及其簡單的程式,很少有人會使用這種扁平的目錄結構),那是想怎麼匯入就怎麼匯入。比如在主程式中想要使用另一個檔案模組中的函數,只需要直接匯入即可:
import testfuncs #直接匯入模組(也就是不帶副檔名的檔案名稱)testfuncs.nousefunc() #通過模組的名字引用其中的函數from testfuncs import nousefunc #匯入模組中的函數nousefunc() #直接調用匯入的函數
上面只是最簡單的情況,如果檔案中定義的是class怎麼樣呢,實際使用也是差不多的,不過要多一次構造class的執行個體的調用:
import testclass #直接匯入模組(也就是不帶副檔名的檔案名稱)obj=testclass.TestClass(); #執行個體化類obj.func1() #通過模組的名字引用其中的class,然後才到類的函數,注意類要執行個體化from testclass import TestClass #匯入模組中的類obj=TestClass(); #執行個體化類obj.func1() #調用函數
如果都是這種從程式中引入同目錄或者子目錄的包,那麼事情就簡單了,但是如果是同為子目錄中的模組,要引入兄弟目錄中的模組或類,要怎麼辦呢?例如,如下的目錄結構:
圖中src目錄就是程式的頂層目錄,也是包匯入的頂層package,pub目錄及其子目錄是公用程式所在。在這種情況下,最好的方法就是在主程式 中(一般位於應用的來源程式的根目錄,中的start.py),把所有下級的目錄都繳入的sys.path中,然後在子目錄中的模組中,只要使用完全限 定的包名引入其他子目錄中的模組或者類就可以了。然而現實的情況往往不那麼盡如人意,比如為公用包寫的測試程式需要放在pub/test目錄下,測試目標 在pub/data目錄下,這是不能寄希望與應用的主程式了,因為此時不會去運行應用程式。這種情況下,啟動程式和被引用的包同在一個父目錄的子目錄中。 此時該怎麼辦呢,還是老辦法,要把父目錄(src/pub)和(src/pub/data、src/pub/test)目錄都要加入sys.path中, 然後再用
絕對的方式進行引入(import pub.data.datautil / from pub.data.datautil import DataUtil)。每一個需要的模組都要這麼幹,因此,我特地寫了一個函數,來自動的處理這種情況:
import os,sysimport TestClassimport testfuncs;from TestClass import TestClass;def _prepareRelativeImport(layer=2): """ 為相對參照做準備,以便下層目錄中的模組,相對參照[本目錄]以及[父目錄]和[兄弟目錄]中的模組。 參數layer,表示引入到多少層父目錄。預設為2->引入本目錄和父目錄;3->引入本目錄、父目錄和祖父目錄。 """ import sys,os; curP=os.path.abspath(os.path.dirname(__file__)); oriP=curP;__package__=curP.rpartition(os.path.sep)[2]; print('\r\ncurdir=',curP); while layer>=0: layer-=1; if not curP in sys.path:sys.path.append(curP); pa=curP.rpartition(os.path.sep);curN=pa[2];pp=pa[0];os.chdir(pp); #if '__init__' in ''.join(os.listdir(curP)):__import__(curN); curP=pp; os.chdir(oriP);if __name__=='__main__': if not '__file__' in dir():__file__=os.path.abspath('.')+os.path.sep+"1.py"; _prepareRelativeImport(2) from TestClass import TestClass; from pub.test.TestClass import TestClass; from pub.data.CompareOperator import CompareOperators print('\r\nTest of RelativeImport done!')
2. 輸入
age = raw_input("How old are you? ")
height = raw_input("How tall are you? ")
weight = raw_input("How much do you weigh? ")print "So, you're %r old, %r tall and %r heavy." % (age, height, weight)
from sys import argvscript, first, second, third = argvprint "The script is called:", scriptprint "Your first variable is:", firstprint "Your second variable is:", secondprint "Your third variable is:", third
執行指令碼,輸出
$ python ex13.py first 2nd 3rdThe script is called: ex13.pyYour first variable is: firstYour second variable is: 2ndYour third variable is: 3rd
查看doc
windows:
python -m pydoc raw_input
linux:
pydoc raw_input
同樣也是輸入
>>>input("the meaning of life:")the meaning of life:2525
3.
print "helloworld!"raw_input("Press <enter>")
以上代碼加入最後一行之後雙擊這個.py檔案可以顯示輸出結果。。。原來沒想到。。。