與perl語言不同,一個python腳本就是一個模塊,,而包則是多個模塊組成的功能完善的整體,。對于一個package而言,其文件結(jié)構(gòu)示意如下 wes/ __init__.py quality_control/ __init__.py fastp.py cutadapt.py mapping/ __init__.py bwa.py bowtie.py snp_calling/ __init__.py gatk.py samtools.py 最外層是包的名稱,內(nèi)層的文件夾下是不同的子模塊,,為了區(qū)分普通的文件路徑和python包,,在每一層文件夾下都必須有一個名稱為__init__.py文件,該文件用于定義模塊初始化的一些屬性,,如果沒有特殊要求,,該文件內(nèi)容為空即可。 模塊到包的變化,,只需要遵守特定的文件結(jié)構(gòu)即可,,而普通的python腳本作為一個模塊來使用,則有一些注意事項,。 模塊從形式上看和普通的python腳本是一樣的,,也是由常量,函數(shù),,類,,方法等定義構(gòu)成,,唯一不同的是,,其函數(shù)執(zhí)行的代碼,需要防止在特定的地方,。 模塊在第一次導入時,,會自動執(zhí)行主程序中的內(nèi)容,通常情況下,,我們只需要使用模塊中定義的方法,,而不希望在導入模塊時,就去執(zhí)行其中的代碼,。通過__name__屬性,。可以實現(xiàn)模塊導入時其主程序中的代碼不執(zhí)行,,而單獨運行該模塊時,,又可以執(zhí)行主程序中的代碼。實現(xiàn)的方式如下 if __name__ == '__main__': print('模塊單獨運行') else: print('模塊被導入') 當__name屬性的值為__main__時,,說明該模塊作為一個腳本在單獨運行,,相反的,當值不為__main__時,,說明該模塊被導入,,通過這個if判斷,將對應的代碼放置在不同的分支中,,就可以將兩種情況下需要執(zhí)行的代碼區(qū)分開,,這也是為何python腳本推薦寫成上述標準格式的原因。 ·end· |
|