广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的闭包和装饰器的使用示例
  • 686
分享到

python中的闭包和装饰器的使用示例

python闭包和装饰器python装饰器 2022-11-21 22:11:41 686人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录函数参数闭包的构成条件基础的闭包的使用nonloal关键字的使用基础代码实现(装饰器)装饰器的基本使用装饰器的使用有参数的装饰器的使用带有返回值的装饰器带有不定长参数的装饰器带有

函数参数

python中,函数可以当作参数使用

def func01():
    print("func01 is show ......")


# func01()
# 函数名存放的是函数所在空间的地址
# print(func01)
# 函数名也可以像普通变量一样赋值
# func02 = func01
# func02()

def foo(func):
    func()


foo(func01)

闭包的构成条件

1.在函数嵌套(函数里面再定义函数)的前提下
2.内部函数使用了外部函数的变量(还包括外部函数的参数)
3.外部函数返回了内部函数

# 闭包的构成条件:
# 1在函数嵌套(函数里面再定义函数)的前提下

def func_out(num1):
    def func_inner(num2):
        # 2内部函数使用了外部函数的变量(还包括外部函数的参数)
        num = num1 + num2
        print("num的值为", num2)

    # 3外部函数返回了内部函数
    return func_inner


# 创建闭包实例
f = func_out(10)
# 执行闭包
f(1)
f(2)

基础的闭包的使用

# 外部函数
def config_name(name):
    # 内部函数
    def say_info(info):
        print(name + ":" + info)

    return say_info
tom = config_name("tom")
tom("你好")
tom("你在吗")

jerry = config_name("jerry")
jerry("你好")
jerry("我在呢")

# 外部函数
def config_name(name):
    # 内部函数
    def say_info(info):
        print(name + ":" + info)

    return say_info


tom = config_name("tom")
tom("你好")
tom("你在吗")

jerry = config_name("jerry")
jerry("你好")
jerry("我在呢")

nonloal关键字的使用

1.非局部声明变量指代的已有标识符是最近外面函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认行为是首先搜索本地命名空间。nonlocal声明的变量只对局部起作用,离开封装函数,那么该变量就无效。
2.非局部声明不像全局声明,我们必须在封装函数前面事先声明该变量
3.非局部声明不能与局部范围的声明冲突

# 外部函数
def func_out(num1):
    # 内部函数
    # aaa = 10

    def func_inner(num2):
        nonlocal num1
        num1 = num2 + 10
    print(num1)
    func_inner(10)
    print(num1)

    return func_inner
# num1 = 10
# f = func_out(10)
# 调用闭包 = 内部函数 num2 = 10
# f(10)

func_out(10)

基础代码实现(装饰器)

# 1.定义一个装饰器(装饰器的本质是闭包)
def check(fn):
    def inner():
        print("登录验证")
        fn()

    return inner

# 需要被装饰的函数
def comment():
    print("发表评论")

# 2使用装饰器装饰函数(增加一个登录功能)
comment = check(comment)
comment()

装饰器的基本使用

# 1定义一个装饰器(装饰器的本质是闭包)
def check(fn):
    def inner():
        print("请先登陆")
        fn()

    return inner
# 2使用装饰器装饰函数(增加一个登陆功能)
# 解释器遇到@check 会立即执行 comment = check(comment)

@check
def comment():
    print("发表评论")
comment()

装饰器的使用

import time
# 1 定义装饰器
def get_time(fn):
    def inner():
        start = time.time()
        fn()
        end = time.time()

        print("时间:", end - start)

    return inner

# 2 装饰函数
# 要被装饰的函数
@get_time
def func():
    for i in range(100000):
        print(i)
func()

有参数的装饰器的使用

# 定义装饰器
def logging(fn):  # fn = sum_num
    def inner(a, b):
        fn(a, b)

    return inner  # sum_num = inner

# 使用装饰器装饰函数
@logging
def sum_num(a, b):
    result = a + b
    print(result)
sum_num(1, 2)

带有返回值的装饰器

# 定义装饰器
def logging(fn):  # fn = sum_num
    def inner(a, b):
        result = fn(a, b)
        return result

    return inner  # sum_num = inner

# 使用装饰器装饰函数
@logging
def sum_num(a, b):
    result = a + b
    return result
result = sum_num(1, 2)
print(result)

带有不定长参数的装饰器

# 定义装饰器
def logging(fn):  # fn = sum_num
    def inner(*args, **kwargs):
        fn(*args, **kwargs)

    return inner  # sum_num = inner

# 使用装饰器装饰函数
@logging
def sum_num(*args, **kwargs):
    print(args, kwargs)
sum_num(1, 2, 3, age="18")

带有参数的装饰器的使用

# 装饰器
def logging(flag):  # flag = "+"

    # 外部函数
    def decorator(fn):
        # 内部函数
        def inner(num1, num2):
            # 判断流程
            if flag == "+":
                print("--正在努力加法计算--")
            elif flag == "-":
                print("--正在努力减法计算--")
            result = fn(num1, num2)
            return result

        return inner

    # 返回装饰器
    return decorator
# 被带有参数的装饰器装饰的函数
@logging('+')  # 1 logging("+") 2 @decorator起到装饰器的功能了
def add(a, b):
    result = a + b
    return result
