python装饰器

Python:访问器以及修改器

和自甴很熟 提交于 2020-01-14 03:28:44
类中的属性 _属性名 不建议访问,暗示这个属性名是受保护的 想访问可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作 使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又便捷 __属性名 访问不到 property 英[ˈprɒpəti] 美[ˈprɑːpərti] n. 所有物; 财产; 财物; 不动产; 房地产; 房屋及院落; 庄园; [例句]Richard could easily destroy her personal property to punish her for walking out on him 理查德能轻易毁掉她的私人财产来惩罚她对他的背叛。 [其他] 复数:properties 通过装饰器访问不建议访问的属性 # @property装饰器 class A: def __init__(self): self._x = 10 self._y = 20 @property def y(self): return self._y @property def x(self): return self._x a = A() print(a.x, a.y) setter 修改不建议访问的属性 class Person(object): def __init__(self, name, age):

python的多个装饰器 --练习题

孤者浪人 提交于 2020-01-14 00:08:34
要求 编写装饰器required_types, 条件如下: 1). 当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型; 2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型; 3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型; 4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型 编程 import functools def required_type ( * kind ) : def require ( fun ) : @functools . wraps ( fun ) def wrapper ( * args , * * kwargs ) : for i in args : if not isinstance ( i , kind ) : print ( '函数所有的参数并非' , kind ) break else : res = fun ( * args , * * kwargs ) return res return wrapper return require # a = 1.0 # print(isinstance(a,(int,float))) @

python目录之从入门到光头

≡放荡痞女 提交于 2020-01-13 18:59:24
后台管理 添加随笔 编写博客的基础 001 学到的markdown语法 python计算机基础 002 计算机的组成原理 003 编程语言分类 004 网络的瓶颈效应 005 计算机操作系统 006 python计算机基础之编程 python基础 python基础 007 python基础1 008 python基础2 009 Python 和Python解释器 010 python变量 011 Python变量内存管理 012 python解压缩 013 python注释 014 python格式化输出的三种方式 015 python基本算术运算符 016 python流程控制if判断与循环(for、while) 017 python深浅拷贝 018 python异常处理 019 接触python的一些小练习 python基础实战之猜年龄游戏 python支持的数据类型 020 python常量 021 python数字类型 022 python字符串类型 023 python列表类型 024 python字典类型 025 python布尔类型 026 python元组 027 python集合 028 python数据类型 029 一个列表如何根据另一个列表进行排序(数组的相对排序) 030 列表如何移除指定原属 031 列表内字典的排序 032 字典去重与排序 文件处理

5 分钟全面掌握 Python 装饰器

耗尽温柔 提交于 2020-01-13 17:33:19
♚ 作者:吉星高照, 网易游戏资深开发工程师,主要工作方向为网易游戏 CDN 自动化平台的设计和开发,脑洞比较奇特,喜欢在各种非主流的领域研究制作各种不走寻常路的东西。 ! Python的装饰器是面试的常客,因为其写法复杂多变,经常忘记什么地方应该写哪种参数,新手学习起来也经常一头雾水,不怕不怕,看了这一篇你对装饰器的各种用法就全明白了。废话不多说,直接进入主题! 不带参数的函数,不带参数的装饰器 我们先来写一个简单的装饰器,实现将函数运行前后的情况记录下来。 def dec1(func): print(func) def _wrap(): print('before run') r = func() print('after run') return r return _wrap @dec1 def f1(): print('call f1') 上面只是定义了两个函数,运行后发现竟然有输出: <function f1 at 0x7fa1585f8488> 仔细看看,原来是第一个 print 语句的输出。这说明装饰的函数还没有实际运行的时候,装饰器就运行过了,因为 @dec1 相当于单独的一个语句: dec1(f1) 那我们来正式运行一下 f1 吧: f1(1) 输出如下确实达到了预期的效果: before run call f1 after run 不带参数的函数

python 详解@修饰器的用法

徘徊边缘 提交于 2020-01-13 08:46:25
python中@的用法 @是一个装饰器,针对函数,起调用传参的作用。 有修饰和被修饰的区别,‘@function’作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义) 代码1 def funA ( desA ) : print ( "It's funA" ) def funB ( desB ) : print ( "It's funB" ) @funA def funC ( ) : print ( "It's funC" ) 结果1 It's funA 分析1 @funA 修饰函数定义def funC(),将funC()赋值给funA()的形参。 执行的时候由上而下,先定义funA、funB,然后运行funA(funC())。 此时desA=funC(),然后funA()输出‘It’s funA’。 代码2 def funA ( desA ) : print ( "It's funA" ) def funB ( desB ) : print ( "It's funB" ) @funB @funA def funC ( ) : print ( "It's funC" ) 结果2 It's funA It's funB 分析2 @funB 修饰装饰器@funA,@funA 修饰函数定义def funC(),将funC()赋值给funA()的形参,再将funA

