Python中的模塊與包#學習猿地


## 模塊

> 定義的一個python的文件,后綴名為.py腊脱。這個文件被稱為模塊访得。

>

> 模塊中通常會定義一些相似的 類,函數(shù)等代碼內容陕凹,提供給別的程序引入后使用悍抑。

#### 系統(tǒng)模塊

> 系統(tǒng)模塊就是一個python的程序腳本,專門提供給我們自己的程序使用杜耙。它們是在安裝好python環(huán)境時搜骡,就已經(jīng)存在的,需要的時候可以使用 import 導入到程序中使用佑女。

>

> import logging记靡,json,time团驱。摸吠。。嚎花。

#### 自定義模塊

> 就是自己創(chuàng)建一個python腳本寸痢,定義一些類或方法,供別的腳本導入后使用贩幻。

例如定義一個My.py的文件如下

```python

# My.py

# 定義類

class MyException():

? ? pass

# 定義函數(shù)

def func():

? ? print('我是一個模塊中的func函數(shù)')


# 定義變量

love = 'iloveyou'

```

在定義一個python腳本就可以引入上面的文件作為模塊使用

main.py

```python

# main.py 在當前腳本中如果需要使用一些已經(jīng)定義好的功能時轿腺,可以選擇對應的模塊两嘴,導入后使用

# 使用系統(tǒng)模塊 time

import time

print(time.time())

# 使用自定義異常處理 模塊

import My

# 使用模塊中定義的類

obj = My.MyException()

print(obj)

# 使用模塊中的函數(shù)

My.func()

# 使用模塊中定義的變量

print(My.love)

# 想使用模塊中的內容時,除了導入模塊族壳,還可以在在指定模塊中導入指定的內容

from My import love? # 導入My模塊中的love變量

from My import love as lv # 導入My模塊中的love變量憔辫,起個別名

print(love)

print(lv)

```

#### 模塊中的測試代碼

```python

# 自定義模塊中,通常只是去定義類或函數(shù)仿荆,變量贰您,等,并不調用

# 如果在自定義模塊中拢操,想要寫一些測試代碼锦亦,在當前模塊作為主程序使用時執(zhí)行,

# 而作為模塊被別的程序導入時不執(zhí)行令境,那么可以把測試代碼寫到 下面代碼塊中

if __name__ == '__main__':

? ? print('這個位置寫的代碼只有當前腳本被直接運行時觸發(fā)')


# 特殊的變量 __name__

# __name__ 這個變量杠园,在當前腳本作為模塊被別的程序導入是 __name__的值 是當前這個模塊的名稱

#在當前腳本被作為主程序直接由python解析運行時,__name__的值 是 '__main__'

name = __name__

print(name)

```

## 包

> 包可以理解為是一個文件夾舔庶,里面包含了多個python文件抛蚁。

### 包的結構:

```python

'''

package/? # 包(文件夾)

├── __init__.py? # 包中的初始化文件

├── a.py? ? ? ? # 包中的模塊

├── b.py

└── ps/? # 子包

? ├── __init__.py

? ├── c.py

? └── d.py

'''

```

### 包的使用方法

```python

# 1. 直接把包當作模塊導入,可以用的內容是 __init__.py文件中定義的

# 不推薦這種用法

import package

package.funcpa()

#2惕橙。 可以導入模塊中的所有內容

# 注意這個內容是由 __init__.py文件中定義的 __all__ 這個變量指定的模塊

# 好處是可以直接導入指定的所以模塊瞧甩,并且使用時,直接使用指定的模塊名即可

from package import? *

a.funca()

b.funcb()

# 3弥鹦。 導入指定包中的指定模塊

from package import a

a.funca()

# 4肚逸。從指定包的指定模塊中導入指定的內容

from package.b import funcb

funcb()

# 5。從指定包的子包中導入模塊

from package.ps import c

c.funcc()

# 6彬坏。 從指定包的子包的指定模塊中導入指定內容

from package.ps.d import funcd

funcd()

```

## 導入方式的分類

### 絕對導入

