1. 程式人生 > 其它 >第十章 模組

第十章 模組

目錄

面向過程程式設計(理論)

面向過程程式設計就好比在設計一條產品流水線

# 使用者註冊功能
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()

模組

1.什麼是模組?
	模組:一些列功能的結合體
2.為什麼要用模組?
	為了提升開發效率(站在巨人肩膀)
3.模組三種來源
	1.內建的(python直譯器自帶能夠直接匯入使用)
	2.第三方的(別人寫好的釋出在網上的 需要先下載後使用)
	3.自定義的(自己寫的)
4.模組的四種表現形式
	1.使用python編寫的程式碼(.py檔案)
	2.已被編譯為共享庫或DLLde 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 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.函式形式
    	將匯入的句式放入函式體程式碼 等待所有的名字載入完畢之後再呼叫

模組匯入的順序

"""
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查詢模組
相對匯入
	"""
		句點符(.)
			.表示當前檔案路徑
			..表示上一層檔案路勁
	"""
    能過打破始終以執行檔案為準的規則 只考慮兩個檔案之間的位置
    # 相對匯入只能用在模組檔案中  不能再執行檔案中使用
    

軟體開發目錄規範

目錄規範並無固定的要求 只要符合清晰可讀即可

bin資料夾
存放一些列啟動檔案(當啟動檔案很少或者只有一個的時候也可以直接寫在外面)
start.py
conf資料夾
存放一系列配置檔案
settings.py(一般情況下該檔案內的變數名都是大寫)
lib資料夾
存放公共的功能
common.py
db資料夾
存放資料相關檔案
userinfo.txt
log資料夾
存放日誌記錄檔案
log.txt
core資料夾
存放專案核心程式碼檔案
src.py
readme檔案
存放說明相關資訊(類似於說明書 廣告 章程)
requirements.txt
存放專案所需要的第三方模組及版本號
'''
!!!掌握
'''