七、函数下

函数式编程

  • 在python中,函数是一等对象
  • 一等对象一般都会具有如下特点:
    1. 对象是在运行时创建的
    2. 能赋值给变量或作为数据结构中的元素
    3. 能作为参数传递
    4. 能作为返回值返回
  • 高阶函数
    • 高阶函数至少要符合以下两个特点中的一个

      • 接受一个或多个函数作为参数
      • 将函数作为返回值返回
    • 接受函数作为参数,或者将函数作为返回值得函数是高阶函数
      #定义一个函数#可以将制定列表中的所有的偶数,保存到一个新的列表中返回def fn(list):    new_list = []    for i in list:        if i % 2 == 0:            new_list.append(i)    return new_list

1.fulter()

fulter() 可以从序列中过滤出符合条件的元素,保存到一个新的序列中

参数:

  1. 函数,根据该函数来过滤序列(可迭代的结构)
  2. 需要过滤的序列(可迭代结构)

返回值

过滤后的新序列(可迭代结构)

2.lambda 函数表达式 匿名函数

lambda函数表达式专门来创建一些简单地函数,他是函数创建的又一种方式

语法:lambda 参数列表:返回值

匿名函数一般都是作为参数使用,其他部分一般不会使用

3.sort()

  1. 该方法用来对列表中的元素进行排序
  2. sort()方法默认是直接比较列表中的元素大小
  3. 在sort()可以接收一个关键字参数,key
  4. key需要一个函数作为参数,当谁知了函数作为参数
  5. 每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小
    l = [2,3,4,1,6,5]l.sort()print(l)

4.sorted()

这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序不会影响原来的对象,而是返回一个新对象

5.闭包

将函数作为返回值返回,也是一种高阶函数,这种高阶函数我们也成为闭包,通过闭包可以创建一些只有当前函数能访问的变量,

作用:可以将一些私有的数据藏到闭包中

形成函数的要件

  1. 函数嵌套
  2. 将内部函数作为返回值返回
  3. 内部函数必须要使用到外部的变量
def fn():    a = 10    #函数内部在定义一个函数    def inner():        print(‘我是fn2‘,a)    #将内部函数 innner作为返回值返回    return inner#r是一个函数,是调用fn()后返回的函数#这个函数是在fn()内部定义,并不是全局函数#所以这个函数总是能访问到fn()函数内的变量r = fn()?    # 求多个数的平均值    # print(sum(sum)/len(sum))?def make_avg():    nums = []?    def avg(n):        nums.append(n)        return sum(nums)/len(nums)    return avgavg = make_avg()print(avg(10))print(avg(30))

6.装饰器

通过直接修改代码的方式来完成某个需求,会产生一下某些问题

  1. 如果要修改的函数过多,修改起来会比较麻烦
  2. 不方便后期维护
  3. 这样做会违反开闭原则(ocp)

    开闭原则:程序的设计,要求开发对程序的扩展,要关闭对程序的修改

像begin_end()这种函数我们称它为装饰器

  • 通过装饰器,可以再不修改原来函数的情况下来对函数进行扩展
  • 在开发中,我们都是通过装饰器来扩展函数功能的‘

在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数。同时可以为一个函数指定多个装饰器,这样的函数将会安装从内到外的方式进行装饰

def begin_end(old):    ‘‘‘    用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束    参数:        old 要扩展的函数对象    ‘‘‘#创建一个新函数    def new_function(*args,**kwargs):        print(‘开始执行---‘)        #调用被扩展的函数        result = old(*args,**kwargs)        print(‘执行结束---‘)        #返回执行的结果        return result?    #返回新函数    return new_function@begin_end    #越靠近def hello的再靠内def hello():    print(‘你好‘)hello()

原文地址:https://www.cnblogs.com/wn-888/p/11647170.html

时间: 2024-10-11 02:19:17

七、函数下的相关文章

android在JNI_OnLoad入口函数下断点动态调试so库

一般来说,很多APK的校验代码,都会在程序运行的时候自动加载一些动态so库,然后执行这些库中的校验代码.所以为了能够通过程序的校验,我们必须在执行这些函数之前下断点--理想的方法就是在JNI_OnLoad入口函数下断点. 在2.3.3模拟器中详细步骤如下: ①在控制台输入adb shell 进入手机,然后使用  am start -D -n 包名/类名,以等待调试的模式启动APK应用: 这里需要说明的是 "包名/类名"的书写方法: # am start -n {包(package)名}

