一、函式
1、what
具備某一功能的工具===》函式
工具的使用:
事先準備好工具==========》函式的定義
遇到應用場景拿來就用====》函式的呼叫
2、why
1、程式的組織結構不清晰,可讀性差
2、如果要用到重復的功能,只能拷貝功能的實作代碼=》代碼冗余
3、可擴展性差
3、how
函式的使用原則:先定義,后呼叫
定義函式:
def 函式名(引數1,引數2,引數3,...):
"""檔案注釋"""
代碼1
代碼2
代碼3
...
return 回傳值
呼叫函式:
函式名(值1,值2,值3,...)
ps:函式名盡可能寫成動詞,不要寫成名詞
二:函式的基本使用
1、定義函式:申請記憶體空間把函式體代碼保存下來,然后把記憶體地址系結給函式名-》函式名=函式的記憶體地址
def sayhi(): print('*'*10) print('hello') print('*'*10) print(sayhi)#列印出來的是函式名的記憶體地址
2、呼叫函式: 函式名()=> 函式的記憶體地址(),會觸發函式體代碼的運行
sayhi() sayhi() sayhi()#可以多次呼叫,呼叫一次函式運行一次
三:定義函式的三種格式
1、 無參函式(就是函式沒有引數)
def sayhi(): print('='*100) sayhi()
2、 有參函式
def sayhi(s,n): # s = '-' # n = 20 print(s*n) print('hello') print(s*n) sayhi('-',20)
3、 空函式
def func(): pass
四:函式的呼叫
return : 函式內可以有多個return,但只要執行一次函式就立刻結束,并會把return后的值當作本次呼叫的結果回傳
函式可以有三種形式的回傳值
1、return 值:回傳的就是該值本身
2、return 值1,值2,值3:回傳一個元組
3、沒有return:默認回傳None
五:函式呼叫的三種格式
1、 陳述句形式:單純地呼叫一下函式就完了
def sayhi(s,n): print(s*n) print('hello') print(s*n) sayhi('*',30)
2、 運算式形式:
def max2(x,y): if x > y: return x else: return y res=max2(11,22) * 12 print(res)
3、 可以把函式的呼叫當作值傳給另外一個函式
def sayhi(s,n): print(s*n) print('hello') print(s*n) sayhi('*',30) print(sayhi('*',30))
總結:
函式的使用一定要分兩個階段去看:
1、定義階段:只檢測語法,不執行代碼
2、呼叫階段:執行函式體代碼
如果發生的語法錯誤,定義階段就會立馬檢測出來
def func():
print("hello" #語法錯誤
如果發生的不是語法錯誤,而是邏輯錯誤,只能在呼叫階段檢測到
def func():
xxx #邏輯錯誤
func()
ps:呼叫函式時還沒定義的函式一定會報錯,一定要搞清楚函式定義的兩個階段
示范1: def bar(): print(' bar') def foo(): print(' foo') bar() foo() #foo bar 示范2: def foo(): print(' foo') bar() def bar(): print(' bar') foo() #foo bar 這里的def bar()在函式定義階段就已經定義好了
六:函式的引數分為兩大類
1、形參:在定義函式時,括號內定義的變數名,稱之為形式引數,簡稱形參=》變數名
2、實參:在呼叫函式時,括號內傳入的值,稱之為實際引數,簡稱實參=》變數值
七:在python中引數的種類
1、位置引數:
(1)位置形參:在函式定義階段按照從左到右的順序依次定義形參(變數名),稱之為位置形參
特點:必須被傳值
def func(x,y): print(x,y) func(1,2) func(1) # 少一個不行 func(1,2,3) # 多一個也不行
(2)位置實參:在函式呼叫階段按照從左到右的順序依次定義實參(傳入的變數值),稱之為位置實參
特點:按照位置傳值,一一對應
func(1,2,3,4,5,6)#數量由傳入的變數名而定
2、關鍵字實參:在函式呼叫階段按照key=value的形式為指定的形參名傳值,該形式稱之為關鍵字實參
特點:在傳值時可以完全打亂順序,但是仍然能夠指名道姓地為指定的形參傳值
func(x=1,y=2)
注意:可以混用位置實參與關鍵字實參,但是
1 位置實參必須放在關鍵字實參的前面
2 不能為同一個形參重復賦值
def func(name, age, salary): print(name) print(age) print(salary) func('egon', 18, salary=3.1) # func('egon',salary=3.1,age=18) # func('egon',salary=3.1,18) # 錯誤,SyntaxError # func('egon',18,age=19,salary=3.3)# 錯誤,TypeError
3、默認形參:在函式定義階段就已經為某個形參賦值,該形參稱之為有默認值的形參,簡稱默認形參
特點: 定義階段就已經被賦值意味著在函式呼叫階段可以不用為其賦值
def func(x,y=2): print(x,y) func(1) #1 2 func(1,33333)#1 33333
注意:
(1)默認形參應該放在位置形參的后面
def func(y=2,x): # 錯誤 pass
func(1,2)
(2) 默認形參的值通常應該是不可變型別
#達不到用意
def func(name,hobby,hobbies=[]): hobbies.append(hobby) print("%s 的愛好是:%s" %(name,hobbies)) func("egon",'play') #egon 的愛好是:['play'] func('lili','music') #lili 的愛好是:['play', 'music'] func("jack",'read') #jack 的愛好是:['play', 'music', 'read'] #達到用意 def func(name,hobby,hobbies=None): if hobbies is None: hobbies=[] hobbies.append(hobby) print("%s 的愛好是:%s" %(name,hobbies)) func("egon",'play') #egon 的愛好是:['play'] func('lili','music') #lili 的愛好是:['music'] func("jack",'read') #jack 的愛好是:['read']
(3) 默認形參的值只在函式定義階段被賦值一次,函式定義之后的改變對默認形參沒有影響
m=333 def func(x,y=m): # y=333 print(x,y) m=44444 func(1) #呼叫后列印1 333 在定義階段把y賦值為333,呼叫時如果y不再傳值的話就不受影響 func(1,2) #呼叫后列印1 333 在定義階段把y賦值為333,呼叫時如果傳值,按照傳的值來
#默認形參示范
def register(name,age,gender='male'): print(name) print(age) print(gender) register('tom',21,) register('egon',18,'female') #可以傳值改變默認值,也可以不傳就用默認值
ps:位置形參,一定要傳值
默認形參,可以不傳值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/83310.html
標籤:Python
上一篇:Python爬蟲之urllib模擬登錄及cookie的那點事
下一篇:os模塊
