python(基础)函数的装饰器

在代码运行期间,可以动态增加函数功能的方式,被称为装饰器【Decorator】

也就是说,在不修改原函数的基础上,给原函数增加功能

好处:在团队开发中,如果两个或者两个以上的程序员会用到相同的功能,但是功能又有细微的差别,采用装饰器:相互不影响,代码简化

一、简单的装饰器
# 简单装饰器
def outer2(fn):  # fn = eat2
    def inner():
        print("先挑个舞")
        fn()
        print('再唱个歌')
    return inner

# @outer2
def eat2():
    print("吃饭2")

# 使用装饰器: 原理
eat2 = outer2(eat2)
print(eat2.__name__)
# 调用函数
# eat2()   # inner()
二、通用装饰器
# 通用装饰器
def outer(fn):
    def inner(*args,**kwargs):
        print("before")
        res = fn(*args,**kwargs)
        print("after")
        return res
    return inner

@outer
def eat():
    print("吃饭")

@outer
def sing(song):
    print("刘德华唱:", song)
    return "唱得好!"

# 调用
eat()

res = sing("吻别")
print("res:",res)
三、函数递归


# 函数递归: 函数内部调用自身

'''
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!

'''

# 使用递归:
#     1. 找公式,如:f(n) = n * f(n-1)
#     2. 找临界值,如: n = 1,f(1) =1
#     3. 一定要相信函数能实现


# 求n的阶乘
def fn(n):
    if n == 1:
        return 1
    return n * fn(n-1)

print(fn(8))

# 1.封装函数,传入n,得到 第n个 斐波那契数
#  	    1 1 2 3 5 8 13 21
# 找公式:f(n) = f(n-1) + f(n-2)
# 临界值: n=1,2; f(1)=(2)=1

def f(n):
    if n <=2:
        return 1
    return f(n-1)+f(n-2)
print(f(8))
# 2.封装函数,传入n,得到 前n个 斐波那契数
#  	    1 1 2 3 5 8 13 21
def f2(n):
    for i in range(1,n+1):
        print(f(i), end=" ")
    print()

f2(8)
# 1.兔子繁殖问题。
#     设有一对新生的兔子,从第4个月开始他们每个月月初都生一对新兔子,
#     新生的兔子从第4个月开始又每个月月初生一对兔子。
#     按此规律,并假定兔子没有死亡,20个月末共有多少对兔子?
'''
          1月大兔   2月大兔   3月大兔    4月大兔 (包含大于4月兔)  兔子总对数
第1个月      1       0        0           0                        1
第2个月      0       1        0           0                        1
第3个月      0       0        1           0                        1
第4个月      1       0        0           1                        2
第5个月      1       1        0           1                        3
第6个月      1       1        1           1                        4
第7个月      2       1        1           2                        6
第8个月      3       2        1           3                        9
第9个月      4       3        2           4                        13

'''
def ffc(n):
    if n <= 3:
        return 1
    return ffc(n-1)+ffc(n-3)
print(ffc(9))
四、栈和队列




stack = []
# 入栈
stack.append('A')
print(stack)
stack.append('B')
print(stack)
stack.append('C')
print(stack)
stack.append('D')
print(stack)
# 出栈
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)

# 队列
from  collections import deque

# 创建一个队列
queue = deque()
print(queue)

# 入队列
queue.append("A")
print(queue)

queue.append("B")
print(queue)

queue.append("C")
print(queue)

queue.append("D")
print(queue)

# 出队列
queue.popleft()
print(queue)

queue.popleft()
print(queue)

queue.popleft()
print(queue)

queue.popleft()
print(queue)
python = 1

a = range(50)

print(a[-5::-1])
print(a[::3])

print('ab' in 'acbed')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值