一,複習 二,今日內容 三,模塊 四,導入模板完成的三件事 五,起別名 六,模塊的分類 七,模塊的載入順序 八,環境變數 九,from...import語法導入 十,from...import * 十一,鏈式導入 十二,迴圈導入 ...
'''
1.生成器中的send方法
-- 給當前停止的yield發生信息
-- 內部調用__next__()取到下一個yield的返回值
2.遞歸:函數的(直接,間接)自調用
-- 回溯 與 遞推
-- 重點:出口 | 遞歸的條件
3.匿名函數
-- lambda 參數列表: (返回值, 返回值)
-- 應用場景:1.用變數接受 | 2.結合內置函數使用
-- add = lambda n1, n2: n1 + n2
4.內置函數
dic = {'Bob': 88888, 'Tom': 66666} | [('Bob', 88888), ('Tom', 66666)]
-- max(iter, key=lambda x: x) | min | map | reduce | sorted
-- bin | oct | hex
-- max min sum pow abs
-- len next iter range enumerate
'''
''' 1.模塊:模塊的概念 2.導入的方式:import | from import -- 名稱空間***** | 絕對導入 | 起別名 3.環境變數:sys.path ***** 4.導入模塊的順序 5.迴圈導入:模塊間相互導入 ****** '''
""" 常見的四種模塊:module 1.使用python編寫的.py文件 2.把一系列模塊組織到一起的文件夾(註:文件夾下有一個__init__.py文件,該文件夾稱之為包) 3.使用C編寫並鏈接到python解釋器的內置模塊 4.已被編譯為共用庫或DLL的C或C++擴展 """ # 1、什麼是模塊:一系列功能的集合體 # 2、為什麼會出現模塊:很多相似的功能,要統一管理,將這些功能放在一個文件中,該文件就是管理這些功能的集合體,我們命名為模塊 # 3、怎麼使用模塊 # -- 在要使用模塊功能的文件中導入模塊:import 模塊名 - 模塊名:用來管理一系列功能的文件名 # 4、在哪使用模塊 # -- 在所有要使用模塊中功能的文件中導入並使用模塊
# 首次導入:
import 模塊名 # 1.將被導入的模塊編譯形成對應的pyc文件 # 2.進入模塊,從上執行執行模塊中的代碼,將產生的所有名字存放在該模塊文件的全局名稱空間中 # 3.在使用模塊的文件中,產生一個與模塊名(模塊文件名)同名的名字,指向模塊的全局名稱空間 # 再次導入: # 不再執行導入模塊的前兩步,只會走第三步:在當前模塊中產生一個名字,指向第一次導入在記憶體中產生的全局名稱空間
import 模塊名 as 別名 # 重點:導入一旦起別名,原模塊名變數失效,本質只產生了別名變數指向模塊文件的全局名稱空間
# 大方向:內置(built-in) | 自定義(系統提供 | 第三方提供 | 自己自定義)
# 記憶體 > 內置 > sys.path (安裝環境變數中路徑的先後順序逐一載入)
# 環境變數:存放路徑的list,第一位預設一定是當前執行文件所在的路徑 import sys # sys.path就是環境變數 # 清空環境變數:所有導入都不能使用了 sys.path.clear() # 添加指定路徑到環境變數 sys.path.append() sys.path.insert()
# 導入完成的三件事 # 1.將被導入的模塊編譯形成對應的pyc文件 # 2.進入模塊,從上執行執行模塊中的代碼,將產生的所有名字存放在該模塊文件的全局名稱空間中 # 3.在導入模塊的文件中形成(一個或多個)名字指向模塊全局名稱空間中的(一個或多個)具體名字 from 模塊名 import 模塊中的名字1, ..., 模塊中的名字n from 模塊名 import 名字 as 別名 # from...import導入依賴環境變數 sys.path
# 模塊中預設會添加 __all__ ,__all__ 就是管理模塊中能被 * 導入的變數們 # __all__可以自定義,自定義 * 能導入的變數們, __all__的list中名字全部可以自定義
__all__ = ['a', 'b', 'c', 'd_', '_e'] # 系統預設添加的__all__中不會納入 _開頭的名字 # -- 所以預設在外界通過from...import *無法導入_開頭的名字 # -- _開頭的名字對from...import *是隱藏的,指名道姓依然可以被外界導入使用
# t1導入m1,m1導入m2,m2導入m3 # 執行流程:右鍵執行t1,在t1導入m1模塊的地方直接進入m1,去執行m1,同理在m1執行過程中遇到導入m2,會馬上進入m2,去執行m2,一直到m3
,m3執行完畢,會回到m2中導入m3的語句,接著往下執行m2,m2執行完畢回到m1,以此類推返回到t1 # 在整個執行流程中,遇到任何模塊的二次導入,都是直接引用記憶體中的名稱空間,不會再次進入模塊
# 迴圈導入的問題點:名字沒有產生就使用名字 # 解決迴圈導入:先產生名字,在導入模塊 # -- 將會產生迴圈導入的模塊,導入語法延後 - 延後導入 # 問題 # m1.py import m2 print(m2.y) x = 666 # m2.py import m1 print(m2.x) y = 888 # 解決 # m1.py x = 666 import m2 print(m2.y) # m2.py y = 888 import m1 print(m2.x)