• python----函数与函数式编程


    一. 函数与函数式编程

    1. 面向对象编程

    (类)class

    2.面向过程编程

    (过程) def

    3.函数式编程

    (函数) def

     (1)  函数的特点:

             代码重用:

             可扩展性;

             保持一致性。

    (2)函数的定义

    #python 中函数定义方法
    def test(x):                  #定义函数格式
       """the function definitions """ #函数说明
        x+=1
        return x        #返回值数=0,返回None,
    #
    返回值数=1,返回object, eg. return 0

    #返回值数>1,打包起来返回一个元组. eg. return 1,'lai',[q,4,5]
    a = test(4) print(a)

     

    在此插一句,学习一个打印当前时间

    import time
    time_format = '%Y-%m-%d %X'   #时间格式为年月日时分秒
    time_current = time.strftime(time_format)
    print('现在是北京时间 %s ' % time_current)

    (3) 形参与实参

    纯关键字参数时与顺序无关;

    纯位置参数必须按顺序写;

    当同时有关键自参数与位置参数时,关键参数不能写在位置参数前面;

    传递参数的时候,实参的个数应小于等于形参的个数。

    默认参数:

         定义的时候给形参一分值,没有实参传递的时候便用此值,有实参传递,则覆盖此值             def  fun(x,y=1):

    参数组:

       当实参的个数不确定时(非固定参数),用此法;

       格式:def fun(*args)    #用*号

    def fun(*argv):    #接收N个位置参数,存放成元组的形式
        print(argv)
    
    fun(1,2,3,4,5,6,7)
    运行结果:
    (1, 2, 3, 4, 5, 6, 7)

    def fun(x,*argv):
        print(x)
        print(argv)
    
    fun(1,2,3,4,5,6,7)
    运行结果:

    1
    (2, 3, 4, 5, 6, 7)

    def fun(**kwargs):   #**kwargs把N个关键字参数,转换成字典的方式存储
        print(kwargs)
        print(kwargs['name'])
        print(kwargs['age'])
    fun(name='xiaolaizi',age = '21')   #两种参数传递方式之一
    fun(**{'name':'wei','age':8})     #两种参数传递方式之二
    
    运行结果:
    {'name': 'xiaolaizi', 'age': '21'}
    xiaolaizi
    21
    {'name': 'wei', 'age': 8}
    wei
    8
    def fun(name,**kwargs):    #跟关键字参数叠加
    print(name) print(kwargs) fun('xiaolaizi',age=18) 运行结果: xiaolaizi {'age': 18}

    4、局部变量与全局变量

      

    age = 8    #全局变量
    def change_name(name):
        #global age      #申请全局变量(不要用,别入坑)
        age = 20
        print("before change",name,age)
        name = "xiaolaizi"       #局部变量,这个函数就是变量的作用域
        print("after change", name)
    
    name = "datou"
    change_name(name)
    print(name,age)
    print(age)
    运行结果:
    before change datou 20
    after change xiaolaizi
    datou 8
    8

    对比: age = 8 #全局变量 def change_name(name): global age #申请为全局变量(不要用) age = 20 print("before change",name,age) name = "xiaolaizi" #局部变量,这个函数就是变量的作用域 print("after change", name) name = "datou" change_name(name) print(name,age) print(age) 运行结果: before change datou 20 after change xiaolaizi datou 20 20

     5.递归

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

             特性:

                   a.必须有明确的结束条件;

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

                   c.递归效率不高,递归层次过多会导致栈溢出。

     6.  函数式编程

     

                    函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参          数)和输出(返回值)。 
                    和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
                    和过程化编程相比,函数式编程里函数的计算可随时调用。

    定义:

           简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。

             它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

    例子:

                  函数式编程中最古老的例子莫过于1958年被创造出来的LISP了,透过 LISP,可以用精简的人力。较现代的例子包括               Haskell、Clean、Erlang和Miranda等。(引用自百度百科)

    7.  高阶函数

              变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    def add(x,y,f):
        return f(x) +f( y)
    res = add(3,-6,abs)     #把绝对值函数传给了f
    print(res)

    补充:

    小技巧:Ctrl+/  :全部注释。

  • 相关阅读:
    interleaver design
    MKL + VS2019
    【QQ空间转移】该掌握的知识
    【QQ空间转移】原创 通信历史及接收机
    【QQ空间转移】通信小精灵
    【QQ空间转移】雷公如何发信号
    【QQ空间转移】硬币的两面,Nyquist rate 和 Nyquist frequency
    【QQ空间转移】Peano公理
    【QQ空间转移】复变函数导数和微分的深入理解
    【QQ空间转移】 由BPSK想到的。。。
  • 原文地址:https://www.cnblogs.com/bltstop/p/9371797.html
Copyright © 2020-2023  润新知