Python打卡day27

知识点回顾:

  1. 装饰器的思想:进一步复用
  2. 函数的装饰器写法
  3. 注意内部函数的返回值
    import time
     
     
    def is_prime(num):
        if num < 2:
            return False
        elif num == 2:
            return True
        else:
            for i in range(2, num):
                if num % i == 0:
                    return False
            return True
     
     
    def prime_nums():
        t1 = time.time()
        for i in range(2, 10000):
            if is_prime(i):
                print(i)
        t2 = time.time()
        print(f"执行时间:{t2 - t1}秒")
     
    prime_nums()
     
     
     
     
     
    import time
     
    # 定义一个装饰器
    def display_time(func):
        def wrapper(): # 定义一个内部函数,在装饰器中wrapper函数是一个常用的函数名,并非强制,约定俗成的
            start_time = time.time()
            func()  # 直接调用原函数(无参数),这里的func()是指装饰器需要修饰的函数,在这里是prime_nums()
            end_time = time.time()
            print(f"执行时间: {end_time - start_time} 秒")
        return wrapper # return wrapper是返回函数对象,如果是return wrapper()则是立即执行wrapper函数
     
     
     
     
     
    # 继续定义判断质数的函数
    def is_prime(num):
        """
        判断一个数是否为素数
        """
        if num < 2:
            return False
        elif num == 2:
            return True
        else:
            for i in range(2, num):
                if num % i == 0:
                    return False
            return True
     
    # 装饰器的标准写法
    @display_time
    def prime_nums(): # 这2行是一个整体
        """
        找出2到10000之间的所有素数并打印
        """
        for i in range(2, 10000):
            if is_prime(i):
                print(i)
     
     
    prime_nums()
    # 执行时间每次都会变,但是变动不大,一般计算稳定的执行时间我们都是重复1000遍,然后取平均
     
     
     
     
     
    import time
     
    def display_time(func):
        """支持任意参数的时间统计装饰器"""
        def wrapper(*args, **kwargs):  # 接收任意数量的位置参数和关键字参数
            t1 = time.time()
            result = func(*args, **kwargs)  # 将参数传递给原函数,注意之前的无参数写法和现在不同
            t2 = time.time()
            print(f"函数执行时间: {t2 - t1} 秒")
            return result  # 返回原函数的返回值
        return wrapper
     
    @display_time
    def add(a, b):
        return a + b
     
    add(3, 5)  # 正常接收参数并计算
     
     
     
     
     
    # 作业答案
     
    def logger(func):
        def wrapper(*args, **kwargs):  # args 是元组,kwargs 是字典
            print(f"开始执行函数 {func.__name__},参数: {args}, {kwargs}")
            result = func(*args, **kwargs)
            print(f"函数 {func.__name__} 执行完毕,返回值: {result}")
            return result
        return wrapper
     
    @logger
    def multiply(a, b):
        return a * b 
     
    multiply(2, 3)  # 调用 multiply 函数,观察日志输出
     
     
     
     
     
    multiply(a=2, b=3)  
     
    multiply(a = 2, 3) 
     
    multiply(a = 2, 3) 

    @浙大疏锦行

你可能感兴趣的:(Python打卡训练营,python,算法,开发语言)