def document_it(func):
def new_function(*args,**kwargs):
print('Running function:',func.__name__)
print('Positional arguments:', args)
print('leword argument:',kwargs)
result = func(*args,**kwargs)
print('Result:',result)
return result
return new_function
def square_it(func):
def new_function(*arg,**kwargs):
result= func(*arg,**kwargs)
return result*result
return new_function
//執行1
@document_it
@square_it
def add_ints(a,b):
return a+b
add_ints(3,5)
//執行2
@square_it
@document_it
def add_ints(a,b):
return a+b
add_ints(3,5)
執行1結果
Running function: new_function
Positional arguments: (3, 5)
leword argument: {}
Result: 64
64
執行2結果
Running function: add_ints
Positional arguments: (3, 5)
leword argument: {}
Result: 8
64
一直搞不懂為何@document_it和@square_it執行順序對調結果會不一樣
我的想法是對調不會有差別,執行解果都長這樣。
Running function: new_function
Positional arguments: (3, 5)
leword argument: {}
Result: 8
8
64
小弟剛接觸python問的 問題很粗淺還請多包涵
function 被換掉,不是 result
應該說有多個 decorator 的狀態,python會依順序套嵌。
不是將add_ints(3, 5)從上往下執行。
所以你看到第一個狀態會是 Running function: new_function
第二個會是: Running function: add_ints
不過有趣的是,這樣的運行行為和下面不一樣。
document_it(square_it(add_ints(3, 5)))
square_it(document_it(add_ints(3, 5)))
python應該有一個執行的順序吧,就是那些值被取出來,哪些值被後來執行的覆蓋掉,看完兩位大大的回覆後還是有點混亂!