感谢您的提问,下面是关于Python装饰器练习题及答案的详细讲解攻略。
什么是Python装饰器?
Python装饰器是一种用于在不改变已有代码的情况下,增加额外功能的语法结构。一个Python装饰器通常是一个函数,它接受一个函数作为参数,并返回另一个函数。在使用装饰器时,我们将目标函数作为参数传递给装饰器,装饰器会对目标函数进行一些修改或增强,然后返回一个新的函数。在执行新函数时,会先执行装饰器中的代码逻辑,再执行原函数的代码逻辑。
Python装饰器练习题及答案
下面将给出两个Python装饰器练习题及其答案,帮助大家更好地理解和掌握Python装饰器的使用方法。
练习一:计算函数执行时间
题目要求:编写一个装饰器,能够计算被修饰函数的执行时间,输出时间值。
import time
def calculate_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("函数执行时间:{}秒".format(end_time - start_time))
return result
return wrapper
# 使用装饰器
@calculate_time
def count_numbers(n):
return sum(range(n))
if __name__ == '__main__':
print(count_numbers(1000000))
示例说明:以上代码中,我们定义了一个装饰器calculate_time
,可以计算被修饰函数的执行时间。接着我们定义了一个函数count_numbers
,该函数接受一个整数n
,然后返回从0
到n-1
的所有整数之和。我们再使用装饰器calculate_time
修饰函数count_numbers
,并在main
函数中调用count_numbers
函数,传递参数为1000000
。当程序运行时,装饰器会自动计算count_numbers
函数的执行时间,并以秒
为单位输出。最后输出了函数count_numbers
的返回值。
练习二:限制函数调用次数
题目要求:编写一个装饰器,用于对被修饰函数进行调用次数限制,在达到一定次数后,抛出异常提示。
def limit_call_count(max_calls):
def decorate(func):
calls = 0
def wrapper(*args, **kwargs):
nonlocal calls
calls += 1
if calls > max_calls:
raise ValueError("函数 '{}' 超过了最大调用次数:{}次".format(func.__name__, max_calls))
return func(*args, **kwargs)
return wrapper
return decorate
# 使用装饰器
@limit_call_count(max_calls=5)
def greeting(name):
print("Hello, {}!".format(name))
if __name__ == '__main__':
for i in range(1, 7):
greeting("Alex")
示例说明:以上代码中,我们定义了一个装饰器limit_call_count
,它可以限制被修饰函数的调用次数,当调用次数达到一定值时,会抛出一个异常提示。接下来我们定义一个函数greeting
,该函数接受一个字符串name
,并输出Hello, name!
的问候语。最后我们使用装饰器limit_call_count
修饰greeting
函数,并将最大调用次数设定为5
。在main
函数中,我们循环6次调用greeting
函数,并传递相同的参数"Alex"
。由于调用次数超过了规定的最大调用次数,因此第六次调用会抛出一个异常提示。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python装饰器练习题及答案 - Python技术站