首页
学习
活动
专区
圈层
工具
发布

老男孩Python全栈开发(92天全)视频教程 自学笔记15

day15课程内容:

  高阶函数

  1、函数名可以进行赋值

  2、函数名可以作为参数,也可以作为函数的返回值

代码语言:javascript
复制
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()()
# 这函数能返回函数名
# 高阶函数返回函数名的那个函数

递归函数

代码语言:javascript
复制
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

  几个内置的高阶函数

  #筛选器########

代码语言:javascript
复制
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 形参:函数体,实参
下一篇
举报
领券