Python带参数的装饰器

隐身守侯 提交于 2020-01-13 07:08:49
在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("I got args! Look:", arg1, arg2) function_to_decorate(arg1, arg2) return a_wrapper_accepting_arguments # 当你调用装饰器返回的函数时,也就调用了包装器,把参数传入包装器里, # 它将把参数传递给被装饰的函数里. @a_decorator_passing_arguments def print_full_name(first_name, last_name): print("My name is", first_name, last_name) print_full_name("Peter", "Venkman") # 输出: #I got args! Look: Peter Venkman #My name is Peter Venkman 在Python里方法和函数几乎一样

python的装饰器总结

丶灬走出姿态 提交于 2020-01-13 06:34:36
前面碰到了装饰器的一些内容,这里总结一下。 要想对python更深入理解一些,装饰器是必须要掌握的内容。 闭包 必须说一下闭包这个概念,python的装饰器是python的闭包实现。 说一个通俗的理解,闭包就是能够读取其他函数的内部变量的函数,闭包是函数内部和外部链接的一个桥梁(这句话是百度百科摘过来的,我觉得不错)。我们也都知道python的的命名空间LEGB:查找顺序 L:local, 局部变量,函数结束,L也就没了 E:encolosing,这就是闭包的函数域 G:global,全局的变量 B:build in的内嵌的,比如系统关键字,type,int之类的 global num1 num1 = 1 # 全局 def test(): num1 = 2 # 局部 print num1 num2 = 3 # enclosing num3 = 4 # local def func(): print num2 return func fun = test() fun() print num1 print int # build in 装饰器 装饰器对函数或类进行“装饰”包裹,然后给对应的函数一些附加的功能,可以极大增加复用。 比如我们说一个add的函数,如果我们要在add中增加log,我们可以这么实现 def add(x, y): print "add operation"

python装饰器学习笔记

此生再无相见时 提交于 2020-01-13 05:00:57
python装饰器学习笔记 什么是装饰器?为什么要使用装饰器? 装饰器代码举例 传参数的装饰器 wraps装饰器的使用 什么是装饰器?为什么要使用装饰器? 使用装饰器可以让给我们的函数在执行之前或者执行之后添加一些代码,举个例子,当我们使用CSDN写博客或者编辑我们的个人资料的后台肯定要先判断我们是否登录,如果不使用装饰器,我们就必须要在写博客这个函数write_article()和edit_user()这两个函数的开头写分别一段代码判断是否已经登录,当功能较多时,这样是非常难以维护的。 装饰器代码举例 user = { 'is_login' : True } #装饰器的使用 def login_required ( func ) : #装饰器 def wrapper ( * args , ** kwargs ) : if user [ 'is_login' ] == True : func ( * args , ** kwargs ) else : print ( '跳转到登录页面' ) return wrapper @login_required def write_atrticle ( title , content ) : """ 用于模拟写博客 """ print ( '博客发表成功,标题:{},内容:{}' . format ( title , content ) )

python——装饰器

牧云@^-^@ 提交于 2020-01-11 23:33:47
1.什么是装饰器? 把一个函数当作参数,返回一个替代版的函数 本质上就是一个返回函数的函数 作用:在不改变原函数的基础上,给函数增加功能 2.装饰器的应用 (1)没有使用装饰器的情况 虽然增加了功能,但是改变了原来的函数 增加功能的同时没有改变原来的函数 (2)使用装饰器给函数增添新的功,在已经写好的函数上添加新内容,我们可以通过三种方式 方式一 方式二 方式三:装饰器 一般情况: 装饰器传参 装饰器可以设置可变参数 装饰器可以设置关键字参数 来源: CSDN 作者: sunshinew427 链接: https://blog.csdn.net/qq_42024433/article/details/103940799

python中装饰器修复技术

北慕城南 提交于 2020-01-11 22:47:23
python装饰器@wraps作用-修复被装饰后的函数名等属性的改变 Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变), 为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap, 它能保留原有函数的名称和docstring。 未加@wraps的时候: from functools import wraps def wrapper(func): # @wraps(func) def inner(*args, **kwargs): print("装饰器工作中...") func(*args, **kwargs) return inner @wrapper def f1(arg): """ 这是一个测试装饰器修复技术的函数 :param arg: 随便传 :return: 没有 """ print(arg) f1('呵呵') print(f1.__name__,f1.__doc__) 打印结果是: 但是加上@wraps以后: from functools import wraps def wrapper(func): @wraps(func) def inner(*args, *