題目:封裝函數計算2~100之間素數的個數,返回結果def f1(f): #定義一個外層函數 def f2(): #在外層函數內定義一個函數(該函數主要實現所需要封裝的功能),因為指定2~100內,所以不需要形參 sum = 0 #後面通過sum+=1來統計素數的個數 for i in range( ...
題目:封裝函數計算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個素數
"""