python基础知识——函数(下)


python基础知识——函数(下)

  • python基础知识——函数(下)
    • 1. 高阶函数
    • 2. 闭包
    • 3. 装饰器
    • 4. 装饰器的使用

1. 高阶函数

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

# 接收函数作为参数,或者将别的函数作为返回值返回的函数就是高阶函数
def fun_1(i):if i%2 == 0:return Truedef fun(n):list_1 = []for i in range(101):if n(i):list_1.append(i)return list_1print(fun(fun_1))
  • 匿名函数
    匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
  • lambda语法的定义如下:

lambda [arg1 [,arg2, … argN]] : expression

# 1.防止重名
# 2.不用再去定义函数,使用方便
# 3.可以作为一个传参的工具#lambda 函数就是匿名函数
list_1 = [1,2,3,4,5,6,7,8]
#语法: lambda 参数:表达式
print((lambda a,b:a+b)(1,2))#filter()有两个参数,第一个是过滤规则,第二个是过滤的数据
s = (lambda a:a % 2 == 0)
print(list(filter(s,list_1)))

2. 闭包

  • 如果在一个函数的内部定义了另一个函数,外部的函数叫它外函数,内部的函数叫它内函数。
#   行成闭包的条件(三点缺一不可)
# • 函数嵌套
# • 将内部函数作为返回值返回
# • 内部函数必须要使用到外部函数的变量#定义一个外部函数
def fun(num):#定义一个内部函数def fun_1(n):res = num + n# print(res)return resreturn fun_1
# 函数的调用等于函数的返回值
f = fun(1)   #fun(1) = fun_1 = f
#内部函数的调用
print(f(2))   #fun(1)(2) = fun_1(2) = f(2)
print(f(3))
  • 闭包的好处
#• 通过闭包可以创建一些只有当前函数能访问的变量
#• 可以将一些私有数据藏到闭包中
#保证被内部使用的外部变量不被销毁
#定义一个外部函数
def fun(num):#定义一个内部函数def fun_1(n):# global num   无意义nonlocal num   #使num为局部变量num = 10res = num + n# print(res)return res# print(num)fun_1(1)# print(num)return fun_1
# 函数的调用等于函数的返回值
f = fun(1)   #fun(1) = fun_1 = f

3. 装饰器

  • 在编程时,为了实现同样的功能,需要更改代码来实现。如果大量的修改代码,不仅增加了工作量,还不方便后期维护,更加不符合ocp规则(o:open 开放对代码的拓展,c :close 关闭对代码的修改),装饰器就是为了解决这写问题被引入的。
def fun(a,b)print('函数开始')print('函数结束')return a+bdef fun1(a,b):return a*b'''
如果fun函数要实现fun1函数同样的输出效果,可以直接复制print进行粘贴就行,\
但是这样就出现了代码的冗余、增加工作量等情况,那是否有办法不用复制就直接那过来用呢?
'''
#例子一:
def fun(fn):print('函数开始')fn()print('函数结束')
def fun1():print('函数运行')
fun(fun1)
#例子二
def fun(fn,a,b):print('函数开始')res = fn(a,b)print(res)print('函数结束')
def add(a,b):return a+b
fun(add,1,2)
#例子三
'''
但是这样还是不行,因为每次还得修改参数,可以使用不定长参数进行传参
'''
def fun(fn,*args):print('函数开始')res = fn(*args)print(res)print('函数结束')
def add(a,b):return a+b
fun(add,1,2)

4. 装饰器的使用

  • 通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展
  • 在开发中,我们都是通过装饰器来扩展函数的功能的
#装饰器是一个特殊的闭包函数#装饰器
def ch(fn):                        #定义外层函数def new_ch(*args,**kwargs):                #定义一个内层函数,使用不定长参数进行传参print('函数开始')fn(*args,**kwargs)                           #调用内层函数print('函数结束')return new_ch              #返回内层函数名@ch   #@ch=ch(fun),装饰器的语法糖写法  ,必须紧贴需要用到装饰器的函数,即@ch必须在def fun():这个函数前
#函数
def fun():                       #定义一个函数print('我是fun函数')#return '我是fun函数'#函数调用方法一:通过装饰器的语法糖写法
fun()#函数调用方法二:
# r = ch(fun)      #此处是将函数名fun作为实参传递给fn,即fn = fun  ,ch(fn) = new_ch = ch(fun) ,\
#                  # 内层函数调用ch(fn)() = new_ch() = ch(fun)()
# r()

