zoukankan      html  css  js  c++  java
  • 递归函数与高阶函数

    递归函数与高阶函数

    #_author:Administrator
    #date:2019/11/1
    #1

    def fun(*args):
    print(args)
    a=[1,2,3]
    fun(*a)# (1, 2, 3)
    print('--------------')
    def fun1(**kwargs):
    print(kwargs)
    fun1(**{'name':'star'})#{'name': 'star'}直接传一个字典
    #2.高阶函数
    #(1)函数名是一个变量,可以进行赋值
    #(2)函数名可以做为函数的参数,还可以作为函数的返回值
    def f(n):
    return n*n
    def fun2(a,b,func):
    return func(a)+func(b)
    print(fun2(2,3,f))#13
    print('---------------------')
    def fu():
    def f():
    return 5
    return f
    m=fu()
    print(m)#<function fu.<locals>.f at 0x03719738> 是一个函数对象地址
    print(m())# 5
    print('---------------------')
    #3 递归函数
    def jie(n):
    if n==1:
    return 1
    return n*jie(n-1)
    print(jie(5))# 120
    print('---------------------')
    #关于递归的特性:
    #1.内部调用自身函数
    #2.有一个结束条件
    #递归可以解决的问题都可以用循环来解决
    #递归在很多时候效率很低
    #斐波那契数列
    def fibo(n):
    if n<=2:
    return n
    return fibo(n-1)+fibo(n-2)
    print(fibo(8))#34
    #0 1 1 2 3 5 8 13 21 34 55
    print('---------------------')

    def fibo1(n):
    if n==0 or n==1:
    return n
    return fibo1(n-1)+fibo1(n-2)
    print(fibo1(8))#21
    #4.内置函数
    print('---------------------')
    print(all([1,2,3,'asd']))#True all()函数用于判断给定的可迭代参数 iterable中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
    print(all([1,2,3,'asd','']))#False
    print(divmod(8,3))#求 余数 和 模 (2, 2)
    print(eval('3+4*6'))# 27 eval()可以帮我们做算术运算,也可以将一个字符串转换为字典
    #重要的内置函数(1)filter 的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数。
    str=['a','s','d','f']
    def func(s):
    if s!='d':
    return s
    ret=filter(func,str)
    print(ret)#<filter object at 0x007809F0> ret是一个过滤器对象,也是一个迭代器对象
    print(list(ret))#['a', 's', 'f']
    print('------------------------')
    #(2)map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
    list=['a','s','d','f']
    def func(s):

    return s+'star'
    ret2=map(func,list)
    print(ret2)#<map object at 0x03910B10>
    print(list(ret2))#['astar', 'sstar', 'dstar', 'fstar']对字符串进行处理
    #(3)reduce()要想调用此方法,前面加上from functools import reduce
    #对一个序列进行压缩运算,得到一个值。但是reduce在python2的时候是内置函数,到了python3移到了functools模块,所以使用之前需要 from functools import reduce
    #调用: reduce(function,iterable),其中function必须传入两个参数,iterable可以是列表或者元组

    from functools import reduce
    def add_1(x,y):
    return x + y
    print(reduce(add_1,[1,2,3,4,5,6,7,8,9]))#45 reduce()的结果就是一个值
    print(reduce(add_1,range(1,101)))#5050
    #(4)lambda-->匿名函数
    def add_2(a,b):
    return a+b

    lambda x,y:x+y
    #通过reduce函数加lambda表达式(匿名函数)求阶乘
    from functools import reduce
    print(reduce((lambda a,b:a*b),range(1,5)))#24
    #通过map函数加lambda表达式(匿名函数)
    squares=map(lambda x:x*x,range(9))
    print(squares)#<map object at 0x01250D90>
    print(list(squares))#[0, 1, 4, 9, 16, 25, 36, 49, 64]



  • 相关阅读:
    leetcode每日刷题计划-简单篇day28
    leetcode每日刷题计划-简单篇day27
    leetcode每日刷题计划-简单篇day26
    leetcode每日刷题计划-简单篇day25
    java多线程--大作业相关
    leetcode每日刷题计划-简单篇day24
    leetcode每日刷题计划-简单篇day23
    SpringBoot集成JWT实现token验证
    RabbitMQ 延迟队列,消息延迟推送的实现
    Redis精进:List的使用和应用场景
  • 原文地址:https://www.cnblogs.com/startl/p/11781274.html
Copyright © 2011-2022 走看看