python 函數
- 2020 年 7 月 7 日
- 筆記
初始函數
為什麼要用函數?
- 避免程式碼重用
- 提高程式碼的可讀性
函數的定義與調用?
def 函數名(參數1,參數2):
'''函數注釋'''
print("函數體")
return 返回值
定義:def 關鍵字開頭,空格之後接函數名和圓括弧,最後還要加上一個冒號。
def是固定的,不能改變。
函數名:函數名命名規則是包含字母、數字、下劃線的任意組合,但是不能以數字開頭,雖然函數名和隨便取名,但是一般盡量定義為可以表達函數功能的名字。
函數的調用
返回值=函數名(參數1,參數2)#記得函數名後面加括弧
示例
定義一個求計算字元串長度的函數,假如我們的len()函數現在不能用了,name我們就需要定義一個函數,求字元串的長度。如果讓我們一次一次的去寫相同的程式碼,會非常麻煩,所以我們需要使用函數。
def length():
s = "hello world"
length = 0
for i in s:
length+=1
print(length)
print(length())
return 必須放在函數里,當函數有返回值的時候,必須用變數接收才有效果。
def length():
s = "hello world"
length = 0
for i in s:
length += 1
return length
hprint(length())
函數的返回值
-
return的作用:結束一個函數的執行
-
首先返回值可以是任意的數據類型
-
函數可以有返回值:如果有返回值,必須要有變數接收才有效果
-
函數也可以沒有返回值
-
沒有返回值的時候分為三種情況
- 當不寫return的時候,函數的返回值為None
- 當只寫一個return的時候,函數的返回值為None
- return None的時候,函數的返回值為None
-
return返回一個值(一個變數)
-
return返回多個值(多個變數)多個值之間用逗號隔開,以元組的形式返回。接收:可以用一個變數接收,也惡意用多個變數接收,返回幾個值就用幾個變數接收
-
def func(): a = 111 b = [1,2,3] c = {"a":15,"b":6} #return a 返回一個值 #return a,b,c 返回多個值,變數之間按逗號隔開,以元組的形式返回 print(func())
#不寫return時返回None
def func():
a = 111
b = [1,2,3]
ret = func()
print(ret)
#自卸一個return時,返回None
def func():
a = 111
b = [1,2,3]
return
ret = func()
print(ret)
#return None的時候返回None
def func():
a = 111
b = [1,2,3]
return None
ret = func()
print(ret)
return 的作用
def func():
print("開始")
return #結束一個函數的執行
print("結束")
func()
定義一個列表,返回列表最後一個值
#方法一
def func():
list = [1,3,4,5]
return list[-1]
#方法二
def func():
list = [1,3,4,5]
return list
a,b,c,d = func()
print(d)
函數的參數
def func(c):
'''
參數接受形式參數,簡稱形參
'''
實參和形參
- 形參:是函數定義時候的參數
- 實參:函數調用時候傳進來的參數
如何傳遞多個參數
- 可以傳遞多個參數,多個參數之間用逗號隔開。
- 站在傳參的角度上,調用函數時傳參數有兩種方式
- 按照位置傳參數
- 按照關鍵字傳參數
- 用法:
- 位置參數必須在關鍵字參數的前面
- 對於一個參數只能賦值一次
def func(a,b):
if a > b:
return a
else:
return b
print(func(1,3))#按照位置傳參
print(func(a=1,b=3))#按照關鍵字傳參
print(func(1,b=3))#按照位置傳參和關鍵字傳參混搭
默認參數
用法:
- 為什麼要用默認參數?
- 將變化比較小的值設置為默認參數
- 定義:
- 默認參數可以不傳,不傳的時候用的是默認值,如果傳會覆蓋默認值。
- 默認的值是定義函數的時候已經確定了的。
def func(a,b=1):
print(a,b)
func(0)
dunc(0,2)
默認參數缺陷:默認參數是一個可變的數據類型
def func(a,l=[]):
l.append(a)
print(l)
func(1)
func(2)
#輸出[1] [1,2]
動態參數
按位置傳參多餘的參數都是有*args統一接收,保存成一個元組的形式。
按關鍵字傳參多餘的參數都是由**kwargs接收,保存成一個字典的形式。
def func(a,b,*args):
sum = a+b
for i in args:
sum += i
return sum
print(func(1,2,3,4))#輸出他們的和
def func(a,b,**kwargs):
print(a,b,**Kwargs)
func(a=10,b=20,c=30,d=40)#輸出10,20 {"c":30,"d":40}
總結
- 定義:def 關鍵字揩油,空格之後是函數名稱和圓括弧()和:
- 參數:圓括弧用來接收參數,若傳入多個參數,參數之間用逗號分隔。
- 參數可以定義多個,也可以不定義。
- 參數有很多種,如果涉及到多種參數的定義,應始終遵循位置參數、*args、默認參數、*kwargs.
- 注釋:函數第一行語句應該添加功能注釋
- 函數體:函數內容以冒號起始,並且縮進。
- 返回值:return [表達式]結束函數,不帶表達式的return相當於返回None。
def 函數名(參數1,參數2,*args,**kwargs):
'''注釋內容'''
函數體
return 返回值