風聲起,琴聲動,客怎眠。
靜夜瀾,江南曲,心漣漪。
看盡浮沉,悵然只怕,醉夢一場。
韶華易逝,紅顏一曲,明又何夕。
——孝平
什麼是函數?
函數就是具備某一特定的工具
爲什麼用函數?
減少重複代碼
增強程序的擴展性
增強可讀性
如何用函數?
1.函數的使用原則:先定義後調用(*****)
定義階段:只檢測語法不執行代碼
調用階段:執行函數代碼
2.定義階段與調用階段:
2.1:語法(******)
def func(參數1,參數2,...)
“""文檔註釋"""
code1
code2
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後的值當作本次調用結果返回
注意:
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 條件}
匿名函數(*****)
lambda 參數1,參數2:表達式
max min sorted map filter
12內置函數
13函數遞歸(****)
面向過程編程
核心過程二字,過程指的是解決問題的步驟,即先幹什麼,再幹什麼,然後幹什麼
基於該思想編寫程序就好比設計一條流水線,是一種機械式的思維方式
優點:
複雜的問題流程化,進而簡單化
缺點:
擴展性極差
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: break def 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
什麼是模塊
模塊是一系列功能的集合
常見的模塊形式(自定義模塊,第三方模塊,內置模塊):
1.一個module.py文件就是一個模塊,文件名是module.py,而模塊名是module
2.一個包含有__init__.py文件的文件夾也是模塊
3.已被編譯爲共享庫或DLL的C或C++擴展
4.使用C編寫並鏈接到python解釋器的內置模塊
2.爲什麼要用模塊
1.用第三天或者 內置的模塊是一種拿來主義,可以極大地提升kaifaxiaol
2.自定義模塊即將我們自己程序中需要用到的公共的功能寫入一個python文件,然後
程序的各部分組件可以通過導入的方式來引用/重用自定義模塊中的功能
3.如何使用模塊
導入的方式有兩種
import 模塊名
from 模塊名 import 具體的功能
後面還有一大堆零散文件的內容,主要是怎麼去寫一個項目的,由於我都理解了,太麻煩了,我就不寫了,想要了解的私聊我,