題目:封裝函數計算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個素數
"""
