Hi! 大家好,我是Eric,这次教大家Python的函式(function)!
■ 函式(function)
■ 使用函式。函式是有名称的程式码,括弧内是参数,参数可用名子指定,如下的sep:
print(1,2,3,sep="--")
■ 定义函式
使用def来定义自己的函式,如下使用def自定义斐波那契数列的函式:def fibonacci(N, a = 0, b = 1): #a=0, b=1表示我们自己设定的预设参数值,若没有输入a,b,则预设分别为0,1 L[] a,b= 0,1 while len(L) < N: a, b = b, a + b L.append(a) return Lfibonacci(10)
Python可以返回任何Python的物件,无论是简单物件还是複合物件,例如多个回传值会被简单地放入一个用逗号分隔的Tupledef real_imag_conj(val) return val.real, val.imag, val.conjugate() r, i, c = real_imag_conj(3 + 4j)print(r, i, c)
■ 可变参数
若不想要自己指定使用者会输入多少参数到函式中,可以使用*args、**kwargsdef catch_all(*args, **kwargs): # *表示将其展开为列表; **表示将其展开为字典 print("args =", args) print("kwargs = ", kwargs) catch_all(1, 2, 3, a=4, b=5) catch_all('a', keyword=2)
■ 匿名(Lambda)函式
定义更为短小的一次性函式add = lambda x, y: x + yadd(1, 2)
以上等同于:def add(x, y): return x + y
需要这种语法的原因是,若我们有一组资料存放于字典组成的列表中,想要对他们排序,但字典不可排序。data = [{'first':'Guido', 'last':'Van Rossum', 'YOB':1956}, {'first':'Grace', 'last':'Hopper', 'YOB':1906}, {'first':'Alan', 'last':'Turing', 'YOB':1912}]
此时我们可以定义一个key函式,只要给他一个项,它就可以回传排序所依据的键orted(data, key=lambda item: item['first'] #根据名子排序sorted(data, key=lambda item: item['YOB']) #根据出生日期排序
Refer to《Python 旋风之旅,[正体中文]Will保哥》的第9章