Python自动化开发函数03

 <1>函数递归

  1.函数递归的定义

    函数递归:在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身。

   

  2.函数递归的特性    

    1). 必须有一个明确的结束条件;

    2). 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

    3). 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)。

   函数递归例1:    

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def calc(m):
    print(m)
    if int(m/2)==0:
        return m
    return calc(int(m/2))

calc(10)
View Code

代码运行结果:

10
5
2
1

  <2>函数作用域

    作用域在定义函数时就已经固定了,不会随着调用位置的改变而改变!

    函数作用域例1:      

#!/usr/bin/env python
# -*- coding:utf-8 -*-

name="feiyang"
def test01():
    name="lijing"
    print(name)

def test02():
    name="lisa"
    print(name)
    test01()

test02()
print(name)
View Code

代码运行结果:

lisa
lijing
feiyang

  

  <3>匿名函数

      匿名函数主要是和其它函数搭配使用!

    匿名函数例1:      

#!/usr/bin/env python
# -*- coding:utf-8 -*-

test=lambda x:x+6
r=test(10)
print(r)
View Code

代码运行结果:

16

    匿名函数例2:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

name="加油"
f1=lambda x:x+"-奥运健儿"
r=f1(name)
print(r)
View Code

代码运行结果:

加油-奥运健儿

  <4>函数式编程

        编程的方法论大致有三种:1)面向过程;2)函数式;3)面向对象。

      a.高阶函数

      b.map函数

          map函数例1:      

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#计算一个列表每个元素的二次方
num01=[1,2,3,4,5]
ret=[]
v=map(lambda x:x**2,num01)
for i in  v:
    ret.append(i)
print(ret)
View Code

代码运行结果:

[1, 4, 9, 16, 25]

      c.filter函数

    filter函数例1:      

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#filter函数
#过滤掉所有以sj结尾的元素,剩下的保留。

str01=["liyifeng_sj","wangyang_sj","liye"]
r=filter(lambda n:not n.endswith("sj"),str01)
print(list(r))
View Code

代码运行结果:

['liye']         

      d.reduce函数

reduce函数例1: 

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#python3需要从functools模块中导入reduce函数才可以使用,python2直接使用不用导入!
#计算列表里所有元素之积,初始值为10
from functools import reduce
sum01=[1,2,3]
r=reduce(lambda x,y:x*y,sum01,10)
print(r)
View Code

代码运行结果:60

      e.内置函数map/filter/reduce总结

1) map函数:处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样。

2)filter函数:遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来。

3)reduce函数:reduce:处理一个序列,然后把序列进行合并操作。

filter函数例1:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#年龄最小的留下来
p01=[
{'name':'lucy','age':100},
{'name':'wangqiang','age':1000},
{'name':'ningcaichen','age':900},
{'name':'dakongyi','age':16},
]
r=list(filter(lambda p:p['age']<=18,p01))
print(r)
View Code

代码运行结果:

[{'age': 16, 'name': 'dakongyi'}]

reduce函数例1:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from functools import reduce
#python3需要从functools模块中导入reduce函数才可以使用,python2直接使用不用导入!
#计算1+2+3+..+100的总和
print(reduce(lambda x,y:x+y,range(100),100))
print(reduce(lambda x,y:x+y,range(1,101)))
View Code

代码运行结果:

5050
5050

      f.其它内置函数

你不向我走来,我便向你走去。
原文地址:https://www.cnblogs.com/renyongbin/p/15747412.html