返回顶部
首页 > 资讯 > 后端开发 > Python >Python 装饰器的总结(一)
  • 546
分享到

Python 装饰器的总结(一)

Python 2023-01-31 01:01:02 546人浏览 薄情痞子

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

摘要

先来说明下几个定义:1,函数在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数:1234567#coding:UTF8 def foo():     

先来说明下几个定义:

1,函数

python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数:


1
2
3
4
5
6
7
#coding:UTF8
 
def foo():
     return 1
print foo()
 
1


方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数

2,作用域


Python中,函数会创建一个新的作用域. python开发者可能会说函数有自己的命名空间.这就意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里寻找.来简单举例说明本地作用域与全局作用域


1
2
3
4
5
6
7
8
9
10
11
12
#coding:UTF8
 
a_string = "This is a global variable"
def foo():
     print locals()
print globals() # doctest: +ELLIPSIS
 
foo()  #2
 
 
{'foo': <function foo at 0x00000000026ECF98>, ...., 'a_string''This is a global variable',...}
{}


内置的函数globals返回一个包含所有Python解释器知道的变量名称的字段(省略一部分)在#2调用了函数foo 把函数背部本地作用域里面的内容打印出来.可以看到,函数foo有自己的独立的命名空间,即使暂时命名空间啥也没有.


3,变量解析规则

当然并不是说在函数里就不能访问外面的全局变量.在Python的作用域规则里,创建变量一定会在当前作用域里创建一个变量,但访问或者修改变量是会现在当前作用域查找变量,没有找到匹配变量会依次向上在闭合的作用域里进行查找.so 如修改函数foo的是实现打印全局的作用域的变量也是可以


1
2
3
4
5
6
7
8
9
#coding:UTF8
 
a_string = "This is a global variable"
def foo():
     print a_string   #1
 
foo()
 
This is global variable


在#1处,Python解释器会尝试查找变量a_string,当然在函数的本地作用域是找不到,so接着会在上层的作用域去查找
但在另外一方面,假如在函数的内部给全局变量赋值,结果会不一样


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#coding:UTF8
 
a_string = "This is a global variable"
def foo():
    a_string='Test'  #1
    print locals()
     
foo()
 
{'a_string''Test'}
 
print a_string  #2
 
This is global variable


全局变量能够被访问到(如果是可变数据类型(像list,dict这些),甚至能够被更改),但赋值就不行了,在函数内部的#1,实际上新创建了一个局部变量,隐藏全局作用域中的同名变量,可以通过打印出全局命名空间中的内容得出这个结论.也可以在#2处打印出来的a_string没有改变

4,变量生存周期


值得注意的是:变量不仅是生存在一个个的命名空间里,都有自己的生存周期,如下:


1
2
3
4
5
6
7
8
#coding:UTF8
 
def foo():
     = 1
foo()
print # 1
 
NameError: name 'x' is not defined


5,函数参数


Python允许想函数传递参数,参数会变成本地变量存在与函数内部


1
2
3
4
5
6
#coding:UTF8
def foo(x):
     print locals()
foo(1)
 
{'x'1}


在Python中有很多的方式来定义和传递参数,简要说明下:函数的参数是必须的位置参数或是可选的命名,默认参数


1
2
3
4
5
6
7
8
9
10
11
12
#coding:UTF8
def foo(x, y=0): # 1
     return - y
  
