为了账号安全,请及时绑定邮箱和手机立即绑定

传参问题以及错误

我不用@,直接用performance(factorial(10)),为什么还会报错啊,@的作用不就是让我们少写这个么? 还有一个问题,我们在performance函数里面的内置函数里面传了参数,但是performance函数传的参数仅仅是函数,拿 performance(factorial(10)) 为例,performance函数我们传的参数是一个函数,performance内置函数的参数是什么?默认是传进去的这个函数的参数,这个传递到底是怎么实现的,还是就是这个规则,performance传进去的函数的参数就是他内置函数的参数,请大佬解答,谢谢谢谢谢谢

正在回答

1 回答

感觉有些乱,大概说下我的想法吧。

你的performance传递的factor((10)),我觉得已经不是一个函数了,而是传递的一个值吧,factoral((10))可以认为是一个函数执行后得到的返回值。

import time
from functools import reduce


def performance(unit):   #uint就是接收刚刚传入的‘ms’
    def g(f):               #传入要被装饰的函数名
        def h(*arg,**kw):         #传入被装饰的函数的 参数变量n
            r1=time.time()        #
            t1=f(*arg,**kw)        #这里执行了f函数并得到了返回值
            r2=time.time()
            if unit=='ms' :
                print ('call ',f.__name__,'() in ',(r2-r1)*1000)
            elif unit=='s' :
                print ('call ',f.__name__,'() in ',r2-r1)
                                        
            return t1                   #返回了运算结果
        return h                        #提供h的入口
    return g                            #提供g的入口
@performance('ms')  #将参数‘ms传入’
def factorial(n):  #此函数相当于performance里面的f()函数,执行f()相当于执行此函数
    return reduce(lambda x,y: x*y, range(1, n+1))
print (factorial(10))


1 回复 有任何疑惑可以回复我~
#1

qq_走心_9 提问者

非常感谢!
2017-12-28 回复 有任何疑惑可以回复我~
#2

慕先生8033775

想请教下大佬,是不是需要在原先函数中设置一个装饰器入口?
2018-07-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

传参问题以及错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信