装饰器__python

import time
def f1():
    #print(time.time())#>>> 1542357939.895075   
    
    print('This is a function')
    

f1()
#>>> This is a function


def f2():
    print('This is a function')

def print_current_time(func):
    print(time.time())
    func()

print_current_time(f1)
print_current_time(f2)

修改代码时函数对修改是封闭的,对扩展是开放的

unix 时间戳:
Unix 时间戳(Unix timestamp),或称Unix时间(Unix time)
POSIX时间(POSIX time),是一种时间表示方式
定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数

输出结果:

This is a function
1542359549.3405
This is a function
1542359549.354429
This is a function

上述代码评价:

通过print_current_time函数使得上面两个函数增加打印时间的功能

print_current_time函数的作用等同于:

print(time.time())
f1()
print(time.time())
f2()

使用装饰器解决(内聚性更高)  

下面给出装饰器完整版

f5类型更全面,装饰器完成的基础上优先考虑f5的实现(灵活)

def decorator(func):#装饰
    def wrapper(*args,**kw):#封装   *args可变参数   **kw关键字参数(kw自己指定)
        print(time.time())
        func(*args,**kw)#函数定义时都可以使用这中方法,不用考虑参数的数量问题
    return wrapper

@decorator
def f3(func_name):
    print('This is a function'+func_name)


#f=decorator(f1)
#f()#f相当于函数,这里相当于调用decorator()函数

#<==>@decorator使用后可以直接调用f3和f4
f3(' test func')
#>>>1542359549.373817
#>>>This is a function test func

@decorator使用后可以直接调用f5

推荐使用:func(*args,**kw)    函数定义时都可以使用这中方法,不用考虑参数的数量问题

 

f4使用可变参数:

@decorator
def f4(func_name1,func_name2):
    print('This is a function'+func_name1)
    print('This is a function'+func_name2)
    
f4(' test func1',' test func2')
#>>>1542359932.665969
#This is a function test func1
#This is a function test func2

f5  第三个参数:关键字参数(可任意指定参数的数量):

#f5  第三个参数:关键字参数(可任意指定参数的数量)    
@decorator
def f5(func_name1,func_name2,**kw):
    print('This is a function'+func_name1)
    print('This is a function'+func_name2)
    print(kw)

f5(' test func1',' test func2', a=1, b=2, c='123')

#This is a function test func1
#This is a function test func2
#{'c': '123', 'b': 2, 'a': 1}

 

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值