zoukankan      html  css  js  c++  java
  • python之匿名函数和递归函数

    递归函数

    <1>什么是递归函数

    通过前面的学习知道一个函数可以调用其他函数。

    如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

    <2>递归函数的作用

    举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n

    解决办法1:

    看阶乘的规律

    1! = 1
    2! = 2 × 1 = 2 × 1!
    3! = 3 × 2 × 1 = 3 × 2!
    4! = 4 × 3 × 2 × 1 = 4 × 3!
    ...
    n! = n × (n-1)!

    解决办法2:

    原理

    匿名函数

    用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

    lambda函数的语法只包含一个语句,如下:

     lambda [arg1 [,arg2,.....argn]]:expression

    如下实例:

       sum = lambda arg1, arg2: arg1 + arg2
    
        #调用sum函数
        print "Value of total : ", sum( 10, 20 )
        print "Value of total : ", sum( 20, 20 )

    以上实例输出结果:

        Value of total :  30
        Value of total :  40

    Lambda函数能接收任何数量的参数但只能返回一个表达式的值

    匿名函数不能直接调用print,因为lambda需要一个表达式

    应用场合

    函数作为参数传递

    1. 自己定义函数
      >>> def fun(a, b, opt):
      ...     print "a =", a
      ...     print "b =", b
      ...     print "result =", opt(a, b)
      ...
      >>> fun(1, 2, lambda x,y:x+y)
      a = 1
      b = 2
      result = 3
    2. 作为内置函数的参数

    想一想,下面的数据如何指定按age或name排序?

    stus = [
        {"name":"zhangsan", "age":18}, 
        {"name":"lisi", "age":19}, 
        {"name":"wangwu", "age":17}
    ]

    按name排序:

    >>> stus.sort(key = lambda x:x['name'])
    >>> stus
    [{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

    按age排序:

    >>> stus.sort(key = lambda x:x['age'])
    >>> stus
    [{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]

    函数使用注意事项

    1. 自定义函数

    <1>无参数、无返回值

        def 函数名():
            语句

    <2>无参数、有返回值

        def 函数名():
            语句
            return 需要返回的数值

    注意:

    • 一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
    • 在开发中往往根据需求来设计函数需不需要返回值
    • 函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成

    <3>有参数、无返回值

       def 函数名(形参列表):
            语句

    注意:

    • 在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
    • 参数列表中变量的个数根据实际传递的数据的多少来确定

    <4>有参数、有返回值

        def 函数名(形参列表):
            语句
            return 需要返回的数值

    <5>函数名不能重复

    2. 调用函数

      <1>调用的方式为:

        函数名([实参列表])

      <2>调用时,到底写不写 实参

    • 如果调用的函数 在定义时有形参,那么在调用的时候就应该传递参数

      <3>调用时,实参的个数和先后顺序应该和定义函数中要求的一致

      <4>如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值

    3. 作用域

      <1>在一个函数中定义的变量,只能在本函数中用(局部变量)

    提示:
    1.能被400整除的年份 
    2.能被4整除,但是不能被100整除的年份
    以上2种方法满足一种即为闰年

      <2>在函数外定义的变量,可以在所有的函数中使用(全局变量)

  • 相关阅读:
    深度优先搜索
    哈希算法
    双指针问题
    基本概念
    Ionic JPush极光推送二
    一条sql获取每个类别最新的一条记录
    Ionic App 更新插件cordova-plugin-app-version
    Ionic跳转到外网地址
    Ionic cordova-plugin-splashscreen
    Web API 上传下载文件
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9416797.html
Copyright © 2011-2022 走看看