装饰器函数运用实例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个素数
"""

相关文章
相关标签/搜索