python装饰器

python学习之面向对象高级特性和魔术方法

随声附和 提交于 2020-01-10 18:06:24
01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库 中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求 数据时就要显示的指定获取从第start条到第end条的所有数据 这个分页的功能包括: • 根据用户请求的当前页和总数据条数计算出 start 和 end • 根据start 和 end 去数据库中请求数据 • 是否有上一页has_prev、下一页has_next • 上一页prev、下一页next • 总页数pages, 数据总条数total、当前页信息items """ class Pagintor(object): """实现商品分页的类""" def __init__(self, objects_list, page=1, per_page=5): """ :param objects_list: 商品列表 :param page: 当前需要显示的页码信息 :param per_page: 每页显示的数据个数 """ self.objects_list = objects_list self.page = page self.per_page = per_page @property def

Python装饰器限制函数运行时间超时则退出执行 函数超时停止

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-10 14:52:27
https://www.jb51.net/article/159375.htm # -*- coding: utf-8 -*- from threading import Thread import time class TimeoutException(Exception): pass ThreadStop = Thread._Thread__stop def timelimited(timeout): def decorator(function): def decorator2(*args,**kwargs): class TimeLimited(Thread): def __init__(self,_error= None,): Thread.__init__(self) self._error = _error def run(self): try: self.result = function(*args,**kwargs) except Exception,e: self._error = str(e) def _stop(self): if self.isAlive(): ThreadStop(self) t = TimeLimited() t.start() t.join(timeout) if isinstance(t._error

Python练习_装饰器、生成器_day12

本小妞迷上赌 提交于 2020-01-10 07:29:04
装饰器 装饰器篇: 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。 def login(func): def inner(*args, **kwargs): """登录程序 """ username = input('username:') password = input('password:') if username == 'boss_gold' and password == '22222': ret = func(*args, **kwargs) # func是被装饰的函数 return ret else: print('登录失败') return inner @login def shoplist_add(): print('增加一件物品') @login def shoplist_del(): print('删除一件物品') shoplist_add() shoplist_del() # 但是这样有一样不好,就是运行了shoplist_add()之后再运行shoplist_del()还是要输入 用户名和密码。 FLAG = False def login(func): def inner(*args, **kwargs): global FLAG """登录程序 """ if FLAG:

python经典面试题及答案

走远了吗. 提交于 2020-01-09 17:00:24
1、一行代码实现1~100之和 sum ( range ( 1 , 101 ) ) 2、如何在一个函数内部修改全部变量 '''global''' name = "xue" def test ( ) : global name name = "73" print ( "after change: " , name ) test ( ) print ( "now name: " , name ) 3、列出5个python标准库 sys、io、time、json、pickle、math . . . 4、字典如何删除键和合并两个字典 ''' del : 删除 update : 合并 ''' dic = { "name" : "xue" , "age" : 23 , 'sex' : 'M' } del dic [ "sex" ] print ( dic ) dic2 = { 'hobby' : 'basketball' } dic . update ( dic2 ) print ( dic ) 5、谈下python的GIL 6、python实现列表去重的方法 l = [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 5 , 5 , 7 , 5 , 3 , 4 ] print ( l ) l = list ( set ( l ) ) print ( l ) 7

python带参数的类装饰器

与世无争的帅哥 提交于 2020-01-09 01:26:33
摘自:https://www.cnblogs.com/zhzhang/p/11375774.html # -*- coding: utf-8 -*- # author:baoshan # 带参数的类装饰器(和不带参数的类装饰器有很大的不同) # 类装饰器的实现,必须实现__call__和__init__两个内置函数。 # __init__:不再接收被装饰函数,而是接收传入参数; # __call__:接收被装饰函数,实现装饰逻辑 class logger(object): def __init__(self, level='INFO'): self.level = level def __call__(self, func): def wrapper(*args, **kwargs): print("[{level}]: the function {func}() is running...".format(level=self.level, func=func.__name__)) func(*args, **kwargs) return wrapper @logger(level="WARNING") def say(something): print("say {}!".format(something)) say("hello")    来源: https://www

python高级语法——装饰器语法糖

为君一笑 提交于 2020-01-08 20:53:15
高阶函数 在python语言中,参数含有函数名的函数称之为高阶函数。(此时调用的函数不加参数,也就是说没有括号紧跟) 装饰器是什么 在不改变源代码的基础上扩展函数需要的新需求,这就是装饰器。(不改变函数源代码,这也是装饰器最基本的原则) 装饰器,它本身也就是一个函数,应用高阶函数实现。 使用时一般把被装饰的函数的内存地址当参数传入装饰器函数体,通过参数调用被装饰的函数,获得或者修改其属性。 装饰器的使用 一般认为,装饰器使用遵循一定格式,即:高阶函数+高阶函数内嵌套函数。 简单地理解Python中的if __name__ == '__main__' 通俗的理解 __name__ == '__main__' :假如你叫小明.py,在朋友眼中,你是小明 (__name__ == '小明') ;在你自己眼中,你是你自己 (__name__ == '__main__') 。 if __name__ == '__main__' 的意思是:当.py文件被直接运行时, if __name__ == '__main__' 之下的代码块将被运行;当.py文件以模块形式被导入时, if __name__ == '__main__' 之下的代码块不被运行 假设有一个需求,我要知道正在运行什么函数,在运行时输出。 有一个比较粗暴的方法。 def func1(): print(func1.__name__)

python装饰器

…衆ロ難τιáo~ 提交于 2020-01-08 18:00:27
本文转载自: https://foofish.net/python-decorator.html 讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤,在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后宝宝再也不冷了。装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效。 谈装饰器前,还要先要明白一件事,Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: 1 def foo(): 2 print("foo") 3 4 def bar(func): 5 func() 6 7 bar(foo) 正式回到我们的主题。装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景

Python装饰器与面向切面编程

断了今生、忘了曾经 提交于 2020-01-07 18:25:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子。 1 2 3 4 def foo(): print 'in foo()' foo() 这是一个很无聊的函数没错。但是突然有一个更无聊的人,我们称呼他为B君,说我想看看执行这个函数用了多长时间,好吧,那么我们可以这样做: 1 2 3 4 5 6 7 8 import time def foo(): start= time.clock() print 'in foo()' end= time.clock() print 'used:', end- start foo() 很好,功能看起来无懈可击。可是蛋疼的B君此刻突然不想看这个函数了,他对另一个叫foo2的函数产生了更浓厚的兴趣。 怎么办呢?如果把以上新增加的代码复制到foo2里,这就犯了大忌了~复制什么的难道不是最讨厌了么!而且,如果B君继续看了其他的函数呢? 1.2. 以不变应万变

Python装饰器与面向切面编程

你。 提交于 2020-01-07 16:43:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 新年好~ 那么,很久没有更新了,其实想想也没多少可以写的,因为Python的文档似乎很全面的说……能做的差不多只有翻译和整理了,英文过关的朋友不妨直接去doc.python.org这里查看相关资料 :) 转载请注明原作者和原文地址,多谢! 今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子。 def foo(): print 'in foo()' foo() 这是一个很无聊的函数没错。但是突然有一个更无聊的人,我们称呼他为B君,说我想看看执行这个函数用了多长时间,好吧,那么我们可以这样做: import time def foo(): start = time.clock() print 'in foo()' end = time.clock() print 'used:', end - start foo() 很好,功能看起来无懈可击。可是蛋疼的B君此刻突然不想看这个函数了

【python学习笔记】装饰器、functools.wraps装饰器和functools.partial偏函数

感情迁移 提交于 2020-01-07 16:26:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、装饰器 不修改被装饰函数的定义,但是可以在代码运行期间动态增加功能的方式,称之为“装饰器“, 本质上,装饰器decorator就是一个返回函数的高阶函数 #!/usr/bin/env python #-*- coding:utf-8 -*- import math# 导入数学公式模块 from collections import Iterable# 判断是否为可迭代对象 import os# 导入os模块 import functools# 导入functools.wraps # Python将一切视为object的子类,即一切都是对象,当然函数也是一个对象,可以像变量一样被传递和指向 def foo(): print "I`m foo" f = foo f() # 函数对象有一个__name__的属性,可以得到函数的名字 print foo.__name__ print f.__name__ # ★不修改被装饰函数的定义,但是可以在代码运行期间动态增加功能的方式,称之为“装饰器“, # 例子:在函数调用前后自动打印日志 def logging1(func):# 装饰器函数logging1 def wrapper(*args, **kw):# 可变参数和关键字参数 print '%s is running