python_递归函数、纯函数、内置函数、匿名函数、偏函数

1、递归函数 >>> 通过递归函数实现的任意数的阶乘

def fun(n):
    # 递归边界
    if n==1:
        return 1
    # 递归条件
    else:
        return n * fun(n-1)
print(fun(4))

第一,实现斐波那契数列,输入一个数列的位置数,返回斐波那契数列相应位置的值
斐波那契数列[1,1,2,3,5,8,…],第一个值是1,后面的数等于前2个数相加的结果

def fun(n):
    if (n == 1 or n == 2):
        return 1
    else:
        return fun(n-1)+fun(n-2)
print(fun(5))

第二、第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子总数是?

def fun(n):
    if (n == 1 or n == 2):
        return 1
    else:
        return fun(n-1)+fun(n-2)
print(fun(5))

第三,小明有100元,打算买100本书,A类书5元一本,B类书3元一本,C类书1元2本,共有多少种买法?

# 组合的形式:使用3个for循环实现
money = 100
book = 100
count = 0
for a in range(int(money/5)):
    for b in range(int(money/3)):
        for c in range(int(money/0.5)):
            if a*5+b*3+c*0.5<=100 and a+b+c==100:
                count+=1
                print(a, b, c)
print(count)

import sys
sys.setrecursionlimit(1000) # 最大循环为3000次,默认1000


# 组合形式:递归实现
count = 0
s = 1
def fun(a=0, b=0, c=0):
    global s
    s += 1
    if a*5+b*3+c*0.5<=100 and a+b+c==100:
        print(a,b,c)
        global count
        count += 1
    if a < int(100/5):
        if b < int(100/3):
            if c < (100):
                return fun(a,b,c+1)
            else:
                return fun(a,b+1)
        else:
            return fun(a+1)
try:
    fun()
except:
    print(s)

2、纯函数:
(1)纯函数的返回结果只依赖其参数,且执行过程中无副作用。
(2)函数的副作用:函数被调用时,完成了函数既定的计算任务,但同时因访问了外部数据,从而改变的系统环境。

3、内置函数:
菜鸟教程_python内置函数:https://www.runoob.com/python/python-built-in-functions.html
包含了一些函数和类,类有str()、list()等。
常用内置函数:
(1)map函数:对指定序列做映射


"""
map(fun, [x,y,z,m])    >>> 将列表中的元素(可迭代对象)依次传递给函数fun。
map() 会根据提供的函数对指定序列做映射,生成一个迭代器,需要list()将其转换成列表
"""
def fun(n):
    return n ** 2
li = [1,2,3]
res = map(fun, li)

print(res)
print(list(res))
C:\Python39\python.exe D:/se_frame/Cases/MapAaaCases/test_3.py
<map object at 0x00000245B05B8FA0>【这里是迭代器】
[1, 4, 9]

(2)filter函数:用于过滤序列,格式:res = filter(函数, 列表)


"""
内置函数: filter() 用于过滤序列
class filter(object):
filter(function函数 or None空, iterable可迭代对象) --> filter object
"""

def fun(n):
    return n < 4
li = [1,2,3,4,5,6]
res = filter(fun, li)

print(res)
print(list(res))
C:\Python39\python.exe C:/project/python_ck01/class_01day/class_02day/class_02day_01.py
<filter object at 0x00000287EA36CE20>  # (1)生成一个对象:<filter object at 0x000001ADBFA59580>
[1, 2, 3]  # (2)返回一个列表:[1, 2, 3]

(3)zip函数:打包可迭代对象。用来将多个列表打包,相同位置的会变为一个元组

li = zip([1,2,3], [11, 22, 33, 44], [111,222,333,444,555])
print(li)
print(list(li))

C:\Python39\python.exe C:/project/python_ck01/class_01day/class_02day/class_02day_01.py
<zip object at 0x000002B843C03F80>
[(1, 11, 111), (2, 22, 222), (3, 33, 333)]

四、匿名函数:用来替换某些简单的def 所定义的函数。


def fun(a, b):
    return a+b
# 匿名函数,简单的函数定义会使用这个
res1 = lambda a,b : a+b
print(res1(11,22)) # 33
print(fun(11, 22)) # 33

# 匿名函数  >  过滤列表
li = [1,2,3,4,5,6]
res = filter(lambda a:a<4, li)
print(list(res)) # [1, 2, 3]

# 匿名函数  >  推导式
li1 = [ (lambda n:n<5)(i) for i in range(10)]
print(list(li1)) # [True, True, True, True, True, False, False, False, False, False]

五、偏函数:partial()作用是:简化参数较多的函数
(1)偏函数的作用:封装成一个新的过滤器,格式:filter_1 = partial(filter, lamda x:x>5)

from functools import partial

li = [1,2,3,4,5,6]
li1 = [4,5,6]


filter1 = partial(filter, lambda x:x<5)
li2 = list(filter1(li))
li3 = list(filter1(li1))

print(li2) # [1, 2, 3, 4]
print(li3) # [4]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值