python基礎進階-模塊詳解
在我們實際開發的過程中,每個項目都會或多或少的調用一些相同的代碼。如果每次都把代碼復制粘貼進項目的話,非常的繁瑣,且容易出錯,python模塊很好的為我們解決了這個問題。python的模塊是以 .py 結尾的,而我們的python程序也是以 .py 結尾的,所以,python所有的代碼都可以看作為模塊。
模塊的好處是,可以調用自定義的模塊,也可以調用別人成熟的模塊。在程序需要的時候,使用 import 導入就可以直接使用了,非常的方便快捷。我們先來看看模塊的定義。
# 實例1,我們用實例來解釋模塊的定義,新建m1.py
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
"這裏是模塊的說明"
__author__="PyShadow"
b1=‘hello python‘
b2=666
b3=True
def func(x,y):
return ‘x * y = {0} ‘.format(x*y)
def func1():
return ‘666‘
# 第一行表示該程序可以在Unix/Linux/Mac直接運行
# 第二行表示采用utf-8編碼
# 接下來的字符串表示模塊的說明
# __author__代表的是編寫該模塊的作者
# 接下來的就是模塊的代碼,定義了b1,b2,b3三個變量,且定義了func函數
# 調用模塊
import Modulename
#調用模塊的函數
Modulename.functionname
# 調用模塊的變量
Modulename.varname
# 實例2,我們新建一個test.py文件,以此來調用 m1.py (實例1的代碼)
import m1
print(m1.b1)
print(m1.b2)
print(m1.b3)
print(m1.func(2,3))
>>>
hello python
666
True
x * y = 6
# 導入模塊m1,調用m1的變量以及函數
你會問了,如果出現一個和自定義模塊名稱相同的第三方模塊,我們該怎麽辦呢?這裏我們引入一個“包”Package。包就是模塊的集合,包可以容許有相同名稱的模塊。
# 如上圖所示,包 w1 和 test.py 在同一目錄下,w2 和 m1.py 、__init__.py 在同一目錄下,w2 目錄中有 m1.py 和 __init__.py。如果包裏面沒有__init__.py文件,則認為是普通目錄。我們把各個文件的代碼貼上來。__init__.py可以是空文件。
# w1/m1.py 的代碼
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
‘註釋‘
__author__="Shadow"
def func1():
return ‘hello python‘
def func2(x,y):
return ‘x * y = {0}‘.format(x*y)
# w1/w2/m1.py 的代碼
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
"註釋"
__author__="Shadow"
def func():
return "hello world"
# test.py 的代碼
import w1.m1
print(w1.m1.func1())
print(w1.m1.func2(2,3))
print("*"*15)
import w1.w2.m1
print(w1.w2.m1.func())
>>>
hello python
x * y = 6
***************
hello world
# 雖然兩個自定義模塊的文件名是一樣的,但是,加入到包裏,就不會出現重復的情況了。
# 包的調用方法為,包.文件名;調用模塊的函數,包.文件名.函數名;調用模塊的變量,包.文件名.變量。
當我們調用的模塊代碼比較多,但我們只用其中的某一個函數的時候,使用上述的代碼會把模塊中的變量、函數、類等都引入進來,造成了不必要的資源浪費。這裏說一下部分引入的概念,部分引入就是只引入我們需要的某些函數或者類,語法如下:
from module import xxx
# 實例1
from w1.m1 import func2
print(func2(2,3))
>>> 6
# 這裏引入了 w1.m1 模塊中的函數 func2 。使用這種部分引入後,我們在調用函數的時候,可以直接使用函數名稱。
我們也可以給模塊定義一個別名(也就是簡稱),方便調用。
import module as xxx
# 實例2
import w1.w2.m1 as m
print(m.func())
>>> hello world
# 我們把 w1.w2.m1 別名定義為 m,在調用的時候,直接使用 m 就可以調用。
接著,我們來說說模塊的定義域。定義模塊的時候,有些變量或者函數我們想給調用者用,有些不想給用。我們可以給變量或者函數前面加“_”或者“__”來告訴使用者,這些變量和模塊是不能調用的。"__author__" 是輸入特殊變量。
雖然我們說這些不能調用,但是python沒有機制來限制被調用。也就是大家約定俗成的,但是並沒有什麽x用。我們來看看實例:
# 實例1,定義和 test.py 同級別的模塊 m2.py
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
"註釋"
__author__="Shadow"
_a=‘func1‘
_b=‘func2‘
c=‘hello world‘
def _func1():
return _a
def _func2():
return _b
def func(n):
if n==1:
return _func1()
else:
return _func2()
# 以"_"開頭的都是非公開的,其他的為公開的。
# 實例2,修改test.py文件
import m2
print(m2.c)
print(m2.func(1))
>>>
hello world
func1
# 我們調用的是公開函數和公開變量
關註公眾號,了解更多!
python基礎進階-模塊詳解