一、函數的基本內容
1、函數標準格式
def 函數名(參數):
函數接口
函數體
return 返回值
函數名命名規則: 字母、數字和下劃線組成,和變量命名規則一致
return 後面可以返回任意表達式,但不能是賦值語句
2、函數調用:
函數名(參數)
def f1(s):
print("我是{}".format(s))
f1('小可愛')
# 輸出結果:我是小可愛
注:要先定義才能調用哦!
3、參數
- 形參:函數沒有調用的時候,它沒有任何意義;在調用時,必須傳入參數,所以也叫必須參數
- 實參:與形參位置是一一對應的,所以也叫位置參數;缺一不可,缺了或多了都會報錯
- 正確使用:
def f(x, y):
print("我是{}{}".format(x, y))
f(1, 2)
#輸出結果:我是12
- 缺參數時:
def f1(x, y):
print("我是{}{}".format(x, y))
f1(1)
輸出結果:
- 多參數時:
def f1(x, y):
print("我是{}{}".format(x, y))
f1(1, 2, 3)
輸出結果:
-
默認參數:不傳參,用默認值,傳參它也能接收;一定要放在必須參數後面,否則會報錯
-
關鍵字參數
f(x=1, y=2)
通過關鍵字去找對應的必須參數,這樣就不需要一一對應了。 -
動態參數
一般寫法:def f(*args, **kwargs) ;
*args:調用參數時,所有傳入的多餘的位置參數都會被args接收生成一個元組;
**kwargs:函數調用時,多餘的關鍵字參數,都會被kwargs接收,生成一個字典
def sum(**kwargs):
print("b:", kwargs["b"])
r = 0
for i in kwargs.values():
r += i
print(r)
sum(a=1, b=3, c=7, d=100)
'''
輸出結果:
b: 3
111
'''
- 擴展:爲動態參數傳入列表、字典、元組
def f1(*args):
print(args)
li = [1, 2, 3]
f1(4, 5, 6) #輸出結果:(4, 5, 6)
f1(li, 2333) #輸出結果:([1, 2, 3], 2333)
f1(*li) #輸出結果:(1, 2, 3)
3、return
注意 return 和 print 的區別,return是函數的返回值,返回值可以賦值給變量,而print只是打印出來
二、常用內置函數
函數名 | 作用 |
---|---|
len | 求長度 |
min | 求最小值 |
max | 求最大值 |
sorted | 排序 |
reversed | 反向 |
enumerate | 返回一個可以遍歷的對象 |
eval | 取出字符串的內容,當做表達式進行運算並有返回值 |
exec | 執行字符串,沒有返回值 |
filter | 過濾器,每個可迭代對象去執行函數,獲取滿足條件的,不滿足的刪去 |
map | 對於可迭代參數,應用函數,結果返回 |
zip | 配對 |
enumerate:
li = ['a', 'b', 'c']
for i in enumerate(li):
print(i)
print(list(enumerate(li)))
eval:
a = "1 + 2 + 3"
print(eval(a))
# 輸出結果:6
filter:
def f1(i):
return i > 10
li = [1, 90, 23, 49, 5]
print(list(filter(f1, li)))
#輸出結果:[90, 23, 49]
map:
def f1(i):
return i > 10
li = [1, 90, 23, 49, 5]
s = [11, 34, 57]
print(list(map(f1, li)))
#輸出結果:[False, True, True, True, False]
filter和map的區別是: filter是對對象的篩選,獲取的是對象元素,map獲取的是表達式的值(True或False)
zip:
s1 = [1, 2, 3]
s2 = ['a', 'b', 'c']
a = zip(s1, s2)
print(dict(a))
#輸出結果:{1: 'a', 2: 'b', 3: 'c'}
三、練習
題目:定義一個函數,對指定數據進行排序,通過參數來決定是正向排序還是反向排序。
def f(*args, s=1):
if s == 0:
print(sorted(args)
)
elif s == 1:
print(sorted(args, reverse=True))
else:
print("寫錯啦!")
li = [4,2,8,5,10]
f(*li) #[10, 8, 5, 4, 2]
# f(*li, s=0) #[2, 4, 5, 8, 10]
# f(*li, s=1) #[10, 8, 5, 4, 2]
# f(*li, s=2) #寫錯啦!