Day15

本节内容:

1.递归函数

2.内置函数之过滤器

3.内置函数之map

4.内置函数之reduce

5.内置函数之匿名函数

一.递归函数

定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

1) 自己调用自己

2) 必须有结束条件

3) 但凡是递归可以写的程序循环都可以解决

4) 递归效率非常低

eg:

def factorial(n):

 
    result=n
    for in range(1,n):
        result*=i
 
    return result
 
print(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)

 

 

 

 

posted on 2018-08-23 15:46  summer666  阅读(126)  评论(0)    收藏  举报