溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析

發(fā)布時(shí)間:2020-09-08 09:57:24 來(lái)源:腳本之家 閱讀:156 作者:Bigberg 欄目:開(kāi)發(fā)技術(shù)

本文實(shí)例講述了Python動(dòng)態(tài)導(dǎo)入模塊的方法。分享給大家供大家參考,具體如下:

一、正常導(dǎo)入模塊

正常模塊導(dǎo)入方式: import module(模塊路徑)

同時(shí)導(dǎo)入多個(gè)模塊:

import os,sys,socket

二、動(dòng)態(tài)導(dǎo)入模塊

動(dòng)態(tài)導(dǎo)入模塊允許我們通過(guò)字符串形式來(lái)導(dǎo)入模塊

2.1 __import__函數(shù),接受一個(gè)字符串參數(shù)

import os, sys
my_sys = __import__('sys')
my_os = __import__('os')
print(sys.version)
print(my_sys.version)
print('-------------')
print(os.getcwd())
print(my_os.getcwd())

輸出:

3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
-------------
G:\python\untitled\study8
G:\python\untitled\study8

我們將sys, os 模塊名當(dāng)中參數(shù)傳入__import__函數(shù)中,可以看出my_sys 和my_os 其實(shí)就是相當(dāng)于 os , sys 模塊了。

2.2 __import__函數(shù)導(dǎo)入自己的模塊

我們?cè)趌ib包中有一個(gè)test.py模塊,我們?nèi)绾瓮ㄟ^(guò)__import__函數(shù)來(lái)導(dǎo)入該模塊呢?

# test.py內(nèi)容
class Person(object):
  def __init__(self):
    self.name = 'bigberg'
# 導(dǎo)入模塊
mod = __import__('lib.test') # 相當(dāng)于獲取了 lib 的路徑
print(mod)
obj = mod.test.Person()
print(obj.name)

輸出:

<module 'lib' from 'G:\\python\\untitled\\study8\\lib\\__init__.py'>
bigberg

2.3 動(dòng)態(tài)導(dǎo)入模塊列表

moduleNames = ['sys', 'os', 'socket']
print(type(map))
# 在python3 map函數(shù)不在是內(nèi)置函數(shù),而是class,返回的結(jié)果是 可迭代對(duì)象
print(isinstance(map(__import__, moduleNames), Iterator))
modules = list(map(__import__, moduleNames))
print(modules[0].version)

輸出:

<class 'type'>
True
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]

現(xiàn)在的modules[0] 就相當(dāng)于 sys 模塊了。

2.4 importlib 模塊

動(dòng)態(tài)導(dǎo)入模塊時(shí),python官方建議使用importlib模塊,我們同樣導(dǎo)入lib/test.py

import importlib
mod = importlib.import_module('lib.test') # mod相當(dāng)于 test.py本身了,于上例不同
print(mod)
obj = mod.Person()
print(obj.name)

輸出:

<module 'lib.test' from 'G:\\python\\untitled\\study8\\lib\\test.py'>
bigberg

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程》

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI