python之import模組及包的呼叫

2022-08-23 21:33:12 字數 3615 閱讀 8936

模組概念

在python中,乙個.py檔案就稱之為乙個模組(module)。使用模組組織**,最大的好處是大大提高了**的可維護性

模組一共三種:python標準庫、第三方模組、應用程式自定義模組。

相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。

模組匯入

import語句

1 import module1[, module2[,... modulen]
import乙個模組的實質就是把這個python檔案從頭到尾執行一遍

import模組的查詢模組的順序

1、先從當前目錄下找

2、當前目錄下找不到的話,在從sys.path的路徑找

從上面兩個目錄都找不到,那就報錯

每次import的時候,都會相應的開闢記憶體空間存放被import的內容,但是與呼叫import的檔案開闢的記憶體空間相互獨立。例如import foo.py在新建的命名空間裡執行原始檔(foo.py)**時,所有對全域性命名空間的引用或修改,都是以foo.py為準。

注意:乙個模組可以在當前位置import多次,但是只有第一次匯入會執行內容,其他的都為引用記憶體

更改呼叫名稱:將logging更改為log

1 import logging as log

2 log.critical("www")

from...import語句

1 from modname import name1[, name2[, ... namen]]
這個宣告不會把整個modulename模組匯入到當前的命名空間中,只會將它裡面的name1或name2單個引入到執行這個宣告的模組的全域性符號表。

moudel_name.py

# -*- coding:utf-8 -*-

print("this is module_name.py")

name = 'hello'

def hello():

print("hello")

module_test04.py

# -*- coding:utf-8 -*-

import module_name

def a():

module_name.hello()

print("fun a")

def b():

module_name.hello()

print("fun b")

a()b()

執行結果:

e:\pythonimport>python module_test04.py

this is module_name.py

hello

fun a

hello

fun b

多個函式需要重複呼叫同乙個模組的同乙個方法,每次呼叫需要重複查詢模組。所以可以做以下優化:

module_test05.py

# -*- coding:utf-8 -*-

from module_name import hello

def a():

hello()

print("fun a")

def b():

hello()

print("fun b")

a()b()

執行結果:

e:\pythonimport>python module_test04.py

this is module_name.py

hello

fun a

hello

fun b

可以使用"from module_name import hello"進行優化,減少了查詢的過程。

包的呼叫

為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。

每乙個包目錄下面都會有乙個__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄(資料夾),而不是乙個包。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是對應包的名字。呼叫包就是執行包下的__init__.py檔案。

跨包呼叫(當前目錄下有modulepack1包):

1 from modulepack1[.modulepack2] import module
如果當前目錄下能夠找到要呼叫的包,可以直接from包import模組,如果當前目錄找不到要呼叫的包,需要向sys.path新增包的所在絕對路徑。

import乙個包名,就等於執行了這個包下的__init__檔案。

示例:

在nod1裡import  hello是找不到的,需要手動新增包路徑,如果找到那是因為pycharm給加了不必要的路徑,以命令列執行為準。

1 import sys,os

2 base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #__file__獲取執行檔案相對路徑,整行為取上一級的上一級目錄

4 import hello

5 hello.hello1()

將包設定為程式**的根目錄

模組呼叫測試

1 if __name__=='__main__':  #__name__方法判斷

2 print('ok')

在乙個py模組直接執行print(__name__)會輸出__main__,表示當前這個檔案屬於執行檔案,如果從其他的py模組中匯入乙個py模組,執行被匯入的py模組中的print(__name__)會輸出被匯入的模組的模組名稱,那麼if判斷就不會成功,所以匯入的時候不會執行判斷內的**。

主要用在除錯功能,即乙個模組被呼叫的時候不執行內容,而自己除錯模組的時候可以順利的執行模組內容。

內建函式

可以通過 "print(dir(__builtins__))" 檢視python中的內建函式

非內建函式需要使用"import"匯入。python中的模組檔案在"安裝路徑\python\python35\lib"目錄下。

python 模組相互import

模組a中import b,而在模組b中import a。這時會怎麼樣呢?這個在python列表中由robertchen給出了詳細解釋,抄錄如下 a.py from b import d class c pass b.py from a import c class d pass 為什麼執行a的時候不...

A09 Python基礎之import 模組

在 python 用 import 或者 from import 來匯入相應的模組。接下來以 time 模組為例 1 將整個模組匯入,例如 import time,在引用時格式為 time.sleep 1 2 將整個模組中全部函式匯入,例如 from time import 在引用時格式為 slee...

python基礎之import模組匯入和包的呼叫

模組概念 在python中,乙個.py檔案就稱之為乙個模組 module 使用模組組織 最大的好處是大大提高了 的可維護性 模組一共三種 python標準庫 第三方模組 應用程式自定義模組。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但...