```

# 絕對導入的方式會使用[搜索路徑]去查找和導入指定的包或模塊

import 模塊

import 包

import 包.模塊

from 模塊 import 內容

from 包 import 模塊

from 包.模塊 import 內容

```

### 相對導入

**注意:相對導入只能在非主程序的模塊中使用朦促,不需要直接運行的模塊文件**

```

# 相對導入

from .包名/模塊名 import 模塊/內容

from ..包名/模塊名 import 模塊/內容

. 代表當前

..代表上一級

```

### 搜索路徑

> 在導入模塊或包時,程序查找的路徑

```python

'''

主要的搜索路徑

1. 當前導入模塊的程序所在的文件

2. python的擴展目錄中 C:/Users/username/AppData/local/.../Python37/lib

3. python解釋器指定的其它 第三方模塊位置 /lib/sitepackages

'''

# 在當前腳本中查看 包或模塊 的 搜索路徑

import sys

print(sys.path)

'''

[?

? ? '',

? ? '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',

? ? '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',

? ? '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',

? ? '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'

]

'''

# 可以自己定義一個路徑栓始,加入到搜索路徑中

sys.path.append('/Users/yc/Desktop')

```

## 單入口程序

> 單入口程序是指整個程序都是經(jīng)過一個主程序文件在運行思灰,其它程序都封裝成了包或模塊

```python

# 單入口文件是作為程序直接被運行的唯一文件,其它都是作為模塊或包混滔,被導入單入口中去執(zhí)行

'''

ATM/

|---- main.py? # 當前程序的主入口文件,單入口文件,唯一直接運行的文件

|---- package/ # 主要程序模塊包

|---- |----- __init__.py? # 包的初始化文件

|---- |----- View.py? ? ? # 視圖函數(shù)模塊

|---- |----- Controller.py# 控制器模塊

|---- |----- Card.py? ? ? # 銀行卡模塊

|---- |----- User.py? ? ? # 用戶模塊

|---- databases/ # 數(shù)據(jù)存儲文件夾

|---- |---- user.txt

|---- |---- user_id_card.txt

main是程序的主入口文件歹颓,會被直接作為主程序運行坯屿,所以main.py文件中必須使用 絕對導入 方式

'''

```

掌握學習方法,不如會彎道超車巍扛!

學習猿地:成就自己的只需一套精品领跛!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撤奸,隨后出現(xiàn)的幾起案子吠昭,更是在濱河造成了極大的恐慌喊括,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢棚,死亡現(xiàn)場離奇詭異郑什,居然都是意外死亡,警方通過查閱死者的電腦和手機蒲肋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門蘑拯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兜粘,你說我怎么就攤上這事申窘。” “怎么了孔轴?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵剃法,是天一觀的道長猴凹。 經(jīng)常有香客問我规个,道長,這世上最難降的妖魔是什么械姻? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任悍引,我火速辦了婚禮恩脂,結果婚禮上,老公的妹妹穿的比我還像新娘趣斤。我一直安慰自己俩块,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布浓领。 她就那樣靜靜地躺著玉凯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪联贩。 梳的紋絲不亂的頭發(fā)上漫仆,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音泪幌,去河邊找鬼盲厌。 笑死,一個胖子當著我的面吹牛祸泪,可吹牛的內容都是我干的吗浩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼没隘,長吁一口氣:“原來是場噩夢啊……” “哼懂扼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阀湿,失蹤者是張志新(化名)和其女友劉穎赶熟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陷嘴,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡映砖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罩旋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啊央。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涨醋,靈堂內的尸體忽然破棺而出瓜饥,到底是詐尸還是另有隱情,我是刑警寧澤浴骂,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布乓土,位于F島的核電站,受9級特大地震影響溯警,放射性物質發(fā)生泄漏趣苏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一梯轻、第九天 我趴在偏房一處隱蔽的房頂上張望食磕。 院中可真熱鬧,春花似錦喳挑、人聲如沸彬伦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽单绑。三九已至,卻和暖如春曹宴,著一層夾襖步出監(jiān)牢的瞬間搂橙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工笛坦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留区转,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓版扩,卻偏偏與公主長得像蜗帜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子资厉,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容