做為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