装饰器函数运用实例1
Posted liulian999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器函数运用实例1相关的知识,希望对你有一定的参考价值。
题目:封装函数计算2~100之间素数的个数,返回结果
def f1(f): #定义一个外层函数
def f2(): #在外层函数内定义一个函数(该函数主要实现所需要封装的功能),因为指定2~100内,所以不需要形参
sum = 0 #后面通过sum+=1来统计素数的个数
for i in range(2, 101): #从2~100中取数,后面挨个判断是否为素数
for j in range(2, i): #该循环体从2到i-1中挨个取数,若存在一个数能整除i,则i不是素数,若j取到了i-1,说明i只被1和它本身整除
if i % j == 0:
break
elif j == i-1:
sum += 1 #当j都取到i-1了还找不到整除i的数,则i是素数,此处对sum+1进行累计
return f(sum+1) #因为当i=2时,range(2,2)为空,循环无法进行,直接结束了,所以2被漏掉了,所以sum+1将2补回来
return f2() #在调用f1时,通过返回
# @f1 #该语句的意思就是用f1()函数装饰f()函数的意思,为了便于理解,此处注释掉
def f(p):
print("2~100内有%d个素数"%p)
f1(f)
"""
(1)通过语句f1(f)调用f1函数,注意f1(f)是一个函数运算表达式,他需要执行f1()函数,得到的值为return f2(),所以它的值为f2()
(2)f2()是内层函数运算表达式,它也是有值的,它的值是f(sum+1),这个仍然是函数运算表达式,它的值是什么???
(3)在内层函数中我们通过语句运算已经得出了sum+1=25,也就是说f1(f)最终的返回值是f(25),它仍然还是个函数表达式,继续调用函数运算
(4)执行f函数得到最终结果>>2~100内有25个素数
"""
以上是关于装饰器函数运用实例1的主要内容,如果未能解决你的问题,请参考以下文章