草庐IT

python - 使用广泛重用的装饰器分析系统

我们的代码库有一些被广泛使用的装饰器。当我创建运行时配置文件时,调用图的很大一部分看起来像一个沙漏;许多函数调用一个函数(装饰器),然后该函数调用许多函数。这是一个没有我想要的有用的配置文件。有什么办法可以纠正这种情况吗?移除装饰器不是一种选择;它提供必要的功能。事后我们考虑过从cProfile数据中手动剥离decorator,但似乎不太可能,因为数据被归纳为caller->callee关系,破坏了caller->decorator->callee关系. 最佳答案 使用类似于new的东西库(或Python2.6+中的types),理

python - Numpy vectorize 作为带参数的装饰器

我尝试对以下函数进行矢量化(同意,这不是最有效的方法,但我的问题是关于装饰器的使用)@np.vectorizedefdiff_if_bigger(x,y):returny-xify>xelse0x=np.array([5.6,7.0])y=8diff_if_bigger(x,y)#outputsarray([2,1])whichisnotwhatIwant编辑:重新启动IPython后,输出正常。谁能解释为什么diff_if_bigger的结果被转换成一个np.int数组,即使这里的第一个参数x是一个np.int数组。float,与文档中的内容相反????现在,我想强制输出float,

Python 装饰器 - 类中的 __call__

我试图理解Python装饰器,并且我试图编写一个与此等效的程序:classmyDecorator(object):def__init__(self,f):print("insidemyDecorator.__init__()")f()#Provethatfunctiondefinitionhascompleteddef__call__(self):print("insidemyDecorator.__call__()")@myDecoratordefaFunction():print("insideaFunction()")print("FinisheddecoratingaFunct

python - Flask - 自定义装饰器打破路由

我有以下Flask路由和自定义助手:fromspotsimportapp,dbfromflaskimportResponseimportsimplejsonasjsondefjson_response(action_func):defcreate_json_response(*args,**kwargs):ret=action_func(*args,**kwargs)code=200iflen(ret)==2:code=ret[0]resp=ret[1]else:resp=ret[0]returnResponse(response=json.dumps(resp,indent=4),s

python - Django 自定义 View 装饰器

好吧,我在用户类中有一个名为no_m的方法,我之前没有写过装饰器,但基本上我需要将用户重定向到另一个URL,如果他们通过这个。我在名为accounts的目录中创建了一个名为decorators.py的文件,我猜装饰器已正确导入,但我无法让它工作。这是我所拥有的:defno_m(view_func):def_wrapped_view_func(request,*args,**kwargs):try:ifrequest.user.is_m():#quicktestreturnHttpResponseRedirect('http://google.com')else:returnview_f

python - 如何使用装饰器更改函数的返回值?

我想创建一个装饰器来像那样更改函数的返回值,如何像下面那样做?:defdec(func):defwrapper():#somecode...#changereturnvalueappend'c':3returnwrapper@decdeffoo():return{'a':1,'b':2}result=foo()printresult{'a':1,'b':2,'c':3} 最佳答案 嗯....你调用装饰函数并改变返回值:defdec(func):defwrapper(*args,**kwargs):result=func(*args,

python - 修复处理@property setter装饰器的pyflakes

Pyflakes不能很好地处理以下代码:@propertydefnodes(self):returnself._nodes@nodes.setterdefnodes(self,nodes):"""setthenodesonthisobject."""assertnodes!=[]#withoutnodesnoroute..self.node_names=[node.namefornodeinnodes]self._nodes=nodes使用vim和使用pyflakes的syntastic我得到以下错误:W806redefinitionoffunction'nodes'fromline5

python - 装饰器类和装饰器函数的区别

我想这就是它们的称呼方式,但为了以防万一,我会举一些例子。装饰类:classdecorator(object):def__init__(self,func):self.func=funcdef__call__(self,*args,**kwargs):print'something'self.func(*args,**kwargs)装饰器函数:defdecorator(func):defwrapper(*args,**kwargs):print'something'returnfunc(*args,**kwargs)returnwrapper使用其中一种只是个人喜好问题吗?有什么实际区

python - 具有多个装饰器的 celery 任务不会自动注册任务名称

我有一个看起来像这样的任务frommybasetask_moduleimportMyBaseTask@task(base=MyBaseTask)@my_custom_decoratordefmy_task(*args,**kwargs):pass我的基本任务是这样的fromceleryimporttask,TaskclassMyBaseTask(Task):abstract=Truedefault_retry_delay=10max_retries=3acks_late=True我遇到的问题是celeryworker正在用名称注册任务'mybasetask_module.__inner

python - Django:调整@login_required 装饰器

我想为我的网站开始私有(private)测试版。我有一个初始页面,用户可以在其中输入代码以访问网站的其余部分。目前,所有其他网站页面(启动页面除外)都包含一系列通过要求用户登录(通过@login_required装饰器)设置的重定向。我希望登录用户和输入BetaTester代码的人都能够访问站点的其余部分。这意味着我不能只对所有View使用装饰器。我应该改变@login_required装饰器本身吗?我更想做以下事情(如果用户在启动页面上输入正确的代码,我添加了一个session变量)。defview_name(request):user=request.userifnotuser.i