一、自定義模塊與使用 |
python模塊說明:類似於函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個復雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),多個 .py 文件組成的代碼集合就稱為模塊。
模塊分三種:
- 內置模塊
- 第三方模塊
- 自定義模塊
開始自定義模塊:
1.創建模塊
自定義模塊可以是單個以.py結尾的文件,也是可以多個,當有多個.py文件組成一個模塊時我們需要以.用到__init__.py文件來初始化它。
demo:
新建一個命名my_name.py(注意不要和已經有的模塊同名)的文件,如圖:
代碼塊:

#/usr/bin/env python # -*- coding:utf-8 -*- #Author:W-D import sys def name(): print("my name is wd")
2.導入模塊
導入模塊大致有以下幾種方式:
import module import module.xx.xx from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
導入模塊其實就是告訴Python解釋器去解釋那個py文件
- 導入一個py文件,解釋器解釋該py文件
- 導入一個包,解釋器解釋該包下的 __init__.py 文件
demo:
#/usr/bin/env python # -*- coding:utf-8 -*- #Author:W-D import my_name my_name.name() 結果: my name is wd
3.以上的demo都是在同一目錄並且在"./"目錄下,我們知道python找模塊是通過path變量進行搜索,所以我們也可以將自己定義的模塊直接放到python的path變量中,這樣就可以直接導入了。
path路徑獲取方式:
#/usr/bin/env python # -*- coding:utf-8 -*- #Author:W-D import sys print(sys.path) 結果: C:\Python35\python3.exe F:/pyproject/mode2/test.py ['F:\\pyproject\\mode2', 'F:\\pyproject', 'C:\\Python35\\python35.zip', 'C:\\Python35\\DLLs', 'C:\\Python35\\lib', 'C:\\Python35', 'C:\\Python35\\lib\\site-packages']
4.不同目錄間進行模塊調用。
場景:當我們開發了一個模塊,要導入使用時候,發現目錄根本不在path變量里面,無法導入,此時我們就需要動態的將當前文件的目錄加載到path里面,sys.path是一個list,我們通過append方法追加進去。
demo:
import sys import os project_path=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_path)
二、關於if __name__==__main__的解釋 |
在解釋之前首先我們看下__name__這個變量存的是什么:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D print(__name__) 結果: __main__
結果分析:當我們運行的程序的時候,__name__這個內置變量值就是__main__。
下面我們來看下導入模塊時候__name__變量值:
test.py代碼:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D print("this is before if __name__:%s"%__name__) if __name__=='__main__': print("this is after if __name__:%s"%__name__)
導入test模塊並執行
#/usr/bin/env python # -*- coding:utf-8 -*- #Author:W-D import test
結果:
this is before if __name__:test
可以看到,此時變量__name__值為模塊名,並沒有執行if中的語句,結果只有一條。
綜上分析:
if __name__=='__main__'說白了就是判斷__name__變量是不是等於__main__,當執行文件本身時候__name__變量等於main,此時判斷成立並執行判斷語句中的代碼,當調用該模塊的時候__name__並不等於__main__條件不成立,不執行判斷下面的語句,可以認為為了調試模塊,因為在模塊導入的時候並不執行if下面的語句。