zoukankan      html  css  js  c++  java
  • python函数与函数式编程

    https://www.cnblogs.com/evablogs/p/6699515.html

    在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪,以便我后面对装饰器复杂的参数传递和函数的调用的理解。

    函数的定义

    def 函数名():

          代码块

    例如:

    1
    2
    3
    def func_name():
         block
         return value                                     #return语句表示函数执行到此结束,如果没有return语句则会返回None,有return没有语句也是返回None

    另外,Python中不允许前向引用,即在函数定义之前,不允许调用该函数。所以函数必须先定义再调用,否则会报错,找不到该函数的定义。

    1
    2
    3
    4
    5
    6
    print func_name()                                    #若在函数定义前调用函数,则报错
     
    Traceback (most recent call last):            
      File "<pyshell#72>", line 1in <module>
        print func_name()
    NameError: name 'func_name' is not defined

    参数的传递

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    >>> def f(a,b,c=10):                                 #定义三个参数,设置c的默认值为10
        return a+b+c
     
    >>> print(f(3,2))                                    #传递参数的值,默认匹配没有默认值的参数
    15
    >>> print(f(3,2,1))                                  #传递参数的值,若传递的参数都有值,则不会取默认值
    6
     
    >>>def func(*name):                                  #包裹传递,将所有的参数传递给name元组
              print type(name)
              print name
     
    >>> func(1,4,6)
    <type 'tuple'>
    (146)
    >>> func(5,6,7,1,2,3)
    <type 'tuple'>
    (567123)
     
    >>> def func(**dict):                                #字典收集所有的关键字
        print type(dict)
        print dict
         
    >>> func(a=1,b=9)                                    
    <type 'dict'>
    {'a'1'b'9}
    >>> func(m=2,n=1,c=11)
    <type 'dict'>
    {'c'11'm'2'n'1}

     函数嵌套

    python程序,一个函数在另外一个函数的里面,外层的函数返回的是里层函数。

    函数嵌套时,内层函数可以访问外层函数的变量,但不能对其变量重新赋值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> def yao1(a=1,b=32):
        def yao2(c=54):
            def yao3(d=3):
                def yao4(e=10):
                    return a+b+c+d+e
                return yao4
            return yao3
        return yao2
     
    >>> print yao1()()()()
    100

     函数式编程

    函数式编程与函数不同,函数式编程是将一个函数作为参数传递给另一个函数,最后返回一个函数。

    典型的函数式编程辅助函数有:reduce/map/filter等函数,一需要认识和积累这些辅助和内置函数,其二了解匿名函数lambda的使用,让函数式编程的代码更加简洁和易读。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> number =[2-59-7254-10-38]                   #给列表赋值
    >>> sum = filter(lambda x: x>0, number)                             #filter(func,number):从number的item中依次筛选符合func条件的元素,即从number列表中筛选x>0的元素并返回
                                                                        #lambda args: expression
    >>> average = reduce(lambda x,y: x+y, sum)/len(sum)                 #reduce(func,number):先将number元组中的前两个元素执行func函数,返回的值继续与下一个元素一起执行func函数
    >>> print average
    5
    >>>
     
    >>>print map(lambda x:x%3,range(6))                                #map(func,seq):seq中的每个元素都经过了func函数的作用,重新得到了func(seq[n])组成的列表
    [012012]
  • 相关阅读:
    Spring 多数据源 @Transactional 注解事务管理
    Spring 多数据源 @Transactional 注解事务管理
    Spring 与 SpringMVC 容器父子关系引出的相应问题
    Spring 与 SpringMVC 容器父子关系引出的相应问题
    Mongodb 备份 还原 导出 导入 等批量操作
    Mongodb 备份 还原 导出 导入 等批量操作
    关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题
    关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题
    svn工具的使用问题总结
    svn工具的使用问题总结
  • 原文地址:https://www.cnblogs.com/yuer20180726/p/10790376.html
Copyright © 2011-2022 走看看