1. 程式人生 > >python入門16 遞迴函式 高階函式

python入門16 遞迴函式 高階函式

遞迴函式:函式內部呼叫自身。(要注意跳出條件,否則會死迴圈)

高階函式:函式的引數包含函式

 

遞迴函式

#coding:utf-8
#/usr/bin/python
"""
2018-11-17
dinghanhua
遞迴函式 高階函式
"""

'''遞迴函式,函式內部呼叫函式本身'''
'''n!'''
def f_mul(n):
    if type(n) != type(1) or n <= 0: #不是整數或小於0
        raise Exception('引數必須是正整數')
    elif n == 1:
        return 1
    else
: return n * f_mul(n-1) #呼叫自身 print(f_mul(5))
''''回聲函式'''
def echo(voice):
    if len(voice) <= 1:
        print(voice)
    else:
        print(voice,end = '\t')
        echo(voice[1:]) #呼叫自身

echo('你媽媽叫你回家吃飯')

 

高階函式

'''函數語言程式設計:函式的引數是函式。高階函式'''

'''map() 2個引數:1個函式,1個序列。將函式作用於序列的每一項並返回list
map(f,[l1,l2,l3]) = [f(l1),f(l2),f(l3)]
'''
#列表每項首字母大寫
print(list(map(lambda x: x.capitalize(),['jmeter','python','selenium'])))

#並行遍歷,序列合併
print(list(map(lambda x,y,z:(x,y,z),[1,2,3],['jmeter','python','selenium'],['api','dev','ui'])))
#等價於
print(list(zip([1,2,3],['jmeter','python','selenium'],['api','dev','ui'])))
#3個列表各項平方之和
print(list((map(lambda x,y,z:x**2+y**2+z**2,[1,2,3],[4,5,6],[7,8,9]))))

 

'''filter() 用函式篩選,函式需返回bool值。true保留,false丟棄
filter(f,[l1,l2,l3]) = [ if f(l1)==True: l1,...]
'''

#取出列表內的偶數
li = [1,334,32,77,97,44,3,8,43]
print(list(filter(lambda x:x%2==0,li)))

#取出列表中去除兩邊空格後的有效資料 x and x.strip()
li=[False,'','abc',None,[],{},set(),'  ','x',[1,2]]
print(list(filter(lambda x: x and str(x).strip(),li)))

 

'''自定義高階函式'''
def add_square(x,y,f):
    return f(x)+f(y)

def square(x):
    return x**2

print(add_square(1,2,square))
#用匿名函式
print(add_square(1,2,lambda x:x**2))

 

the end!