1、函数名可以进行赋值
2、函数名可以作为参数,也可以作为函数的返回值
def f():
print("高阶函数")
def bar(a,b,c):
c()
print("高阶函数%s%s"%(a,b))
bar(1,1,f)
# 高阶函数
# 高阶函数11
###############
def f1(n):
print("高阶函数调用%s"%n)
return n*n
def bar1(a,b,c):
d=c(a)+c(b)
print(d)
bar1(1,3,f1)
# 高阶函数调用1
# 高阶函数调用3
# 10
############
def f3():
print("高阶函数返回函数名的那个函数")
def bar2():
print('这函数能返回函数名')
return f3
bar2()()
# 这函数能返回函数名
# 高阶函数返回函数名的那个函数
def f(n): # 循环函数 计算n的阶乘
sum=1
for i in range(1,n+1):
sum*=i
return sum
print(f(7))
##########
def f1(n): #递归函数 计算n的阶乘
if n==1:
return 1
return n*f1(n-1)
print(f1(7))
# 递归函数的特性:
# 1、调用自身函数
# 2、有一个结束条件
# 但凡递归可以解决的 循环函数都可以解决
#递归的效率在很多情况下效率非常低 不建议使用
#菲波那切数列 0 1 1 2 3 5 8 13 21
def f2(n): #循环函数求菲波那切数列
if n==1:
return 0
before=0
after=1
ret=before+after
before=after
after=ret
return ret
print(f2(1)) #0
#########
def f3(n): #用递归函数写菲波那切数列
if n==1:
return 0
if n==2:
return 1
return f3(n-2)+f3(n-1)
print(f3(9)) #21
#筛选器########
str='abcd' #被筛选的序列
def f1(s): #筛选条件,返回经过筛选的元素
if s!='a':
return s
ret1=filter(f1,str) #过滤器 类型是迭代器
print(list(ret1)) #将迭代器类型,转化为列表形式输出
#map迭代器########
str1='hello world!' #待处理的序列
def f2(s): #处理函数
return s+'-map!'
ret2=map(f2,str1) # 将str1序列中的每一个元素,进行fun2处理,返回一个迭代器
print(list(ret2)) #将迭代器转化为列表输出
#reduce 数列好用的迭代器
from functools import reduce
def f3(a,b):
return a+b
ret3=reduce(f3,range(1,101)) #返回一个值。将序列的前两个元素传入f3,然后再将返回值 和第三个元素传入f3
print(ret3)
#函数式编程 匿名函数 lambda
ret4=lambda a,b:a*b,[2,5] #lambda 形参:函数体,实参