# 总结 本文为学习笔记,转载请标明出处,本文仅供交流学习,请勿用于非法途径,希望本文对大家有帮助。

仅是个人意见,如有不足之处或者侵权,请留言

python基础知识——函数(下)相关推荐

  1. python基础知识纵览(下)

    python函数 1.函数作用 最大化代码重用和最小化代码冗余 流程的分解 2.函数基本概念 def创建对象并赋值给某一变量 ## 创建一个函数对象并赋值给fn_namedef fn_name(arg ...

  2. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

  3. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

  4. 1.15 Python基础知识 - 函数

    函数是可重用的程序代码段. 一.函数的声明和调用 声明格式: def 函数名([形参列表]): 函数体 调用格式: 函数名([实参列表]) 函数名:是一种标识符,命名规则为全小写字母,可以使用下划线增 ...

  5. (更新时间)2021年3月21日 python基础知识(函数的返回值)

    1.函数返回值 <1>"返回值"介绍 所谓"返回值",就是程序中函数完成一件事情后,最后给调用者的结果 <2>带有返回值的函数 想要在函 ...

  6. (更新时间)2021年3月21日 python基础知识(函数的定义和使用)

    函数定义和调用 <1>定义函数 定义函数的格式如下: def 函数名():代码 demo: # 定义一个函数,能够完成打印信息的功能 def print_info():print('--- ...

  7. python环境下数据操作_数据分析环境搭建和Python基础知识

    搭建数据分析环境主要包括使用anaconda管理包和环境:使用Jupyter notebook将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.Python基础知识包括关键点(数据 ...

  8. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  9. python基础知识资料-Python基础知识梳理 - 第02部分

    本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等 ...

  10. python基本语法规则-python基础知识——基本语法

    在python基础知识这个系列中,准备罗列出我学习python的一些基础知识,包括:基本语法 控制语句 内置数据结构 模块和函数 字符串 文件处理 面向对象 异常处理 以前写机器学习算法喜欢使用Mat ...

最新文章

  1. 搜索不包含关键词_sem竞价代运营丨做竞价推广,关键词匹配才是重点
  2. 018_switch语句
  3. 揭秘:美国警方监控技术大曝光
  4. 你知道为啥程序员下班后只关显示器从不关电脑?
  5. moment 24小时与12小时区别
  6. PM2.5空气质量指数(AQI)是如何计算的
  7. 前端js、jQuery实现日期格式化、字符串格式化
  8. C#编程(二十三)----------实现继承
  9. mysql汉字转拼音首字母报错_MySQL 汉字转拼音
  10. Java入门级项目 汽车租赁系统
  11. Python与SEO,搜狗站长平台链接提交工具Python脚本源码
  12. Spring Cloud项目是如何读取bootstrap.properties文件的?
  13. 如何用电脑玩石器时代M 石器时代M手游PC电脑版教程
  14. attempted an unsupported operation 、an unsupported operation was attempted [尝试不支持的操作]错误的三种解决方案
  15. 华为P20PRO怎样开通云闪付_华为P20NFC_华为p20nfc怎么打开_华为p20nfc刷卡怎么用-站长之家...
  16. 【嵌入式操作系统-2】Cortex-M7处理器编程者模型
  17. java8 —— Stream( 流 )
  18. base64 hash256 编码不一致问题
  19. asp.net网上商城系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
  20. Android程序开发意见反馈的实现

热门文章

  1. matlab kfcm,聚类——KFCM的matlab程序
  2. Mysql 数据库中Exists 关键字的使用
  3. 图像处理_描述下SIFT特征?(清晰易懂)
  4. 论文笔记_S2D.22_2015-CVPR_利用深度特征回归和分层CRFs对单目图像进行深度和表面法线估计
  5. 随手记_常用coding软件的快捷键-clion/vs code/vs/kdevelop
  6. Tensorflow2梯度带tape.Gradient的用法_(全面,深入)
  7. Logistic回归及梯度上升算法
  8. kaggle实战之流浪猫狗归处预测
  9. marathon 测试
  10. 关于codeblock中一些常用的快捷键(搬运)