IT袋

当前位置:主页 > 经验教程 > 建站编程 >

什么是闭包函数与装饰器

什么是闭包函数与装饰器 它们有哪些作用?

时间:2023-09-23 19:59:19 来源:IT袋 作者:苏晓敏
导读:什么是闭包函数与装饰器,今天小编介绍什么是闭包函数与装饰器的教程内容,具体介绍如下: 闭包函数与装饰器 闭包函数 闭函数指的是在一个函数内部的函数,即嵌套在函数内部的函数。 包函

什么是闭包函数与装饰器

今天小编介绍什么是闭包函数与装饰器的教程内容,具体介绍如下:

什么是闭包函数与装饰器

闭包函数与装饰器

闭包函数

  • 闭函数指的是在一个函数内部的函数,即嵌套在函数内部的函数。
  • 包函数指的是内部函数对外层函数(非全局作用域)作用域名字的引用。
  • 闭包函数基于函数对象,可以将函数返回到任意位置调用,但是作用域的关系在定义函数的时候就被确定了,与函数的调用位置无关。如果内嵌函数包含对外部函数作用域中名字的引用,该内嵌函数就是闭包函数。
# -*- coding: utf-8 -*-
def outer():
    name = 'shisbuyu'
    def inner():
        print('外层函数的内层函数inner', name)  # 内层函数使用到了外层函数名称空间中名字
    inner()
    return inner
res = outer()  # 得到的返回值是函数名inner
# 输出
# 外层函数的内层函数inner shisbuyu

闭包函数作用

  1. 函数体传参方式之 形参
def index(username):
    print(username)
index('shisbuyu')  # 函数体代码需要什么就可以在形参里写什么
  1. 函数体传参方式之 闭包
def outter():
    name = 'shisbuyu'
    def index():
        print(name)  # name写死了, 调用res() name shisbuyu
    return index
res = outer()
res()

做成闭包函数通过形参传参给外层

def outter(name):
    def index():
        print(name)
    return index
res = outter('shisbuyu')
res()  # shisbuyu
res1 = outter('shisuiyi')
res1()  # shisuiyi

装饰器

装饰器可以在不改动原函数代码的情况下,添加其原本没有的功能。简单点说,就是 修改其它函数的功能的函数 。通过使用装饰器,我们可以让一个函数的功能变的更加强大,还可以让我们的代码更加简短整洁。

普通装饰器

方式一:不使用语法糖@符号的调用方法:

# -*- coding: utf-8 -*-
# 原函数
def one():
    print("这是一个平平无奇的函数")
# 定义1个装饰器
def loop(func):
    def wrapper(*args, **kw):
        for i in range(2):
            func(*args, **kw)
    return wrapper
    
loop(one)()
# 输出
这是一个平平无奇的函数
这是一个平平无奇的函数

方式二:使用语法糖@符号的调用方法:

# -*- coding: utf-8 -*-
# 定义1个装饰器
def loop(func):
    def wrapper(*args, **kw):
        for i in range(2):
            func(*args, **kw)
    return wrapper
@loop
def one():
    print("这是一个平平无奇的函数")
one()
# 输出
这是一个平平无奇的函数
这是一个平平无奇的函数

函数带参数

# -*- coding: utf-8 -*-
def loop(func):
    def wrapper(*args, **kw):
        for i in range(2):
            func(*args, **kw)
    return wrapper
@loop
def one(num):
    for i in range(num):
        print("这是一个平平无奇的函数")
one(2)
#输出
这是一个平平无奇的函数
这是一个平平无奇的函数
这是一个平平无奇的函数
这是一个平平无奇的函数

相关阅读

  • 建一个网站需要什么技术 有关建立自己的网站平台

    建一个网站需要什么技术 有关建立自己的网站平台

    跟大家分享建一个网站需要什么技术和有关建立自己的网站平台的方法内容,很不错的方法小知识,建议收藏哦! 随着互联网高速发展,网站的功能无可取代,网站已经成了每个企业的标配,

  • 深入理解Unicode:实现全球字符编码统一的关键

    深入理解Unicode:实现全球字符编码统一的关键

    小编为你介绍深入理解Unicode方面的讲解,一定能解决您的问题的,一起来了解吧! 在计算机世界中,Unicode扮演着至关重要的角色,它是一种用于表示几乎所有语言的字符的标准。 在本文中,

  • DNS为什么很难学习? 为什么学习DNS如此困难?

    DNS为什么很难学习? 为什么学习DNS如此困难?

    为大家介绍的是DNS为什么很难学习的相关知识,一定能解决您的问题的,一起来了解吧! 我经常写关于我发现难以学习的技术的文章。不久前,我的朋友 Sumana 向我提出了一个有趣的问题 为什

  • csgo等级在哪里看 公认最好的csgo开箱网站

    csgo等级在哪里看 公认最好的csgo开箱网站

    今天小编介绍csgo等级在哪里看和公认最好的csgo开箱网站的相关知识,接下来分享详细内容。 在CSGO中免费获得优先状态需要将等级达到21级中尉军衔后即可,点击左侧的物品栏,然后在背包里