Day15
本节内容:
1.递归函数
2.内置函数之过滤器
3.内置函数之map
4.内置函数之reduce
5.内置函数之匿名函数
一.递归函数
定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数
1) 自己调用自己
2) 必须有结束条件
3) 但凡是递归可以写的程序循环都可以解决
4) 递归效率非常低
eg:
def factorial(n):
result=n for i in range(1,n): result*=i return resultprint(factorial(4))#**********递归*********def factorial_new(n): if n==1:#递归结束的条件 return 1 return n*factorial_new(n-1)print(factorial_new(3))#1*2*3过滤器 filter(function, sequence)filter并不会改变其中的值只是过滤掉不需要的元素
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
对sequence中的item依次执行function(item),将执行结果为True的item做成一个filter object的迭代器返回。可以看作是过滤函数。
过滤器处理的函数必须是过滤的条件不能是其他函数
#过滤器
eg:
str=['a','b','c','d']
def func(s):
if s!='a':
return s
res=filter(func,str)#迭代器的作用是循环遍历str中的元素,每一个元素在func函数进行判断看是否过滤掉
print(res)#<filter object at 0x00000000021BA588>res是一个迭代器对象,是迭代器存放的地址
print(list(res))
#取一个列表中的奇数
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))#[1, 3, 5, 7, 9]
三.内置函数之map
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
Eg:
>>>def square(x) : # 计算平方数
... return x ** 2 ...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
Eg:
str = [1, 2,'a', 'b']
def fun2(s):
return s + "alvin"
ret = map(fun2, str)
print(ret) # map object的迭代器,因为map返回的是多个值
print(list(ret))# ['aalvin', 'balvin', 'calvin', 'dalvin']
map也支持多个sequence,这就要求function也支持相应数量的参数输入:
def add(x,y):
return x+y
print (list(map(add, range(10), range(10))))##[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
四.内置函数之reduce
reduce返回的是一个值不用存到迭代器中
from functools import reduce
def add1(x,y):
return x + y
print (reduce(add1, range(1, 101)))## 4950 (注:1+2+...+99)
Print(reduce(add1,[1,2,3,4,5,6,7,8,9]))#相当于1+2+3...
五.内置函数之匿名函数
匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。因为lamdba在创建时不需要命名,所以,叫匿名函数
#普通函数
def add(a,b):
return a + b
print add(2,3)
#匿名函数
add = lambda a,b : a + b
print add(2,3)
浙公网安备 33010602011771号