模組匯入import和import from
阿新 • • 發佈:2021-11-23
今日內容概要
- 面向過程程式設計(理論)
- 模組簡介
- import句式
- from...import...句式
- 迴圈匯入問題
- 絕對匯入與相對匯入
- 軟體開發目錄規範(理論)
今日內容詳細
面向過程程式設計(理論)
面向過程程式設計就好比在設計一條產品流水線 # 使用者註冊功能 1.獲取使用者名稱和密碼 2.組織成固定的格式 3.檔案操作寫入檔案 '''面向過程程式設計的缺陷在於:一旦要修改功能 那麼需要整體改造(牽一髮而動全身)''' def get_info(): username = input('username>>>:').strip() password = input('password>>>:').strip() if len(username) == 0 or len(password) == 0: print('使用者名稱或密碼不能為空') return 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) def save_data(data): with open(r'userinfo','a',encoding='utf8') as f: f.write(data) print('註冊成功') get_info()
模組簡介
python語言 最早起源於linux運維、膠水語言、調包俠(貶義詞>>>褒義詞) 1.什麼是模組? 模組:一系列功能的結合體 2.為什麼要用模組? 為了提升開發效率(站在巨人肩膀) 3.模組三種來源 1.內建的(python直譯器自帶能夠直接匯入使用) 2.第三方的(別人寫好的釋出在網上的 需要先下載後使用) 3.自定義的(自己寫的) 4.模組的四種表現形式 1 使用python編寫的程式碼(.py檔案) 2 已被編譯為共享庫或DLL的C或C++擴充套件 3 包好一組模組的包(資料夾) # 包其實就是多個py檔案(模組)的集合 包裡面通常會含有一個__init__.py檔案 4 使用C編寫並連結到python直譯器的內建模組 """ 學習完模組之後 以後我在編寫大型專案的時候 遇到一些比較複雜的功能可以先考慮是否有相應的模組可以呼叫 """
import句式
# 在學習模組的時候 一定要區分誰是匯入檔案誰是模組檔案 import md # 匯入py檔案模組 檔案字尾一定不要加 """ 多次匯入相同模組 只會執行一次 首次匯入md模組發生的事情 1.執行匯入檔案(import句式.py)產生該檔案的全域性名稱空間 2.執行md.py檔案 3.產生md.py全域性名稱空間 執行md檔案內程式碼 將產生的名字全部存檔於md.py名稱空間 4.在匯入檔名稱空間產生一個md的名字指向md.py全域性名稱空間 import句式匯入模組之後 通過模組名點的方式就可以使用到模組中所有的名字 並且肯定不會產生衝突(指名道姓) """ # money = 999 # md.change() # print(money) # print(md.money)
from...import...句式
from md import money,read1,change
"""
from...import...多次匯入也只會匯入一次
1.先產生執行檔案的全域性名稱空間
2.執行模組檔案 產生模組的全域性名稱空間
3.將模組中執行之後產生的名字全部存檔於模組名稱空間中
4.在執行檔案中有一個money執行模組名稱空間中money指向的值
from...import...指名道姓的匯入某個名字
在使用的時候直接寫名字即可 但是噹噹前名稱空間有相同名字的時候
就會產生衝突 使用的就變成了當前名稱空間
"""
# money = 999
# print(money)
money = 999
# def read1():
# print('董小姐')
# read1()
change()
print(money)
小總結
兩種方式的總結
1.import多用於專案根目錄下的包或者模組
2.都支援AS取別名
情況1
主要是在兩個模組下面函式名相同的情況,取個別名,可以保證不會出現問題
第二個函式會把第一個函式覆蓋掉
情況2
如果是模組同名,那麼也會被覆蓋掉,所以還是要起別名
匯入模組擴充套件用法
1.起別名
既可以給模組名起別名也可以給模組中某個名字起別名
import mdddddddd as m
from mddddddd import name as n
2.連續匯入
import 模組名1,模組名2
# 可以連續匯入多個模組 但是隻有當多個模組功能相似或者屬於同一個系列
# 如果功能不同並且不屬於一個系列 那麼推薦分行匯入
import 模組名1
import 模組名2
from 模組名1 import 名字1,名字2,名字3
3.通用匯入
from md import * # 將模組中所有的名字全部匯入(*表示所有)
print(money)
print(read1)
print(read2)
print(change)
__all__ = ['money','read1'] # 在被匯入的模組檔案中可以使用__all__指定可以被匯入使用的名字
判斷檔案型別
# 判斷py檔案是作為模組檔案還是執行檔案
__name__當檔案是執行檔案的時候會返回__main__
如果檔案是被當做模組匯入則返回檔名(模組名)
if __name__ == '__main__':
read1()
"""在pycharm中可以直接敲 main按tab鍵即可自動補全if判斷"""
迴圈匯入
"""以後我們在匯入模組的時候如果出現了迴圈匯入的情況 說明你程式設計的不合理"""
# 記住在以後的程式設計生涯中不允許出現迴圈匯入的現象!!!
模組匯入的順序
"""
1.先從記憶體中查詢
2.再去內建模組中查詢
3.最後去sys.path系統路徑查詢(自定義模組)
如果都沒有查詢到則報錯
"""
# 以後在給py檔案命名的時候儘量不要與內建模組名衝突
import sys
print(sys.path) # 結果中第一個元素永遠是當前執行檔案所在的路徑
當某個自定義模組查詢不到的時候解決方案
1.自己手動將該模組所在的路徑新增到sys.path中
import sys
sys.path.append(r'D:\py20\day18\aaa')
2.from...import...句式
from 資料夾名稱.資料夾名稱 import 模組名
from 資料夾名稱.模組名稱 import 名字
路徑相對
想要匯入任意的模組和包,都必須寫在如下路徑下,才能被找到。
也可以自動手動在sys.path中新增指定路徑,然後再匯入可以,例如:
路徑處理
import os
import sys
abs_path = os.path.abspath(__file__)#獲取檔案路徑
path1=os.path.dirname(abs_path)#獲取當前路徑的上一級路徑
path2=os.path.dirname(os.path.dirname(os.path.abspath(__file__))#獲取當前路徑的上兩級路徑
sys.path.append(path1)
import xxxxx # 匯入路徑path1下的一個xxxxx.py檔案
路徑心得
1.以後寫模組名稱時,千萬不能和內建和第三方的同名(新手容易犯錯誤)。重名,會按照預設目錄的列表進行讀取,預設目錄的優先順序的最高的是:當前目錄
2.專案執行檔案一般都在專案根目錄,如果執行檔案巢狀的記憶體目錄,就需要自己手動在sys.path中新增路徑。
3.pycharm中預設會將專案目錄加入到sys.path中