从头开始学JavaScript (七)——函数

原文:从头开始学JavaScript (七)--函数 一.return 函数在执行完return之后停止并立即退出. return返回值:与return: 如下两个例子: 1 function sum(num1, num2) { 2 num1= num1 + num2; 3 return num1; 4 } 5 6 var result = sum(5, 10); 7 alert(result);//15 function sum(num1, num2) { num1= num1 + num2;

实验七——函数定义及调用总结

1.本次课学习到的知识点: 函数 (1)定义:函数是一个完成特定工作的独立程序模块,包括函数和自定义函数两种: 1.scanf(),printf()等为库函数,由c语言系统提供定义,编程时只要直接调用即可. 2. cylinder(),fact()函数,需要用户自己定义,为自定义函数. (2)cylinder(),fact()功能不同,但他们能实现一个计算,并可以得到一个明确的计算结果. (3) 函数定义的一般形式为: 函数类型    函数名(形式参数表) { 函数实现过程 } (4)函数部首:

JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)

上部分主要介绍高阶函数的常见形式,本部分将着重介绍高阶函数的高级应用. 1.currying currying指的是函数柯里化,又称部分求值.一个currying的函数会先接受一些参数,但不立即求值,而是继续返回给另一个函数,通过闭包存储起来.等到函数被真正需求要求值的时候,将之前传入的参数统一起来求值.例如,我们要计算一个月的开销,我们并不需要计算每天具体花了多少,而是需要计算月底总共花掉多少,也就是说,实际上我们只需要在月底计算一次.所以每个月的前29天,我们都只需要保存好当天的开销,到30

Windbg对过滤驱动DriverEntry函数下断点技巧

方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Load Address + 入口点地址 例子: 1> Load Address = 0xFAABF000 2> 入口地址 = 0x3400 3> Windbg下断点 bu 0xFAABF000+0x3400

SQL/PLSQL 之110个常用函数<下>:一定有你要找的

79.LAG 功能描述:可以访问结果集中的其它行而不用进行自连接.它允许去处理游标,就好像游标是一个数组一样.在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行.Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD SAMPLE:下面的例子中列prev_sal返回按hire_date排序的前1行的salary值 SELECT last_name, hire_date, salary, LAG(salar

C语言学习笔记(七) 函数指针

"函数指针"和"指针函数"是一对容易把人弄晕的概念,但我们只要把握好定语,倒也不难理解.这两个名词都是简称,"指针函数"是"返回值为指针的函数",而"函数指针"则是"指向函数的指针".这篇主要讲讲函数指针. 我们讲有int 指针,char指针,它们都是一个指针指向这个变量的实际地址.而C语言在编译函数的时候每个函数会有一个入口地址,当我们用一个指针指向这个入口地址,它就称为函数指针.有了

UWP开发入门(七)——下拉刷新

本篇意在给这几天Win10 Mobile负面新闻不断的某软洗地,想要证明实现一个简单的下拉刷新并不困难.UWP开发更大的困难在于懒惰,缺乏学习的意愿.而不是“某软连下拉刷新控件都没有”这样的想法. 之前我也没有进行过下拉刷新的研究.于是先去google了几篇blog学习了一下,然后再看了某软官方的Sample.(同学们啊官方有下拉刷新的Sample啊!就在Git上啊!不要钱无门槛啊!)学习之后发现实现的方式大体分为两类. 一类是以某软Sample和博客园MS-UAP封装的PullToRefres

性能魔方七剑下天山之莫问剑:全球首创智能评测

导读:体检已经成为大家保持健康的一种重要的手段,人们对自己健康的管理,重点应该是对疾病的早期发现,而疾病的早期发现主要还是依靠体检.对健康重视的人,都会定期体检,并且重视体检报告,根据各科体检结果,纠正不良生活习惯,达到预防和改善健康的目的.在互联网行业,对自己的产品做一个全面的"体检"也有相同的意义. 性能魔方(mmTrix)是国内技术与服务最为顶尖的基础云和大数据服务商,三大核心云服务之一云评测为互联网数百万企业和开发者提供应用健康体验服务,多项检测技术全球领先,而且完全免费,主要