python三種導入模塊的方法


做為python初學者,有時候搞不清楚導入模塊的作用。

直接導入模塊

通常模塊為一個文件,直接使用import來導入就好了。可以作為module的文件類型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。

形式:import modname

  • 模塊是指一個可以交互使用,或者從另一Python 程序訪問的代碼段。

  • 只要導入了一個模塊,就可以引用它的任何公共的函數、類或屬性

  • 模塊可以通過這種方法來使用其它模塊的功能。

  • 用import語句導入模塊,就在當前的名稱空間(namespace)建立了一個到該模塊的引用。

  • 當使用在被導入模塊中定義的函數時,必須包含模塊的名字,不能只使用 funcname,而應該使用 modname.funcname。

import os  # 導入os模塊
def test_import():
    # 使用os的listdir方法,列出指定目錄的文件
    file=os.listdir('../config')
    print(file)

導入模塊方法

形式:
from modname import funcname

from modname import fa, fb, fc

from modname import *

  • funcname 被直接導入到本地名字空間,所以它可以直接使用,而不需要加上模塊名的限定。

  • 星號* 表示,該模塊的所有公共對象(public objects)都被導入到當前的名稱空間,也就是任何只要不是以”_”開始的東西都會被導入。

  • modname沒有被定義,所以modname.funcname這種方式不起作用。

  • 如果funcname如果已經被定義,它會被新版本(該導入模塊中的版本)所替代。

  • 如果funcname被改成指向其他對象,modname不能不會覺察到。

from os import listdir
def test_import2():
    # 列出指定目錄的文件
    file=listdir('../config')
    print(file)

建議

  • 1)如果你要經常訪問模塊的屬性和方法,且不想一遍又一遍地敲入模塊名,使用 from module import。

  • 2)如果你想要有選擇地導入某些屬性和方法,而不想要其它的,使用 from module import。

  • 3)如果模塊包含的屬性和方法與你的某個模塊同名,你必須使用import module來避免名字沖突。

  • 4)盡量少用 from module import * ,因為判定一個特殊的函數或屬性是從哪來的有些困難,並且會造成調試和重構都更困難。

內建函數__import__()

  • import() 函數用於動態加載類和函數 。

  • 如果一個模塊經常變化就可以使用 import() 來動態載入。

  • import() 的參數是一個字符串,這個字符串可能來自配置文件,也可能是某個表達式計算結果。

例如:mymodule = import (’module_name’)

a.py 文件代碼:

#!/usr/bin/env python    
#encoding: utf-8  
 
import os  
 
print ('在 a.py 文件中 %s' % id(os))

test.py 文件代碼:

#!/usr/bin/env python    
#encoding: utf-8  
 
import sys  
__import__('a')        # 導入 a.py 模塊

執行 test.py 文件,輸出結果為:
在 a.py 文件中 4394716136

從包中導入模塊

通常包總是一個目錄,可以使用import導入包,或者from + import來導入包中的部分模塊。

包目錄下為首的一個文件便是 init.py。然后是一些模塊文件和子目錄,假如子目錄中也有 init.py 那么它就是這個包的子包了。

from test_requests.api.base_api import BaseApi


class WeWork(BaseApi):
    corpid = 'ww0ff069f77ced0d7a'
    @classmethod   # 設置為類方法,不需要實例化就可以使用
    # 每個應用都需要獲取token,所以抽取出來
    def get_token(cls, secret):  # 每個應用的secret都不同,所以設置為變量
        base_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
        params = {'corpid':cls.corpid, 'corpsecret':secret}
        r = requests.get(base_url,params=params)
        return r.json()['access_token']  # 提取出access_token

  • 用逗號分割模塊名稱就可以同時導入多個模塊

  • 模塊導入時可以使用 as 關鍵字來改變模塊的引用對象名字


參考:cnblogs.com/allenblogs/archive/2011/05/24/2055149.html

延申學習:
https://blog.csdn.net/weixin_38256474/article/details/81228492

https://zhidao.baidu.com/question/332929968301799565.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM