標籤:spl 資料 處理 機械 流程 wrapper word 產生式 \n
函數總結
‘‘‘1、什麼是函數 函數就是具備某一特定功能的工具2、為什麼用函數 減少重複代碼 增強程式的擴充性 增強可讀性3、如何用函數 1、函數的使用原則:先定義後調用(*****) 定義階段:只檢測文法不執行代碼 調用階段:執行函數代碼 2、定義階段與調用階段: 2.1:文法 (*****) def func(參數1,參數2,...): """文檔注釋""" code1 code2 code3 return 傳回值 2.2 形參與實參 (*****) 形參本質就是變數名 實參本質就是變數的值 形參: 位置形參 def foo(x,y): pass 預設形參 def foo(x,y=1): pass *args def foo(x,*args): pass **kwargs def foo(x,**kwargs): pass 實參: 位置實參 foo(1,2,3,4) 關鍵字實參 foo(x=1,y=2,z=3) foo(x=1,1) # 錯誤 foo(1,x=1) #錯誤 *可迭代的對象 foo(*‘hello‘) **字典 foo(**{‘x‘:1,‘y‘:2}) 2.3 傳回值(*****) return是函數結束的標誌,函數內可以有多個return,但只要執行一次函數就立刻結束 並且把return後的值當作本次調用結果返回 def foo(x,y): return x+y res=foo(1,2) 注意: 1、傳回值可以是任意類型 2、傳回值沒有個數限制 函數內沒有return:預設返回None return 值1:返回該值 return 值1,值2,值3:返回(值1,值2,值3) 3、函數對象(*****) def foo(): pass 函數可以被當作資料去處理 1、引用 f=foo 2、當作參數 print(foo) 3、當作傳回值 def bar(): def wrapper() pass return wrapper f=bar() 4、當作容器類類型的元素 def f1(): pass def f2(): pass l=[f1,f2] l[0]() func_dic={ ‘f1‘:f1, ‘f2‘:f2 } 4、函數嵌套(*****) 4.1 函數的嵌套調用 def foo() bar() f1() f2() foo() 4.2 函數的嵌套定義 def f1(): def f2(): pass f2() 5、名稱空間與範圍(******) 內建名稱空間 全域名稱空間 局部名稱空間 def foo(x,y): #x=1,y=2 pass foo(1,2) 載入順序:內建->全域-》局部 尋找名字的順序:從當前位置往上尋找 如果當前位置在局部 局部—》全域-》內建 x=1 def outter(): def wrapper(): print(x) return wrapper f=outter() def bar(): x=111111 f() 全域範圍:全域存活,全域有效 內建+全域 局部範圍:臨時存活,臨時有效 局部 l=[] n=100 def foo(): l.append(1111) global n n=1 def f1(): x=1 def f2(): def f3(): nonlocal x x=10 globals() locals() 6、閉包函數(****) x=1 def outter(): x=10 def wrapper(): print(x) return wrapper f=outter() 7、裝飾器(****) def deco(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) retutrn res return wrapper def deco1(x=1,y=2): def deco(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) retutrn res return wrapper return deco @deco def index(): pass 8 迭代器(****) for max min sorted filter map 9 產生器(***) 10 三元運算式、列表推導式,字典產生式,產生器運算式(*****) res=條件成立的結果 if 條件 else 條件成立的結果 l=[運算式 for i in 可迭代對象 if 條件] g=(運算式 for i in 可迭代對象 if 條件) d={k:v for i in 可迭代對象 if 條件} 11 匿名函數(*****) lambda 參數1,參數2:運算式 max min sorted map filter 12 內建函數 13 函數遞迴(****)‘‘‘def deco1(func1): #func1=wrapper2 def wrapper1(*args, **kwargs): print(‘第一個裝飾器‘) res1 = func1(*args, **kwargs) return res1 return wrapper1def deco2(func2): #func2=最原始的index def wrapper2(*args, **kwargs): print(‘第二個裝飾器‘) res2 = func2(*args, **kwargs) return res2 return wrapper2@deco1 #index=deco1(wrapper2)=wrapper1@deco2 # index=deco2(index)=wrapper2def index(): print(‘from index‘)index()‘‘‘第一個裝飾器第二個裝飾器from index‘‘‘View Code
面向過程編程
‘‘‘面向過程編程 核心過程二字,過程指的是解決問題的步驟,即先幹什麼、再幹什麼、然後幹什麼... 基於該思想編寫程式就好比在設計一條流水線,是一種機械式的思維方式 優點 複雜的問題流程化、進而簡單化 缺點 擴充性極差‘‘‘# 接收使用者輸入使用者名稱,進行使用者名稱合法性校正,拿到合法的使用者名稱def check_user(): while True: name = input(‘username>>‘).strip() if name.isalpha(): return name else: print(‘使用者名稱必須為字母,傻叉‘)# 接收使用者輸入密碼,進行密碼合法性校正,拿到合法的密碼def check_pwd(): while True: pwd1=input(‘password>>: ‘).strip() if len(pwd1) < 5: print(‘密碼的長度至少5位‘) continue pwd2=input(‘again>>: ‘).strip() if pwd1 == pwd2: return pwd1 else: print(‘兩次輸入的密碼不一致‘)def check_age(): pass# pwd=check_pwd()# print(pwd)# 將合法的使用者名稱與密碼寫入檔案def insert(user,pwd,age,path=‘db.txt‘): with open(path,mode=‘a‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s:%s\n‘ %(user,pwd,age))def register(): user=check_user() pwd=check_pwd() age=check_age() insert(user,pwd,age) print(‘register successfull‘)register()# 使用者功能層def register(): while True: # 檢測使用者名稱 name=input(‘username>>: ‘).strip() #檢測使用者是否重複,如果重複了則重新輸入,否則break res=check_user_interface(name) if res: print(‘使用者存在‘) else: break while True: # 檢測密碼 pwd1 = input(‘pwd1>>: ‘).strip() pwd2 = input(‘pwd2>>: ‘).strip() if pwd1 != pwd2: print(‘兩次輸入密碼不一致,重新輸入‘) else: breakdef tell_info(): name=input(‘>>: ‘).strip() info=select(name) print(info)# 介面層def check_user_interface(name): res = select(name) # res=[‘egon‘,‘123‘] if res: return True else: return False# 資料處理層def select(name): with open(‘db.txt‘, ‘r‘, encoding=‘utf-8‘) as f: for line in f: info = line.strip(‘\n‘).split(‘:‘) #info=[‘egon‘,‘123‘] if name == info[0]: return info
View Code
模組的使用
‘‘‘1、什麼是模組 模組是一系列功能的集合體 常見的模組形式(自訂模組、第三方模組、內建模組): 1、一個module.py檔案就是一個模組,檔案名稱是module.py,而模組名是module 2、一個包含有__init__.py檔案的檔案夾也是模組 3、已被編譯為共用庫或DLL的C或C++擴充 4、使用C編寫並連結到python解譯器的內建模組2、為什麼要用模組 1、用第三方或者內建的模組是一種拿來主義,可以極大地提升開發效率 2、自訂模組即將我們自己程式中需要用到的公用的功能寫入一個python檔案 然後程式的各部分組件可以通過匯入的方式來引用/重用自訂模組中的功能3、如何用模組 匯入的方式有兩種 import 模組名 from 模組名 import 具體的功能‘‘‘
View Code
模組的搜尋路徑
一個py檔案就是一個模組,在匯入時必須從某一個檔案夾下找到該py檔案模組的搜尋路徑指的就是在匯入模組時需要檢索的檔案夾們匯入模組時尋找模組的順序是: 1、先從記憶體中已經匯入的模組中尋找 2、內建的模組 3、環境變數sys.path中找 強調:sys.path的第一個值是當前執行檔案的所在的檔案夾
View Code
python檔案的兩種用途
一:可以被當作指令碼去執行二:可以被當作模組匯入
View Code
軟體開發的目錄規範
python-study-16