亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

代碼中的 f 指的是在什么?參數‘ms’的傳遞路徑又是怎樣的呢?求大神解答??

代碼中的 f 指的是在什么?參數‘ms’的傳遞路徑又是怎樣的呢?求大神解答?

import time

def performance(unit):

? ? def log_time(f):

? ? ? ? def a(*args,**kw):

? ? ? ? ? ? t1=time.time()

? ? ? ? ? ? r=f(*args,**kw)

? ? ? ? ? ? t2=time.time()

? ? ? ? ? ? if unit == 's':

? ? ? ? ? ? ? ? t=t2-t1;

? ? ? ? ? ? elif unit == 'ms':

? ? ? ? ? ? ? ? t=(t2-t1)*1000;

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? print 'input error'

? ? ? ? ? ? print 'call %s() in %f %s' %(f.__name__,t,unit);

? ? ? ? ? ? return r

? ? ? ? return a

? ? return log_time

? ? ? ? ? ??


@performance('ms')

def factorial(n):

? ? return reduce(lambda x,y: x*y, range(1, n+1))


print factorial(10)


正在回答

2 回答

f指的就是被裝飾器裝飾的函數,就是你那段代碼里的factorial()函數,factorial()函數被performance這個裝飾器裝飾了

0 回復 有任何疑惑可以回復我~

'ms'傳給performance后存儲在函數performance的作用域中,f傳給log_time后存儲在log_time作用域中,而a隸屬于以上兩個函數的作用域。

在調用performance('ms')后返回了一個unit參數為'ms'的log_time裝飾器,相當于@log_time,然后傳入factorial函數作為log_time裝飾器的參數,返回的函數a即為f參數為factorial,unit參數為'ms'的包裝后的factorial函數,然后再對factorial函數進行調用,則為帶著unit='ms'和f=factorial進行調用。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

代碼中的 f 指的是在什么?參數‘ms’的傳遞路徑又是怎樣的呢?求大神解答??

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號