python基礎8之自定義模塊、if __name__==__main__:解釋


一、自定義模塊與使用

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")
code

 

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下面的語句。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM