首页 > 代码库 > python函数式编程

python函数式编程

一、自定义函数

定义函数时,函数体不执行;只有在调用函数时,函数体才执行。函数的结构:

1. def

2. 函数名

3. 函数体

def func_name():    函数体

4. 返回值

如果没有声明返回值,返回值默认为None

def func_name():    pass    return Truedef func_name():    myString = this is to test how to return    return mySting

5. 参数

  • 形式参数
    • 定义函数时,指定形式参数,有几个形参就写几个,eg. def func(args1,args2)
    • 如果没有形式参数,就留空
  • 实际参数
    • 调用函数时传入的参数,称之为实际参数,又叫实参, eg. func(‘kaye‘,21)
  • 默认参数
    • 在定义函数时,指定形式参数的默认值,这种形参我们称之为默认参数,eg. def func(args1, args2 = ‘default‘)
    • 默认参数必须放在形参列表的最后,如果有多个默认参数也都放在形参列表最后
  • 指定参数
    • 调用函数传入实参时,指定这个实参是要赋值给相应的形参,这种情况叫指定参数
    • eg. func(args1 = ‘kaye‘, args2 = 21)
    • 传入指定参数时,实参的传入顺序不必遵循函数定义时形参的顺序, eg  func(args2 = 21,args1 = ‘kaye‘)
  • 动态参数
    • *args  
      • def func(*args)  表示函数的形参是动态参数,其中args代表一个元组,实参传入的一瞬间,构建了一个元组
      • 可以接收序列化数据类型(字典、元组、字符串),作为其传入参数
      • 调用方法:func(*[‘kaye‘,‘leo‘,‘jack‘]) 或 func(‘kaye‘,‘leo‘,‘jack‘) 
      • 此时args被赋值为(‘kaye,‘leo‘,‘jack‘), args[0] = ‘kaye‘, args[1] = ‘leo‘,...
      • args从最外层看是元组,而元组的元素可以是列表、字典、元组等等,由此可以获得多层嵌套的序列化数据类型
    • **kwargs   kwargs代表一个字典
      • def func(**kwargs) 表示函数的形参是动态参数,其中kwargs代表一个字典,实参传入的一瞬间,构建了一个字典
      • 可以接收字典作为其传入参数
      • 调用方法:func(**{‘kaye‘:21,‘leo‘:25,‘jack‘:30}) 或 func(‘kaye‘=21,‘leo‘=25,‘jack‘=30)
      • kwargs从最外层看是字典,而字典的键值对可以是列表、字典、元组等等,由此可以获得多层嵌套的字典
  • 万能参数
    • *args,**kwargs
      • def func(*args, **kwargs),其中args代表一个元组,kwargs代表一个字典,实参传入的一瞬间,分别构建一个元组和一个字典
      • 可以同时接收序列化数据类型(字典、元组、字符串)和字典,作为其传入参数
      • 调用方法: func(*[‘kaye‘,‘leo‘],**{‘kaye‘:21,‘leo‘:25}) 或 func(‘kaye‘,‘leo‘,‘kaye‘=21,‘leo‘=25)
      • 这种方法可以用于构建多层嵌套的字典

6. 补充:

  • 函数重新定义(以后再说函数重载)

def f1

def f1

python解释器从上到下执行命令,当函数被重新定义,调用该函数时会使用重新定义的这个函数

  • 调用函数传入形参时,是传入了对实参的引用,也就意味着,调用函数时对形参的操作,是直接作用在实参上的,会引起实参的变化
  • 全局变量
    • 全局变量放在程序最前面,从实际作用上看相当于常量,应该全部大写
    • 全局变量可以被所有函数直接读取
    • 如果要在函数中对全局变量重新赋值,必须在变量名前面加上global
    • 如果全局变量是字典/列表,要对字典列表中的元素进行增删改,则不需要加global,直接按平常代码写法书写即可
  • 注释
    • 一定要写注释,让别人一看就知道这个函数是在完成什么功能
    • 一般在函数定义第一行之后输入注释内容,用三个双引号括起来,"""comment"""
      • :param param1:
      • :return:...

二、三元运算(三目运算)

对简单的条件语句,可以用三元运算简写。三元运算只能写在一行代码里面

# 书写格式result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量

examples:

result = the result if the if succeeds if option == True else the result if the if fails and falls to the else part

 

三、lambda表达式

对于简单的函数,也存在一种简便的表示方式,即:lambda表达式

# ###################### 普通函数 ####################### 定义函数(普通方式)def func(arg):    return arg + 1    # 执行函数result = func(123)    # ###################### lambda ######################    # 定义函数(lambda表达式)my_lambda = lambda arg : arg + 1    # 执行函数result = my_lambda(123)

 

四、内置函数

技术分享

注:查看详细猛击这里

 

五、递归

利用函数编写如下数列:

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368...

def func(arg1,arg2):    if arg1 == 0:        print arg1, arg2    arg3 = arg1 + arg2    print arg3    func(arg2, arg3)    # 在当前函数定义中调用当前函数,体现了递归  func(0,1)

python函数式编程