初識Python
- 2019 年 10 月 6 日
- 筆記
(目錄)
列表和元組
列表就是所謂的數組,它擁有着數組的屬性,但是在PY中,列表中封裝了許多方法。
元組就是靜態數組,靜態理解為不可變,元組的內容一旦創建之後就定了,不能通過代碼來修改元組的內容和大小。雖然一個元組的內容不可以改變,但是可以將兩個元組的內容合併成一個元組。然而,對於長度為1~20的元組,即使它們不在被使用,它們的空間也不會立刻還給系統,而是留待未來使用。這意味着當未來需要一個同樣大小的新的元組時,我們不再需要向操作系統申請一塊內存來存放數據,因為我們已經有了預留的空間。這樣會話費更少的時間。
字典
與列表和元組不同,字典存儲的是鍵值對,鍵是不可以重複的。
副本問題
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。
def change(num): num=10 a=1 change(a) print("The a is ",a)
The a is 1
如上代碼所示,有一個change函數,此函數的內容是想改變a的值。在函數調用中並未改變a的值,這是因為在函數調用過程中產生了副本,改變的只是副本的值,而不是對象本體。
可變參數
def myprint(arg,*vartuple): print("輸出:",arg,end=" "), for var in vartuple: print(var,end=" ") return myprint(10,20,30)
註:因為print每次調用過程中都會自動換行,若需要不換行,則可以在print函數內部增加end=「 」, 雙引號中的內容可自擬。(此方法針對與3.x版本)。若是2.x版本,則可以在print後面加「,」。
參數列表解析
import sys, getopt def main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["help","ifile=","ofile="]) except getopt.GetoptError: print ('test.py -i <inputfile> -o <outputfile>') sys.exit(2) for opt, arg in opts: if opt in ("-h","--help"): print( 'help:test.py -i <inputfile> -o <outputfile>') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print( '輸入的文件為:', inputfile) print('輸出的文件為:', outputfile) if __name__ == "__main__": main(sys.argv[1:])
輸出結果:
python test.py -i in.txt -o out.txt 輸入的文件為: in.txt 輸出的文件為: out.txt python test.py --ifile in.txt --ofile out.txt 輸入的文件為: in.txt 輸出的文件為: out.txt python test.py -h help:test.py -i <inputfile> -o <outputfile>
代碼解析:
- 處理所使用的函數叫getopt(),因為是直接使用import導入的getopt模塊,所以要加上限定getopt才可以。
- argv代表執行py文件的參數。
- "hi: o:"代表執行文件的代碼選項:-h -i -o。其中i和o後面分別有「:」,則代表-i選項和-o選項後面必須加參數。
- ["help","ifile=","ofile="]代表的是長選項,若長選項後面未加「=」,則代表該選項後面不加參數;若長選項後面有「=」可用–ifile和–ofile,用法與-i和-o相同。
-
一個python的文件有兩種使用的方法,第一是直接作為腳本執行,第二是import到其他的python腳本中被調用(模塊重用)執行。因此
if __name__ == '__main__'
的作用就是控制這兩種情況執行代碼的過程,在if __name__ == '__main__'
下的代碼只有在第一種情況下(即文件作為腳本直接執行)才會被執行,而import到其他腳本中是不會被執行的。每個python模塊(python文件,也就是此處的test.py和import_test.py)都包含內置的變量__name__,當運行模塊被執行的時候,__name__等於文件名(包含了後綴.py);如果import到其他模塊中,則__name__等於模塊名稱(不包含後綴.py)。而「main」等於當前執行文件的名稱(包含了後綴.py)。進而當模塊被直接執行時,
if __name__ == '__main__'
結果為真