iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【6】装饰器、闭包、偏函数、变量作用域问
  • 234
分享到

【6】装饰器、闭包、偏函数、变量作用域问

变量函数作用 2023-01-30 22:01:35 234人浏览 安东尼

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

摘要

        【一】、装饰器思想 装饰器是其实想增加一个函数的功能,但是又不想变动原来函数的代码,就用装饰器。 比如:我们用别人的一个函数,又不是很满意,所以用装饰器装饰一下即可。   def fun1(): print(

 

 

 

 

【一】、装饰器思想

装饰器是其实想增加一个函数的功能,但是又不想变动原来函数的代码,就用装饰器。

比如:我们用别人的一个函数,又不是很满意,所以用装饰器装饰一下即可。

 

def fun1():
    print("嘉嘉 is a Good man !")

def outer():
    print("****")
    fun1()

outer()

【二】闭包

 什么是闭包?

闭包:把一个函数当做一个参数传入另一个函数。本质上是一个返回函数的函数

案例1:简单的闭包实现装饰器代码

# 简单的装饰器
# 即以上起到了装饰器的作用,但是是写死了的,如何才能用一个调用来实现呢
# 闭包:把一个函数当做一个参数传入另一个函数。本质上是一个返回函数的函数
print('------------------------我是分割线-------------------------')
def fun2():
    print("嘉嘉 is a good man !")

def outer2(fun):
    def inner():
        print("****")
        fun()
    return inner
# f代表是装饰后的返回的加强版的一个函数,并且是要装饰谁,把谁传进去。那么传入进去的东西被
# inner函数中的内容修饰了。
f=outer2(fun2)
print(type(f))
f()

'''
输出:
****
嘉嘉 is a good man !

'''

其中:

 f代表是装饰后的返回的加强版的一个函数,并且要装饰谁,把谁传进去。那么传入进去的东西被 # inner函数中的内容修饰了。

 

案例2:复杂一点的装饰器

 1 # 案例2 :复杂一点的装饰器
 2 def say(age):
 3     print("she is %d years old " %(age) )
 4 
 5 # 写一个装饰器
 6 def outer(func):
 7     def inner(age):
 8         if age<0:
 9             age=0
10         say(age)
11     return inner
12 
13 say2=outer(say)
14 # 此时调用的say2 其实就是outer函数返回的一个inner函数,say2他本身是函数
15 # 此时传入age=-5,执行say2函数,其实就是执行内存inner这个函数,
 16 say2(-5) 17 say2(89) 18 ''' 19 输出是: 20 she is 0 years old 21 she is 89 years old 22 '''

总结

4 # 此时调用的say2 其实就是outer函数返回的一个inner函数,say2他本身是函数 15

   # 此时传入age=-5,执行say2函数,其实就是执行内存inner这个函数,

案例2-改进 :用标准的装饰器语法来写的话如下代码

# 案例2 改进 标准的装饰器
@outer     #其实这个是等价 say2=outer(say)
def say3(age):
    print("she is %d years old " %(age) )

# 写一个装饰器
def outer(func):
    def inner(age):
        if age<0:
            age=0
        say(age)
    return inner

# say2=outer(say)      上边给需要装饰的函数写了@  这句话是可以直接省略的。

say3(-3)     #注意:用@装饰完之后的函数名是不变的。
'''
输出是:
she is 0 years old 
'''

 

案例3-通用装饰器

此装饰器是通用版本,就不用担心传递的形参的个数问题啦

# 案例3 改进 通用装饰器
# 写一个装饰器
def outer2(func):
    def inner2(*args, **kwargs):
        '''
        # 添加需要控制功能的语句块
        if age<0:
            age=0
        '''
        print("我是装饰的代码块")
        return func(*args,**kwargs)

    return inner2

@outer2
def say4(age,name):
    print("she is %d years old ,Her name is %s "%(age,name) )


print("通用装饰器!")
say4(-3,"佳佳")     #注意:用@装饰完之后的函数名是不变的。
'''
输出是:

  我是装饰的代码块
  she is -3 years old ,Her name is 佳佳

'''

 

案例1 简单的偏函数

# 偏函数:其实就是对形参的一个默认值的控制

def int_(str,base=2):
    return int(str,base)

print(int_("1010"))

# 输出:10
# 方法2  引入模块法

import functools
int3=functools.partial(int,base=2)

print(int3("1010"))

# 输出:10
 

 

作用域:

1、局部作用域

2、全局作用域

3、内建作用域

<未完待补充!>

 

 

--结束END--

本文标题: 【6】装饰器、闭包、偏函数、变量作用域问

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

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

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

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

下载Word文档
猜你喜欢
  • 【6】装饰器、闭包、偏函数、变量作用域问
            【一】、装饰器思想 装饰器是其实想增加一个函数的功能,但是又不想变动原来函数的代码,就用装饰器。 比如:我们用别人的一个函数,又不是很满意,所以用装饰器装饰一下即可。   def fun1(): print(...
    99+
    2023-01-30
    变量 函数 作用
  • Python返回函数、闭包、装饰器、偏函数怎么使用
    今天小编给大家分享一下Python返回函数、闭包、装饰器、偏函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.返...
    99+
    2023-07-02
  • Python装饰器-闭包与函数装饰器
    一、闭包在学习装饰器前,需要先了解闭包的概念。形成闭包的要点:函数嵌套将内部函数作为外部函数的返回值内部函数必须要使用到外部函数的变量下面以一个计算列表平均值的案例来讲解闭包:def make_average(): # 创建一个列表,用来保...
    99+
    2023-05-14
    Python 函数 装饰器
  • golang函数闭包和局部变量作用域的关系
    答案:go 中的闭包可以访问其定义作用域外的变量,即使这些变量超出函数的定义范围。详细描述:局部变量的作用域限于其声明的函数或块中。闭包包含函数代码和对周围作用域变量的引用。闭包可以访问...
    99+
    2024-04-23
    golang 闭包 作用域
  • JavaScript(函数,作用域和闭包)
    目录 一,什么是函数1.1,常用系统函数1.2,函数声明 1.3,函数表达式二,预解析2.1,函数自调用 2.2,回调函数三,变量的作用域3.1,隐式全局变量 四,作用域与块级作用...
    99+
    2023-09-05
    前端 javascript 开发语言
  • JavaScript的闭包与变量作用域介绍
    这篇文章主要讲解了“JavaScript的闭包与变量作用域介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的闭包与变量作用域介绍”吧!...
    99+
    2024-04-02
  • Python编程中闭包的变量作用域问题解析
    目录闭包闭包中的变量闭包 ​ 在我们使用返回函数的时候,由于我们在一个函数中需要返回另一个函数,因此,我们在这个函数中就需要重新定义一个函数。而这样,就造成了我们的函数嵌...
    99+
    2024-04-02
  • 【PHP】函数-作用域&可变函数&匿名函数&闭包&常用系统函数
    文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关...
    99+
    2023-08-31
    php 开发语言
  • python3--函数名本质,函数嵌套,闭包,装饰器
    python函数的嵌套和作用域链函数的嵌套调用def max2(x,y):     m = x if x > y ...
    99+
    2023-01-30
    函数 嵌套 本质
  • C语言函数封装及变量的作用域
    目录1. for循环示例2. 模拟实现投票系统。switch3. 计算字符串空格、数字等数据数量4. 字符串转整数。5. 整数转字符串6. 浮点数转字符串7. 字符串转浮点数8. 函...
    99+
    2024-04-02
  • Python函数高级(命名空间、作用域、装饰器)
    目录一、名称空间和作用域1、命名空间(Namespace)1、一般有三种命名空间:2、命名空间查找顺序:3、命名空间的生命周期:2、作用域:3、全局变量和局部变量4、函数对象+作用域...
    99+
    2024-04-02
  • python基础-内置函数-作用域-闭包
    内置函数-作用域-闭包-递归 1.几个可能用到的内置函数 查看内置函数: print(dir(__builtins__)) 常见函数: len 求长度 min 最小值 max 最大值 sorted 排...
    99+
    2023-01-31
    函数 作用 基础
  • Python基础globlalnonlocal和闭包函数装饰器语法糖
    目录一、global与nonlocal1、global2、nonlocal二、函数名的多种用法三、闭包函数1、什么是闭包函数2、闭包函数需满足的条件3、闭包函数的作用4、闭包函数的实...
    99+
    2024-04-02
  • 理解Golang函数变量的作用域
    理解Golang函数变量的作用域,需要具体代码示例在Golang中,函数是一种特殊的变量类型,可以作为参数传递给其他函数,也可以作为返回值返回。而函数变量的作用域则是指函数变量在代码中可见和可访问的范围。函数变量的作用域可以分为全局作用域和...
    99+
    2023-12-23
    变量作用域 Golang函数 理解 Golang
  • Golang函数的变量作用域讲解
    Golang是一种非常流行的编程语言,它以其高效的并发性能和简洁的语法风格在业界备受好评。作为一门强类型语言,Golang也是支持变量的类型声明和作用域控制的。在Golang中,变量作用域是一个非常重要的概念。它决定了在何处可以访问一个变量...
    99+
    2023-05-18
    函数 Golang 变量作用域
  • 解析Golang函数变量的作用域
    Golang函数变量作用域解析,需要具体代码示例Golang是一种开源的静态类型编程语言,注重效率和简洁,其函数变量作用域的解析机制也是开发者需要了解的重要内容之一。本文将介绍Golang中函数变量的作用域以及与其相关的规则,同时提供代码示...
    99+
    2023-12-23
    作用域 解析 Golang函数变量
  • 如何使用golang函数闭包捕捉变量
    如何使用 go 函数闭包捕获变量?定义一个包含要捕获变量的函数参数。在函数体内,使用捕获的变量。示例:计数器闭包缓存闭包闭包在 go 中用于捕获变量并创建灵活和可重用的代码。 如何使用...
    99+
    2024-04-23
    golang 闭包
  • Golang函数中的变量作用域:局部变量和全局变量
    Golang函数中的局部变量和全局变量,需要具体代码示例 在Golang中,变量的作用域是非常重要的概念。在函数中,我们常常会遇到局部变量和全局变量的情况。这两者在作用域和使用方式上有一些区别,下面我将详细介...
    99+
    2024-01-18
    函数 变量 Golang
  • Golang函数的闭包特性和作用域链
    Golang函数中的作用域链和闭包特性,需要具体代码示例 一、函数的作用域链在Golang中,函数的作用域链是指函数中变量的访问权限范围。作用域链是一种层层嵌套的结构,每一层作用域都可以访问外层作用域的变量,...
    99+
    2024-01-18
    Golang 闭包 作用域链
  • golang函数返回值的变量作用域
    golang 函数的返回值变量只存在于函数内部,在函数执行完毕后销毁。1. 变量作用域受限于函数内部,例如,multiply 函数中的 result 变量。2. 主函数可以访问函数的返回...
    99+
    2024-04-23
    golang 变量作用域 作用域
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作