国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

Python中包的創建與使用

2023-04-24 19:21:34
字體:
來源:轉載
供稿:網友

一個實際應用的程序往往有多個模塊、文件以及其它資源構成,為了清晰有效的組織這些程序,我們需要包來管理這些資源。Python中也支持包的概念。

Python的包是什么

Python包是存放程序模塊和子包的文件夾,是包含若干子包和模塊的命名空間。

每個包必須包含一個名為“__init__.py”的特殊文件,這個文件的內容可以為空,也可以包含導入模塊的數據或信息。

包內可以存放的資源

如何創建一個包

在Python創建一個包可以分為兩步:

(1)創建一個文件夾,并給這個文件夾一個合適的名字,文件夾的名字就是包的名字。

我們可以在操作系統準備創建包的目錄中直接創建,也可以在Python的集成開發環境中進行創建。

(2)在這個文件夾中創建__init__.py文件,這樣就把一個普通的文件夾轉換成了Python包。這個文件用于初始化包并列出包的所有模塊。也可以保持為空。

同樣可以在一個包里創建一個或多個子包,每個包中都要包含__init__.py文件。

Python中創建包和使用自定義包

如何使用一個包

用戶可以使用import導入定義的包。

其語法如下:

import packagename.subpackage1.subpackage2.modulename
import packagename.subpackage1.subpackage2.modulename as newModuleName

包使用的例子

下面先給出包及文件的組織情況:

在Common包中包含兩個子包:math和strings,math包中又包含兩個子包:basic和high。

在具體創建文件時,可以在這些文件夾下直接創建文件,也可以在創建完畢后拷貝到相應的文件中。

使用像Pycharm這種集成的開發環境,可以方便的創建Python包,并在相應的包中創建python文件。

文件suanshu.py中的內容如下:

'''
  求x+y的和
'''

def add(x, y):
    return x + y

'''
   求x - y的差
'''

def sub(x, y):
    return x - y

'''
  求x / y的商
'''

def div(x, y):
    if y == 0:
        raise('除數不能為0.')
    return x / y

'''
求x*y的積
'''

def mul(xy):
    return x * y

文件bijiao.py中的內容如下:

'''求最大值'''
def max(x,y):
    if x>=y:
        return x
    else:
        return y

'''求最小值'''
def min(x, y):
    if x <= y:
        return x
    else:
        return y

文件str_utils.py中的內容如下:

'''字符串轉大寫'''
def toUpper(s):
    return s.upper()

'''字符串轉小寫'''
def toLower(s):
    return s.lower()

'''字符串翻轉'''
def reverse(s):
    return s[::-1]

下面講解具體使用方法。

在Common所在的同一目錄中(注意不是在Common文件夾中)創建測試文件,如test.py。

(1)在test.py中導入若干方法

from Common.math.basic.suanshu import add,sub
x = 5
y = 3
print(add(x, y))
print(sub(x, y))
print(div(x, y))

輸出結果:

8
2
Traceback (most recent call last):
   File "D:/98progarm/python/test.py", line 7, in <module>
      print(div(x,y))
NameError: name 'div' is not defined. Did you mean: 'dir'?

結合代碼和運行結果,我們可以看出,通過from...import語法從Common.math.basic.suanshu中導入了addsub兩個方法,而沒有導入div方法,所以,前兩個輸出了正確的結果,而第3個輸出語句給出了NameError錯誤。

(2)導入整個模塊中的所有內容

可以直接使用下面的語法格式導入包:

import Common.math.basic.suanshu

使用這種導入包或模塊時,需要使用包的全名來使用相關功能。

import Common.math.basic.suanshu

x = 5
y = 3
print(Common.math.basic.suanshu.add(x, y))
print(Common.math.basic.suanshu.sub(x, y))
print(suanshu.div(x, y))

輸出結果:

8
2
Traceback (most recent call last):
  File "D:/98progarm/python/test.py", line 7, in <module>
     print(suanshu.div(x,y))
NameError: name 'suanshu' is not defined

從源程序和輸出結果可以看出,使用 import 包名.子包(模塊)方式引入的方式需要帶上包全路徑名稱。

為了使用上的方便也可以使用下面的方式給引入的包起個別名。

(3)導入包時給包起別名

import Common.math.basic.suanshu as m

x = 5
y = 3
print(m.add(x,y))
print(m.sub(x,y))
print(m.div(x,y))

輸出結果如下:

8
2
1.6666666666666667

從源程序可以看出導入包時給包起別名可以大大減輕書寫上的困難。

(4)使用import *導入全部子模塊

可以使用下面的語法導入某個包中的所有子模塊。

from package.subpackage import *

上面這個語句的含義是從package.subpackage包中導入所有模塊。

但這種語句并非我們想象的那樣:從package.subpackage導入所有模塊,它需要在需導入模塊所在的包的__init__文件中定義名為__all__的列表,在該列表中定義由 import * 需要導入的模塊名稱。

如,我們在basic這個包的__init__文件中添加了下面的語句:

__all__ = ["suanshu"]

然后修改test.py文件中的內容如下:

from Common.math.basic import *

x = 5
y = 3
print(suanshu.add(x,y))
print(suanshu.sub(x,y))
print(suanshu.div(x,y))

輸出結果如下:

8
2
1.6666666666666667

當然,我們也可以使用下面的形式導入一個模塊中的所有內容。

(5)導入一個模塊中的所有內容

 我們可以使用下面的語法格式導入一個模塊中的所有內容:

from package.subpackage.module import *

上面的語句含義是從子包subpackage導入module模塊中的所有內容,這樣,我們可以直接使用module定義的內容,而不必帶前綴。

from Common.math.basic.suanshu import *
import Common.math.high.bijiao as h

x = 5
y = 3
print(add(x,y))
print(sub(x,y))
print(div(x,y))
print(h.max(x,y))

輸出結果如下:

8
2
1.6666666666666667
5

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通州市| 图木舒克市| 青岛市| 厦门市| 大渡口区| 汽车| 宜春市| 赤城县| 临夏市| 独山县| 望都县| 图们市| 老河口市| 扎囊县| 山丹县| 浦北县| 北碚区| 赤水市| 兴义市| 长治县| 大理市| 荣成市| 确山县| 扬州市| 雅江县| 怀柔区| 砚山县| 彰化市| 张家口市| 望城县| 同江市| 诸暨市| 利辛县| 大田县| 喀喇沁旗| 天水市| 巴彦淖尔市| 喀喇| 临泽县| 贡觉县| 贺州市|