# 执行函数
result = add(1, 3)
print(result)

类装饰器的使用

# 定义类装饰器
class Check(object):
    def __init__(self, fn):
        self.__fn = fn

    def __call__(self, *args, **kwargs):
        print("登录")
        self.__fn()
@Check
def comment():
    print("发表评论")
comment()

到此这篇关于Python中的闭包和装饰器的使用的文章就介绍到这了,更多相关python闭包和装饰器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中的闭包和装饰器的使用示例

本文链接: https://www.lsjlt.com/news/173335.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中的闭包和装饰器的使用示例
    目录函数参数闭包的构成条件基础的闭包的使用nonloal关键字的使用基础代码实现(装饰器)装饰器的基本使用装饰器的使用有参数的装饰器的使用带有返回值的装饰器带有不定长参数的装饰器带有...
    99+
    2022-11-21
    python闭包和装饰器 python装饰器
  • 简析Python的闭包和装饰器
    什么是装饰器? 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直接...
    99+
    2022-06-04
    简析 Python
  • 怎么在python中使用闭包和装饰器
    本篇文章为大家展示了怎么在python中使用闭包和装饰器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、闭包闭包的形成条件:函数嵌套。内部函数使用了外部函数的变量或者参数。外部函数返回了使用外 部...
    99+
    2023-06-15
  • Python 中闭包与装饰器案例详解
    目录1.Python中一切皆对象2.函数式第一类对象3.函数对象 vs 函数调用4.闭包&LEGB法则5.装饰器&语法糖(syntax sugar)6. 回归问题项目...
    99+
    2022-11-12
  • 深入理解python中的闭包和装饰器
    python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。 以下说明主要针对 python2.7...
    99+
    2022-06-04
    python
  • python中*args与**kwarsg及闭包和装饰器的用法
    目录*args与**kwarsg及闭包和装饰器过程Python fun(*args,**kwargs)中*args,**kwargs参数含义及用法1. Python函数中的两种参数2...
    99+
    2022-11-11
  • Python的闭包和装饰器你真的了解吗
    目录闭包装饰器总结闭包 闭包就是能够读取其他函数内部变量的函数。 def test1(k, b): def test1_1(x): print(k*x+b) ...
    99+
    2022-11-13
  • Python编程中装饰器的使用示例解析
    装饰函数和方法 我们先定义两个简单的数学函数,一个用来计算平方和,一个用来计算平方差: # get square sum def square_sum(a, b): return a**2 + b*...
    99+
    2022-06-04
    示例 Python
  • python装饰器的示例分析
    这篇“python装饰器的示例分析”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“python装饰器的示例分析”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们...
    99+
    2023-06-06
  • Python中使用装饰器来优化尾递归的示例
    尾递归简介 尾递归是函数返回最后一个操作是递归调用,则该函数是尾递归。 递归是线性的比如factorial函数每一次调用都会创建一个新的栈(last-in-first-out)通过不断的压栈,来创建递归, ...
    99+
    2022-06-04
    递归 示例 Python
  • python装饰器代码的示例分析
    这篇文章主要介绍python装饰器代码的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.装饰器通用模型def wrapper(fn):    def&nbs...
    99+
    2023-06-29
  • python中装饰器信号与槽的示例分析
    这篇文章主要为大家展示了“python中装饰器信号与槽的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python中装饰器信号与槽的示例分析”这篇文章吧...
    99+
    2022-10-19
  • Python中的装饰器使用
    目录Python装饰器总结Python装饰器 Python的装饰器是个好东西,它能干很多事情。 但对于新手,它看起来似乎没那么简单。 但事实上,装饰器本身也只是个函数。 import...
    99+
    2022-12-19
    Python装饰器使用 装饰器使用 Python装饰器
  • js中闭包的用法示例
    小编给大家分享一下js中闭包的用法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!闭包,其实是一种语言特性,它是指的是程序设计...
    99+
    2022-10-19
  • Python返回函数、闭包、装饰器、偏函数怎么使用
    今天小编给大家分享一下Python返回函数、闭包、装饰器、偏函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.返...
    99+
    2023-07-02
  • Django基础CBV装饰器和中间件的应用示例
    目录1. CBV加装饰器2. Django中间件2.1 Django中间件介绍2.2 自定义中间件2.3 自定义中间件总结2.4 其他中间件函数2.5新版本中间件写法3.Csrf中间...
    99+
    2022-11-13
  • PHP中装饰器模式的示例分析
    这篇文章主要介绍了PHP中装饰器模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Gof类图及解释GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapt...
    99+
    2023-06-20
  • Python函数式编程装饰器的示例分析
    这篇文章给大家分享的是有关Python函数式编程装饰器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、装饰器的本质:装饰器(decorator)本质是函数闭包(function closure)的语法...
    99+
    2023-06-29
  • python中装饰器的用法
    这篇文章主要介绍python中装饰器的用法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、装饰器使用场景经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳...
    99+
    2023-06-15
  • JS中闭包与定时器的示例分析
    这篇文章主要介绍了JS中闭包与定时器的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是闭包 有什么作用闭包就是能够读取其他函数内...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作