1. 程式人生 > 其它 >執行及模組檔案及模組檔案的查詢順序

執行及模組檔案及模組檔案的查詢順序

目錄

面向過程程式設計

面向過程程式設計就好比在設計一條產品流水線
# 使用者註冊功能
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)

新增資料夾的絕對路徑就可以找到

溜了溜了