Python-模組

HammerZe發表於2021-11-23

Python-模組

image

1、前言

在python中,一個py檔案就是一個模組,可以作為模組被匯入和引用,在python中使用模組會使得程式結構更加清晰,維護起來也更加方便。每次程式設計定義的變數,函式隨著py檔案的關閉就會被記憶體釋放,現在通過把這些方法放在py檔案中可以通過匯入的方式呼叫,極大的提升了程式的效率!

2、模組詳細

  • 定義:模組就是一系列功能的結合體

  • 模組的分類:

    • 內建模組
    • 第三方模組
    • 自定義模組
  • 模組的四種表現形式:

    • 使用python編寫的程式碼(.py檔案)
    • 已被編譯為共享庫或DLL的C或C++擴充套件
    • 包好一組模組的包(資料夾)(包裡面通常有一個雙下init.py檔案)
    • 使用C編寫並連結到python直譯器的內建模組

3、import句式

  • 想匯入py檔案,只需要使用import語句即可

  • 格式:import 模組名


1、內建模組

image

內建模組匯入示例

'''匯入內建模組'''
import time
time.sleep(1) # 一秒後執行print
print('累了,睡1秒')
# 結果
# 累了,睡1秒

2、自定義模組

image

自定義模組示例:

'''匯入自定義模組'''
'''test.py'''
print('聽說你想匯入我?')
a = 1
b = 2
'''module.py'''
# 匯入自定義模組
import test
if test.a>test.b:
    print('用匯入模組的值來比較,a大')
else:
    print('用匯入模組的值來比較,b大')
    
# 結果
# 聽說你想匯入我?
# 用匯入模組的值來比較,b大

'''module.py'''
# 匯入自定義模組
import test
import test
import test
import test

# 結果
# 聽說你想匯入我?

注意:多次匯入相同模組,只會執行一次


3、第三方模組

image

第三方模組示例:

python內的第三方模組,需要下載,只要找到想下載的模組,通過pip即可安裝,在pycharm安裝也非常方便,另外給大家推薦Anaconda,下載好好多第三方模組不需要下載。

  • pip安裝命令:pip install 包名/模組名

  • pycharm安裝步驟:

    • Settings>>Project>>Python interpreter
    • image

因為我使用的是pycharm,給大家舉個例子:

'''使用第三方模組'''
'''使用第三方模組'''
import requests
url = 'https://www.baidu.com/'
res = requests.get(url)
print(res.status_code)
print(res.text)
# 結果大家自己動動手叭~

4、import底層原理

  • import語句匯入模組之後,通過模組點的方式就可以使用到模組中所有的名字,並且肯定不會產生衝突!

示例如下:

image


image

  • 首次匯入模組發生的事:
    • 執行匯入檔案(import句式.py)產生該檔案的全域性名稱空
    • 執行test.py檔案
    • 產生test.py全域性名稱空間 執行test檔案內程式碼 將產生的名字全部存檔於test.py名稱空間
    • 在匯入檔名稱空間產生一個test的名字指向test.py全域性名稱空間
  • 圖示如下:
    image

4、from /import句式

image

  • from/import語句與import大致一樣,使用from/import句式可以直接引用被匯入檔案中的名字使用

test.py檔案上面定義好了,例項如下:

'''module.py'''
# 匯入自定義模組
from test import a

print(a)
a = a+1
print(a)
# 結果
聽說你想匯入我?
1
2
'''顯然module.py中沒有a,a被匯入到當前名稱空間,可以直接使用,也可以對a進行修改'''
  • from/import語句支援將檔案所有名字匯入
  • 格式:from 模組名(檔名)import *
'''module.py'''
# 匯入自定義模組
from test import *

print(a,b)

#結果
聽說你想匯入我?
1 2

匯入模組的擴充套件用法

  1. 起名

    既可以給模組名起別名也可以給模組中某個名字起別名

    例項如下:

    import test as t
    print(t.a)
    
    from test import a as A
    print(A)
    # a的結果都為1
    
  2. 連續匯入

    • 格式:import 模組1,模組2
    • 格式2:from 模組名1 import 名字1,名字2,名字3
    • 可以連續匯入多個模組,但是隻有當多個模組功能相似或者屬於同一個系列
    • 如果功能不同並且不屬於一個系列 那麼推薦分行匯入
    • import 模組名1
      import 模組名2
  3. 通用匯入

    格式:__ all __ = [‘名稱1’ , ‘名稱2’]

    例項如下:

    '''test.py'''
    print('聽說你想匯入我?')
    a = 1
    b = 2
    
    # 只允許使用名稱a
    __all__ = ['a']
    
    
    # 如果匯入所有名稱,只能使用a,使用其他名稱報錯
    '''module.py'''
    # 匯入自定義模組
    from test import *
    print(a,b)
    # NameError: name 'b' is not defined
    

5、模組匯入的順序

  1. 先從記憶體中查詢
  2. 再去內建模組中查詢
  3. 最後去sys.path系統路徑查詢(自定義模組)
  4. 最後如果沒有查詢到則報錯

例項如下:

import sys
print(sys.path)  
'''結果中第一個元素永遠是當前執行檔案所在的路徑'''


當某個自定義模組查詢不到的時候解決方案
	1.自己手動將該模組所在的路徑新增到sys.path中
    	import sys
        sys.path.append(r'E:\fourth\test.py')
    2.from...import...句式
    	from 資料夾名稱.資料夾名稱 import 模組名
        from 資料夾名稱.模組名稱 import 名字

6、補充知識

判斷檔案型別:

if __ name __ = ‘__ main __’: //後期會出一篇有關的教程

作用為判斷py檔案是否作為模組檔案還是執行檔案

迴圈匯入

  • 如果在程式設計的時候有迴圈匯入的情況,說明程式設計的不合理。

例如:


image

修改方法:

  • 調整順序:
    image

  • 呼叫函式

image


注意,在自定義模組名的時候,不要和內建模組名相同!


image


相關文章