zoukankan      html  css  js  c++  java
  • 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.其它内置函数

    你不向我走来,我便向你走去。
  • 相关阅读:
    异常处理
    SPD各模块总结
    简易js调试
    深入理解:java类加载器
    java基础简介
    android四大组件(一)Activity
    网路编程(网站源码查看器)
    ListView
    SQL查询数据总结
    函数作用域中的this问题
  • 原文地址:https://www.cnblogs.com/renyongbin/p/15747412.html
Copyright © 2011-2022 走看看