print foo(31# 2
2
print foo(3# 3
3
print foo() # 4
TypeError: foo() takes at least 1 argument (0 given)
print foo(y=1, x=3# 5
2


在#1处定义了函数foo,有一个位置参数x和一个命名参数y  在#2通过常规的方式来调用函数,即使只有一个命名参数,但参数依然可以通过位置参数传递给函数.在调用函数的时候,对于命名参数y也可以完全不管就想#3所示一样.如命名参数没有接收到任何值的话,Python会自动使用声明的默认值.但不能省略第一个位置参数x,否则会像#4发生错误

python支持函数调用时的命名参数。看看#5处的函数调用,传递的是两个命名实参,这个时候因为有名称标识,参数传递的顺序也就不用在意了。

当然相反的情况也是正确的:函数的第二个形参是y,但通过位置的方式传递值给它。在#2处的函数调用foo(3,1),我们把3传递给了第一个参数,把1传递给了第二个参数,尽管第二个参数是一个命名参数。

6,嵌套函数


Python允许创建嵌套函数,就意味着可以在函数里定义函数而且现有的作用域和变量生存周期依旧适用


1
2
3
4
5
6
7
8
9
10
11
#coding:UTF8
def outer():
     = 1
     def inner():
         print # 1
     inner() # 2
  
outer()
 
 
1


Python解释器需找一个叫x的本地变量,查找失败之后会继续向上层的作用域里查,这个上层的作用域定义在另外一个函数里,对于函数outer来说,变量x是一个本地变量
函数inner可以访问封闭的作用域.在#2处,可以调用函数inner,inner也仅仅是一个遵循Python变量解析规则的变量名,Python解释器会优先在outer的作用域里面对变量名inner查找匹配的变量





--结束END--

本文标题: Python 装饰器的总结(一)

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

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

猜你喜欢
  • Python 装饰器的总结(一)
    先来说明下几个定义:1,函数在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数:1234567#coding:UTF8 def foo():     ...
    99+
    2023-01-31
    Python
  • Python 装饰器总结
    装饰器是高阶函数,装饰器是对传入函数的功能增强。 装饰器的副作用:原函数对象的属性都被替换了,而使用了装饰器,查看到的函数对象属性就变成装饰器的函数对象了,如果需要查被装饰的函数的属性?对用原函数的属性覆盖掉装饰器的属性。解决方法:通过co...
    99+
    2023-01-31
    Python
  • python总结之闭包和装饰器
    目录一、装饰器1.装饰器的简单介绍2.装饰器的解析过程二、闭包三、闭包中nonlocal语句的使用1.外部变量的引用和改写2.nolocal的使用及特点四、闭包与装饰器五、闭包的作用...
    99+
    2024-04-02
  • Python pytest装饰器总结(实例详解)
    几个常用装饰器 pytest.ini 配置文件 例子: [pytest] addopts = -v -s --html=py_test/scripts/report/report...
    99+
    2024-04-02
  • python3:装饰器的5大用法总结
    装饰器,顾名思义,就是给函数作装饰作用的,相当于只是给函数化了一个装,并没有给他添加额外的代码,但是却增加了新功能,就如同我们在冬天很冷的情况下,想要变暖和(添加新功能),但是我们不是生活在武侠小说里有内功,肿么办?我们可以穿一件羽绒服来...
    99+
    2023-01-31
  • python中函数总结之装饰器闭包详解
    1、前言 函数也是一个对象,从而可以增加属性,使用句点来表示属性。 如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包。 2、装饰器 装饰器就是包...
    99+
    2022-06-04
    详解 函数 python
  • Python的@装饰器的作用小结
    我们在编程过程中,常常会遇到这种需求: 比如,我想开发一款计算器,我已经写好了一堆函数,用于执行各种计算,那么我们需要在执行各种计算函数前,首先对输入的数据进行检查,确保他们必须得是...
    99+
    2024-04-02
  • python 闭包&装饰器(一)
    一、闭包 1.举例 def outer(): x = 10 def inner(): # 内部函数 print(x) # 外部函数的一个变量 return inner # 调用in...
    99+
    2023-01-30
    python
  • 理解Python装饰器(一)
    python装饰器 装饰器是什么?我也不知道该如何给装饰器下定义。 1. 装饰器是函数,因为从代码的层面上来说,它就是开发人员定义的一个函数而已; 2. 装饰器就像是类的继承一样,通过装饰符,来实现函数与函数、函数与类之间的"继承" 3. ...
    99+
    2023-01-31
    Python
  • Python必备基础之闭包和装饰器知识总结
    目录一、闭包1.1 三要素 1.2 语法1.3 优点1.4 缺点1.5 作用二、装饰器 Decorator2.1 定义2.2 语法2.3 本质2.4 装饰器链一、闭包 1.1 三要素...
    99+
    2024-04-02
  • 一文读懂 Python 装饰器
    Python 是一种对新手很友好的语言。但是,它也有很多较难掌握的高级功能,比如装饰器(decorator)。很多初学者一直不理解装饰器及其工作原理,在这篇文章中,我们将介绍装饰器的来龙去脉。在 Python 中,函数是一种非常灵活的结构,...
    99+
    2023-05-14
    Python 装饰器
  • python装饰器2:类装饰器
    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 本文是装饰器相关内容的第二篇,关于类装饰器。 "类装饰器"有两种解读方式:用来装饰类的装饰器;类作为装饰器装饰其它东西。你如何认为取决于你,两种说法都有出现在其它的文章中。我的...
    99+
    2023-01-30
    python
  • python 进阶学习之python装饰器小结
    装饰器总结 什么是装饰器?处理函数的函数,加一个功能,但是不影响原来函数的内部结构生活中的例子:给手机加一个外壳,外壳保护了手机 装饰器有什么用?增强函数的功能 装饰器使用场景增加被...
    99+
    2024-04-02
  • python装饰器(新年第一写)
    祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以觉得装饰器难,是因为这东西不按套路出牌...
    99+
    2023-01-30
    新年 python
  • python 装饰器
    装饰器本质上是一个Python函数,它可以让其他函数在不雲要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面雲求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳...
    99+
    2023-01-30
    python
  • python装饰器
    什么是装饰器:   装饰器就是python中的一个语法糖。作用就是在不改动之前代码的情况下给某个函数增加相应想要增加的功能。 假设需求:   我在几个函数内分别放了一部电影,代码如下: 1 def mv1(): 2 print(...
    99+
    2023-01-30
    python
  • python-装饰器
    装饰器简介:给被装饰的函数在不更改代码的基础上增加新的功能;多个装饰器的执行顺序:从最靠近原始函数的装饰器开始执行,最后执行原始函数; 直接上个简单的例子就懂了: 一 最简单的装饰器:#!/usr/bin/python def deco(f...
    99+
    2023-01-31
    python
  • python的装饰器decorator
    在python中编程碰到过这样一件事情,需要给大量的函数做相同的操作,这样每个函数都去实现一遍这个功能显然是浪费时间。#这是一个装饰器函数def DecoratorFunc(func):    #Function就是对传入的func函数的包...
    99+
    2023-01-31
    python decorator
  • Python装饰器与类的装饰器怎么实现
    这篇“Python装饰器与类的装饰器怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python装饰器与类的装饰器怎么...
    99+
    2023-06-29
  • 一起来看看python的装饰器代码
    装饰器通用模型 def wrapper(fn): def inner(*args, **kwargs): ret = fn(*args, **kwargs) ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作