'''模組匯入過程:0.先判斷sys.modules字典中檢視模組是否已經存在,如存在則不做任何操作
1.從sys.path路徑下找到模組
2.建立模組的命名空間
3.把檔案中的名字都放到這個命名空間裡
'''# import sys
# print(sys.path)
# import modue1 # import只匯入一次,匯入時會執行一邊模組中的**,會輸出'this is func1'
# print(sys.modules['modue1']) #
# import modue1 # 沒有任何輸出
# import modue1 # 沒有任何輸出
# 模組匯入可以改變模組名
# import modue1 as md1
# md1.func1()
'''編碼規則:匯入順序
import 內建模組
import 擴充套件模組
import 自定義模組
'''# 可以從模組中的匯入方法 -- 注意:當前如果有乙個func1函式,且定義在匯入後則使用當前的
# def func1():
# print('current func1')
# from modue1 import func1
# func1() # this is func1
# from modue1 import func1
# def func1():
# print('current func1')
# func1() # current func1
'''修改modue1**為:
# variable = 100
def func1():
print('this is func1',variable)
if __name__ == '__main__':
func1()
'''# from modue1 import func1
# # func1()
# variable = 200
# func1() # nameerror: name 'variable' is not defined
# 匯入的方法始終呼叫模組中的邊量
# __all__列表的作用
'''修改modue1:
__all__ = ['variable']
variable = 100
def func1():
print('this is func1',variable)
if __name__ == '__main__':
func1()
'''# from modue1 import *
# print(variable) # 輸出100
# func1() # nameerror: name 'func1' is not defined
# from modue1 import variable,func1
# print(variable) # 100
# func1() # this is func1 100
# __all__在使用import * 時限制匯入在__all__列表中的名字
# 在包外使用包
# 使用import
# import glance.api.policy
# glance.api.policy.get()
# import glance.api.versions
# glance.api.versions.create_resource('test.conf')
# import glance.api.policy.get 丟擲異常
# 使用from ... import ...
# from glance.api import policy
# policy.get()
# from glance.api.policy import get
# get()
# from glance import api.policy 丟擲異常
# 注意: '.'的左邊必須是包,from ... import ...匯入時,import後面不能再帶'.'
#versions.py
def create_resource(conf):
print('from version.py: ',conf)
# 絕對匯入 -- pycharm 會把當前所在目錄以及專案的絕對路徑新增倒sys.path中
# import sys
# print(sys.path[0],'\n',sys.path[1])
# from glance.cmd import manage
# manage.main()
# 如何讓包可以關聯匯入
# import glance
# glance.api.policy.get() # attributeerror: module 'glance' has no attribute 'api'
# 利用__init__.py
'''glance/__init__.py
from glance import api
'''# import glance
# glance.api.policy.get() # attributeerror: module 'glance.api' has no attribute 'policy'
'''glance/__init__.py
from glance import api
glance/api/__init__.py
from glance.api import policy
'''# import glance
# glance.api.policy.get() # from policy.py
'''匯入glance時,執行glance下的__init__.py:from glance import api
所以api也被匯入了,api包匯入時,glance/api/__init__.py又被執行了
所以policy也被匯入了,此時只匯入glance則整個包鏈全部匯入了
'''# 但是絕對匯入整個報的結構不能改變,否則匯入不成功,例如把api放到glance/newdir下,再次匯入則失敗了
# 相對匯入
'''glance/__init__.py
from . import api
glance/api/__init__.py
from . import policy
'''# import glance
# glance.api.policy.get() # from policy.py
# 相對匯入可以任意改變包的目錄結構,例如把api放到glance/newdir下,再次匯入依然可以成功
# import glance
# glance.newdir.api.policy.get() # from policy.py
# 相對匯入如果在包的內部無法匯入其它模組
# 在policy.py中
# from .. import cmd
# cmd.manage.main() # valueerror: attempted relative import beyond top-level package
Python之模組與包
a 在 python 中,乙個.py檔案就稱之為乙個模組 module 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 b 呼叫函式時用import a getpass模組提供了可移植的密碼輸入 import getpass getpass.getpass b ...
python之模組與包
包是一種通過使用模組名來組織python模組命名空間的方式 無論是import形式還是from.import形式,凡是在匯入語句中 而不是在使用時 遇到帶點的,都要第一時間提高警覺 這是關於包才有的匯入語法 包的本質就是乙個包含 init py檔案的目錄 凡是在匯入時帶點的,點的左邊都必須是乙個包 ...
Python之模組與包
通常 乙個模組就是乙個包含了python定義和宣告的檔案 檔名就是模組名字加上.py的字尾 模組可以被匯入使用。但import載入的模組分為四個通用類別 1.使用python編寫的.py檔案 2.已被編譯為共享庫或dll的c或c 擴充套件 3.把一系列模組組織到一起的資料夾 注 資料夾下有乙個 in...