1. 程式人生 > >python基礎進階-模塊詳解

python基礎進階-模塊詳解

{0} 什麽 __init__ 過程 特殊 urn 三方 圖片 需要

在我們實際開發的過程中,每個項目都會或多或少的調用一些相同的代碼。如果每次都把代碼復制粘貼進項目的話,非常的繁瑣,且容易出錯,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基礎進階-模塊詳解