1. 程式人生 > 實用技巧 >複習(閉包和裝飾器)

複習(閉包和裝飾器)

# __author: "ZXYang"
# date: 2020/11/24


# def fun(n):
# if n == 1:
# return 2
# elif n == 2:
# return 2
# else:
# return fun(n - 1) + fun(n - 2)
#
#
# print(fun(3))

# money = 100
# book = 100
# count = 0
# for a in range(int(money/5)):
# for b in range(int(money/3)):
# for c in range(int(money/0.5)):
# if a * 5 + b * 3 + c * 0.5 <= 100 and a + b + c == 100:
# print("a={0}, b={1}, c={2}".format(a, b, c))
# count += 1
# print(count)
#
#
# money = 100
# book = 100
# count = 0
#
# for a in range(int(money/5)):
# for b in range(int(100/3)):
# for c in range(int(money/0.5)):
# if a * 5 + b * 3 + c * 0.5 <= 100 and a + b + c == 100:
# print(a, b, c)
# count += 1
# print(count)

# li = [11, 21, 4, 55, 5, 3, 12]
# li1 = [i % 2 for i in li if i > 5]
# print(li1)

# li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# li1 = [[i-2, i-1, i] for i in li if i % 3 == 0]
# print(li1)

# nu1 = 100

"""
閉包
"""
# def aa(a):
# print("---aa----")
# nu2 = 101
#
# def bb():
# print(nu2)
# print(a)
#
# # bb()
# return bb
#
# nu2 = 1
# # aa()
# bb = aa(11)
# # print(res)
# bb()

"""
裝飾器函式(使用閉包)
原功能函式
"""


def aa(fun):
print("111")

def bb(*args, **kwargs):
print("裝飾器函式")
setattr(fun, "name", "li")
obj = fun(*args, **kwargs)
return obj

return bb


# @aa
# def func1():
# print("原功能函式")


# func1()
@aa
def sum1(a, b):
print(a + b)


# sum1(11, 22)
sum1(a=11, b=22)

# def fun11(a, b, c):
# print(a, b, c)
#
#
# tu = (11, 22, 33)
# fun11(*tu)

print("==========================")

"""

類實現裝飾器

"""


class Li(object):

def __init__(self, func):
self.func = func

def __call__(self, *args, **kwargs):
print("__call__方法") # 加些擴充套件功能
return self.func(*args, **kwargs) # 返回類建立的物件(類用作裝飾器時)


# a = aaa()

# a()
# a.fcun111()

# 類裝飾 函式
# @Li
# def add_num(a, b):
# print("add_num")
#
#
# add_num(11, 22)
# @aa
@Li # 類裝飾器 裝飾類
class Hero:

def func003(self):
print("==")


a = Hero()
# print(a.name)
a.func003()