• python基础知识之函数与函数式编程


    3种编程方式:

      1.面向对象(最火的)。(过去大部分的编程方式);》》主要是依靠:类》》class ,就是具有逻辑的过程,说话的方式描述

      2.面向过程。主要是 过程》》def 过程是没有返回值的函数,但是python也会返回none 基本与函数式编程没有区别了,最小的单元是一个一个的def定义的过程,一个一个逻辑是def定义的过程

      3.函数式编程。编的函数更接近数学中的函数 是一种编程规范 也就是如何编程的方法论 主要是 函数》》def 例如lisp #hashshell erlang# 三种语言 可以 真正较纯粹的使用函数式编程来编写程序。

    示例:(1+2)*3-4

    传统编程方法:var a =1+2;

              var b =1*3;

           var c =b-4;

    函数式编程则要求使用函数进行,把不同的运算定义成不同函数进行计算,写成下面的形式来进行:

    var result = subtract(multiplely(add(1,2),3),4);

    python中的函数式编程是:逻辑结构化和过程化的一种编程方法

    一,函数基础介绍(day3 22)【funt_test.PY】

    def func1():#函数
        '''文档介绍'''
        print('in the func1')#过程
        return 0#返回值

    def func2():#过程
         '''文档介绍'''
         print('in the func2')#函数体

    x=func1()
    y=func2()
    print(x)
    print(y)

    重用函数的优点,可以让老代码,快速得到再次利用。

    重要函数的优点,可以扩展方便,修改功能更方便,保持一致性。

    return %s %s》》终止函数继续运行,并返回结果一定是一个值,但若写多个值则,多个值则是打包成一个元组返回 (% %) 

    函数返回值的作用是:告诉使用者,这个函数调用后的结果是什么,让后来的人知道函数的运行结果,能够根据这个结果做出相应的反应。

    def test(x,y,z):

      pass

    #中x和y为函数中的形参(也叫位置参数),这个x和y不是真实存在的,只是一个引导量中间量,不占用内存空间的,相当于一个内存空间的标识,即房子的门牌号。

    而调用这个函数时text(1,2)中这个1和2则是实参要占相应的内存的,要占x和y所代表的两个内存。相当于向x和y这个门牌号写的房子里丢1和2这两个东西。

    函数有关键字调用赋值,的位置参数调用赋值

    即test(y=1,x=2,z=3)和test(x,y)#位置调用必须按照顺序写,关键字可以不按顺序写。

      #注意#在调用时关键参数调用是不能写在位置参数前面的。例如可以写text(1,z=6,y=8)但是不能写成text(1,y=8,8)

     def text(x,y=2):

      pass

    #这个y便是默认参数,在调用时有没有赋值y都是可以的默认参数可以不赋值#注意#但没有赋值默认参数时则按照默认的值运行,但是形参即位置参数必须有赋值。

    ##附加##但写pass时这个后面的过程可直接忽略,不报错#方便下次继续扩展。

    def text(*args):

      pass

    #当这么定义函数的形参后,则赋值时可以传很多的值进去如text(5,1,4,6,5,46,6,5)也可text(*[1,5,156,648,3]),它会将其打包成一个元组再赋值给形参args。

    ##即将n个参数转换成元组的方式传进去##

    def text(**kwargs):

      print(kwargs)

    ##**kwargs的作用是,把n个关键字参数变成字典传进去## 如text(**{'N'=1,'M'='SOO'}) 或者text(name=‘i’,age=8)

    *args和**args也可以混合使用

    二,函数,局部/全局变量(day3 23)

    小贴士:选中 再CTRL+/  则 批量注释

    局部变量只在函数里生效,例如:

    在语法块(定义的函数里)里定义的就是局部变量

    school=1#这个就是全局变量,在没有缩进的地方定义的是全局变量
    #而且全局变量是不能被语法块里定义的局部变量改变的,但是这样仅仅是指数字和字符串,其他数据类型是可以修改的。
    def
    change_name(name): global school#但是如果加上global则可以在函数里改全局变量,注意一般不要这样使用,因为这样改了之后不好调试。 school = "Mage Linux" print("before change",name,school) name ="Alex li" #这个函数就是这个变量的作用域 age =23 print("after change",name) print("school:",school) name = "alex" change_name(name) print(name) 》》Traceback (most recent call last): File "C:/Users/home9/PycharmProjects/task1/day3/局部变量.py", line 27, in <module> print("school:",school) NameError: name 'school' is not defined
    '''全局变量和局部变量,在子程序中定义的变量称为局部变量,在程序的一开始定义的称为全局变量。
    全局变量的作用域是整个程序,而局部变量的作用域是定义该变量的子程序
    特别注意:当全局变量与局部变量重名时,在定义局部变量的子程序内,局部变量起作用;在其他地方全局变量起作用。'''

     三,函数,递归(day3,25)

    递归特性:

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

    2.每次进入更深一层递归时,问题的规模相对比上一次递归都有所减少,减的越多则算法的效率越高。

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

    小贴士:程序调试,用pycharm的断点功能,一步一步的看执行过程。(—------》》14:15)

    四,高阶函数(day3,26)

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

    def add(a,b):      

      return a+b          

    简单的函数》》》》高阶函数》》》》def (a,b,c):

    def add(a,b,f):

      return f(a)+f(b)#函数调用一个其他函数进去

    res = abs(3,-6,abs)#也可用传函数名进去执行这个函数。

    print(res)

       

  • 相关阅读:
    document
    winform(公共控件)
    winform属性
    ADO.NET(查询、属性扩展)
    ADO.NET(完整修改和查询、实体类,数据访问类)
    ADO.NET基础(增删改查)
    面向对象(类库、委托)
    c#复习整理
    面向对象(多态)
    面向对象(封装、继承)
  • 原文地址:https://www.cnblogs.com/home979/p/7853854.html
Copyright © 2020-2023  润新知