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]