執行及模組檔案及模組檔案的查詢順序
阿新 • • 發佈:2021-11-23
目錄
面向過程程式設計
面向過程程式設計就好比在設計一條產品流水線 # 使用者註冊功能 1.獲取使用者名稱和密碼 2.組織成固定的格式 3.檔案操作寫入檔案 '''面向過程程式設計的缺陷在於:一旦要修改功能,那麼需要整體改造(牽一髮而動全身)''' def get_info() username = input('username>>>').strip password = input('password>>>').strip if len(username) == 0 or len(password) == 0: print('密碼不能是空') user_idf = { '1':'admin' '2':'user' } print(user_idf) choice = input('請選擇您的身份').strip() if choice in user_idf: id = user_idf.get(choice) return deal_data(username, password, id) else: print('輸入不合法') return def deal_data(username, password, id): data = '%s|%s|%s\n' % (username, password, id) return save_data(data) daf save_data(data): with open(r'a.txt', 'a', encoding='utf8') as f: f.write(data) print('註冊成功) print(data)
模組簡介
python語言 最早起源於linux運維,膠水語言,調包俠 1.什麼是模組? # 模組:一系列功能的結合體,而函式是一個功能的集合體,因此模組可以看成一堆函式的集合體 2.為什麼要用模組? 為了提升開發效率(站在巨人的肩膀) 3.模組三種來源? 1.內建的(python直譯器自帶能夠直接匯入使用) 2.第三方的(別人寫好發不在網上的,需要先下載後使用) 3.自定義的(自己寫的) 1.使用python編寫的程式碼(.py檔案) 2.已被編譯為共享庫或DLL的C或者C++擴充套件 3.包好一組模組的包(資料夾) # 包就是多個py檔案(模組)的集合 包裡面通常會含有一個__init__.py檔案(將滑鼠放置到資料夾上會顯示 parkage ) 4.使用c編寫並連結到python直譯器的內建模組
import句式
# 學習模組時,一定要區分誰是匯入檔案誰是模組檔案 import md # 匯入py檔案模組 檔案字尾一定不要加 # (1)多次匯入相同模組,只會執行一次 首次匯入模組發生的事情: 1.執行匯入檔案(import句式.py)產生該檔案的全域性名稱空間 2.執行模組檔案 3.產生模組全域性名稱空間,執行模組檔案內程式碼,將產生的名字全部存檔於模組的名稱空間 4.在匯入檔名稱空間產生一個模組的 名字 指向 模組全域性名稱空間 (2)import句式匯入模組之後: 通過模組名+點的方式就可以使用到模組中所有的名字,並且肯定不會產生衝突(模組名.(指名道姓))
- import句式>插圖(1):
- import句式>插圖(2):
form...import句式
form 模組 import money, reda1, read2
# form...import... 多次匯入也只會匯入一次
1.先產生執行檔案的全域性名稱空間
2.執行模組檔案 產生模組的全域性名稱空間
3.將模組中執行之後產生的名字全部存檔於模組名稱空間中
4.在執行檔案中有一個money執行模組名稱空間中money指向的值
(1)
'''
form...import... 指名道姓的匯入某個名字
在使用的時候直接寫名字即可 但是噹噹前名稱空間有相同名字的時候
就會產生衝突 使用的就變成當前名稱空間
'''
- form...import句式>插圖(1)
匯入模組拓展用法
1.起別名
即可以給模組名起別名也可以給模組中某個名字起別名
import mdddddddd as m
from mddddddd import name as n
2.連續匯入
import 模組名1,模組名2
# 可以連續匯入多個模組,但是隻有當多個模組功能相似或者同一個系列
# 如果功能不同並且不屬於一個系列, 那麼推薦分行匯入
import 模組名1
import 模組名2
form 模組名1 import 名字1,名字2,名字3
3.通用匯入
form 模組 import * # 將模組中所有名字全部匯入(*表示所有)
print(money)
print(read1)
print(read2)
print(change)
# __all__ = ['money', 'read1']
# 在被匯入的模組檔案中可以使用__all__指定可以被匯入使用的名字
判斷檔案型別
# 判斷py檔案是作為模組檔案還是執行檔案
print(__name__)
當檔案是執行檔案的時候返回__main__
如果檔案是被當作模組匯入則返回檔名(模組名)
if __name__ == '__main__':
read1()
read2()
# 當目前檔案為執行檔案是才會呼叫if下面的函式,當目前檔案是匯入檔案時不執行.
'''在pycharm中可以直接敲main按tab自動補全if判斷'''
迴圈匯入
"""以後我們在匯入模組的時候如果出現了迴圈匯入的情況 說明你程式設計的不合理"""
# 記住在以後的程式設計生涯中不允許出現迴圈匯入的現象!!!
一錯再錯
1.調換順序
將彼此匯入的句式放在程式碼的最後
2.函式形式
將匯入的句式放入函式體程式碼 等待所有的名字載入完畢之後再呼叫
模組匯入的順序
'''
1.先從記憶體中查詢
2.再去內建模組中查詢
3.最後去sys.path系統路徑查詢(自定義模組)
如果都沒有找到會報錯
'''
# 給py檔案命名時不要和內建模組名衝突
ijmport sys
print(sys.path) # 結果第一個元素永遠是當前執行檔案所在的路徑
import sys
print(sys.path)
# 結果中第一個元素永遠是當前執行檔案所在路徑
(1)當某個自定義模組查詢不到的時的解決方案(不在同一路徑下)
1.手動將該模組所在路徑新增到sys.path中
sys.path.append(r'/Users/macintoshhd/Desktop/pythonxiangmu/老男孩第21天/模組的查詢順序')
2.from...import...(m3)
form 模組的查詢順序 import m3
# from 資料夾名稱.資料夾名稱 import 模組名
# from 資料夾名稱.模組名稱 import 名字
form aaa.bbb import m3
print(m3.name)
# m3在aaa的子檔案bbb中
# 或者
import sys
sys.path.append(aaa的絕對路徑)
from bbb import m3
print(m3.name)
# 這樣也可以在不使用第二種方法來讀取到模組中檔案
'''
準則:執行檔案的當前資料夾名稱為第一順位
'''
模組匯入的順序>>>插圖(1)
模組匯入的順序>>>插圖(1)
新增資料夾的絕對路徑就可以找到
溜了溜了