1. 程式人生 > 其它 >python(6)——裝飾器的定義和使用

python(6)——裝飾器的定義和使用

技術標籤:python

1.閱讀下面的程式,分析程式碼能否編譯通過。如果能編譯通過,請列出執行結果,並說明原因;否則說明編譯失敗的原因。
程式1:
def funX():
x=5
def funY():
nonlocal x
x+=1
return x
return funY
a=funX()
print(a())
print(a())
print(a())

def funX():
    x=5
    def funY():
        nonlocal x#定義在閉包裡
        x+=1
        return x
    return funY
a=funX(
) print(a()) print(a()) print(a()) #定義了一個裝飾器 能夠編譯通過,在裝飾器裡面 對x變數進行了加1操作 ,因為x初始值為5,所以第一次輸出a為6 第二次為7,第三次為9

程式2:
def funX():
x=5
def funY():
nonlocal x
x+=1
return x
return funY
a=funX
print(a()())
print(a()())
print(a()())

def funX():
    x=5
    def funY():
        nonlocal x
        x+=1
        return
x return funY a=funX print(a()()) print(a()()) print(a()()) #和上面的函式一樣,也同樣定義了裝飾器,能夠編譯通過,但是由於輸出格式為 print(a()()) 導致結果不變

2.已知有個列表[1,2,3,4,5],讓列表的每個元素加1,把結果不能被2整除的元素篩選出來。

a=[1,2,3,4,5]
print(a)
b=list(map(lambda x:x+1,a))
print(b)
for i in b:
    if(i%2!=0):
        print(i,end=" ")