码迷,mamicode.com
首页 > 编程语言 > 详细

5.2Python函数(二)

时间:2019-02-04 15:32:44      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:class   匿名   处理   进阶   高阶函数   rip   一个   div   code   

目录

前言

这一篇式相继上一篇5.1Python函数(一)的进阶文章。

一个重要的思想是:我们把”函数名“当成一个变量来处理。

(一)偏函数

==1.说明==

偏函数:在不修改原函数的原函数前提下,修改函数的默认值,新建的函数叫偏函数。

==2.原代码==

# 定义一个有默认值的函数
def test1(a, b, c, d=1):
    print(a+b+c+d)


# 现在有一个需求,想把默认值改为c=2,d=3
# 我们需要在重新构造一个全新的函数?
# 不需要,下面的定义类似类的继承,也就是偏函数的定义
def test2(a, b, c=2, d=3):
    test1(a, b, c, d)

# 调用偏函数
test2(1, 2)

==3.显示效果==

技术图片

(二)高阶函数

==1.说明==

函数名也是一个变量,也可以通过赋值,传递给其他变量。

当函数的形参接收的是一个函数名的时候,则称该函数是高阶函数

==2.源代码==

# 动态的计算两个数
def caculate(num1, num2, caculatefun):
    result = caculatefun(num1, num2)
    print(result)


# 求差函数
def mysum(a, b):
    result = a + b
    print("求和函数")
    return result


# 求和和函数
def mysub(a, b):
    result = a - b
    print("求差函数")
    return result


# 调用高级函数
caculate(4, 2, mysum)
caculate(4, 2, mysub)

==3.运行效果==

技术图片

(三)返回值函数

==1.说明==

当函数的返回值是:一个函数名称时,我们称返回值函数

==2.源代码==

# 定义一个返回值函数
def get_fun(symbol):
    # 子函数求和
    def my_sum(a, b):
        return a+b

    # 子函数求差
    def my_sub(a, b):
        return a-b

    # 根据判断返回不同的函数名
    if symbol == "+":
        return my_sum
    elif symbol == "-":
        return my_sub


# 调用返回函数
func = get_fun("+")
result = func(1, 2)
print(result)

==3.运行效果==

技术图片

(四)匿名函数

==1.说明==

没有名字的函数,我们称匿名函数,也称lambda函数。

语法:lambda var1, var2,……:表达式

注意:只能写一个表达式,而且只能用一次。

==2.源代码==

# 定义一个匿名函数
func = lambda x, y: x + y
result = func(1, 2)
print("结果是:", result)

==3.运行效果==

技术图片

(五)闭包函数

==1.说明==

首先清楚两个概念:

外部函数:在外出定义的函数。

内部函数:嵌套在一个函数里面的和函数。

闭包函数的定义:(满足三个条件)

  1. 必须有函数嵌套
  2. 内部函数引用到外部的变量
  3. 返回值是内部函数名

注:内部函数需要修改外部变量,需要用nolocal 声明

==2.源代码==

# 定义一个闭包函数
def test(a):
    b = 2
    def test2():
        nonlocal b
        b = 5
        print("a:", a)
        print("b:", b)
    return test2

# 调用闭包函数
fun = test(1)
fun()

==3.运行效果==

技术图片

作者:Mark

日期:2019/02/04 周一

5.2Python函数(二)

标签:class   匿名   处理   进阶   高阶函数   rip   一个   div   code   

原文地址:https://www.cnblogs.com/zyg123/p/10351717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!