python3 高阶函数 &递归函数

高阶函数,递归函数,迭代器,生成器,装饰器,特殊函数的应用。
高阶函数:
函数名,也是一个变量名,指向函数对象内存空间的地址。
也可以进行赋值,作为一个函数的参数,还可以作为函数的返回值
def f(n): #函数f()
    return n**2

def f2(a,b,function): #函数f2()
    return f(a)+f(b)

s = f2(2,3,f) #将函数名字f作为一个参数传给函数f2调用
print(s)
>> 13

----------------------------------------------------------------------------

def func():
    def inner():
        x = 7
        return x
    return inner  #返回一个函数名字

a = func()
print('a的类型:%s'%type(a))
print('a的值:%s'%a) #a此时指向inner函数内存空间地址
print(a())  #a()就相当于直接调用func函数中的inner()函数效果
>> a的类型:<class 'function'>
>> a的值:<function func.<locals>.inner at 0x000002455816B9D8>
>> 7

filter()方法过滤器

def f3(s): # 定义需要过滤掉得内容函数
    if s!= 'a':
        return s
s1 = [1,2,'a','b','c']
s2 = filter(f3,s1) #filter()方法中传入函数f3
print("通过f3函数过滤掉得到s2内存空间地址:>",s2)
print(list(s2))  #使用list方法进行强转为list
>> 通过f3函数过滤掉得到s2内存空间地址:> <filter object at 0x00000133B804F0B8>
>> [1, 2, 'b', 'c']

map()方法

def f4(s):
    return s+ "admin"

s1 = ['x','y','z','u','v','w']
s3 = map(f4,s1)
print(s3)
print(list(s3))
>> <map object at 0x000001CCABA596D8>
>> ['xadmin', 'yadmin', 'zadmin', 'uadmin', 'vadmin', 'wadmin']

reduce()函数

from functools import reduce 

reduce方法实现1-100累加

from functools import reduce
def add(x,y):
    return x+y
sum = reduce(add,range(1,101))
print(sum) #reduce的结果就是一个值
>> 5050

reduce()方法实现阶乘

from functools import reduce
def factorial(x,y):
    return x*y
factorial_num = reduce(factorial,range(1,6)) #reduce()方法求5!结果
print(factorial_num)
>> 120

lambda 匿名函数(函数式编程)

from functools import reduce
factorial = lambda x,y:x*y #使用lambda匿名函数
factorial_num = reduce(factorial,range(1,6))
print(factorial_num)
#合成一句代码
factorial_num2 = reduce(lambda x,y:x*y,range(1,6)) #5!值
print(factorial_num2)
>> 120
>> 120


递归函数:

特性:

1.自己调用自己

2.有一个结束条件

凡是用递归能做的,用循环都可以解决。对于数据处理量较大时,递归函数的效率比循环要低,递归层次过多会导致栈溢出,递归函数在递归调用时会先将返回的值存在内存中,,最后再将所有的值取出进行计算。

使用递归函数求阶乘

def f(n):
    if n == 1: #递归函数需要有一个结束条件,求阶乘时当n=1时就结束了
        return 1
    else:
        sum = n* f(n-1)  #自己调用自己
        return sum
print(f(5)) # 5!=120

函数调用过程实现阶乘
5*f(4)
    4*f(3)
        3*f(2)
            2*f(1)
                1
递归函数 求斐波那契数列
#斐波那契数列: 0,1,1,2,3,5,8,13,21,34,55...
def f(n):  #定义函数求得斐波那契数列第n个数的是多少:
    if n ==1:
        return 0
    if n == 2:
        return 1
    fibo_n =f(n-2)+f(n-1) #自己调用自己
    return fibo_n

n= int(input(">>:")) #循环输出斐波那契数列
for i in range(1,n+1):
    print(f(i),end='\t')
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值