有很多帖子有類似的問題,但即使看完它們,我也無法理解背后的邏輯。對不起,我以前從未編程過。下面是兩段代碼——用于計(jì)算階乘的遞歸函數(shù)。無論我傳遞 1 還是任何值,都會出現(xiàn)錯誤“賦值前引用的局部變量‘f’”。def func(n): if n != 1: f = n*func(n-1) else: return f但是,當(dāng)我將代碼更改為:def func(n): if n == 1: return 1 else: f = n*func(n-1) return f沒有錯誤,程序運(yùn)行。在這兩種情況下,我都沒有在分配之前初始化變量“f”,并且兩者都只是函數(shù)的局部變量。只是想弄清楚我的基本概念。謝謝。
2 回答

心有法竹
TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
函數(shù) 1 -
def func(n): if n != 1: f = n*func(n-1) else: return f
在第一個(gè)函數(shù)中,
f
返回時(shí)可能仍未初始化(取決于輸入)。您的第一個(gè)函數(shù)沒有第二個(gè)函數(shù)中的基本情況。假設(shè)您傳遞的參數(shù)
n
不等于 1。if n != 1
條件將被評估為False
。else
那么還沒有初始化的statement怎么返回f
呢?因此錯誤...
功能 2 -
def func(n): if n == 1: return 1 else: f = n*func(n-1) return f
但是,在您的第二個(gè)函數(shù)中,您將始終
f
在返回它之前進(jìn)行初始化( n >= 1 )或進(jìn)入無限遞歸( n < 1 )。無論如何,你不會在沒有初始化的情況下返回它。所以它沒有給出錯誤。
希望你明白為什么會出現(xiàn)錯誤。

HUWWW
TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
考慮這個(gè)功能:
def func(n): return f
很容易看出為什么這個(gè)函數(shù)會報(bào)錯,因?yàn)?code>f它不存在。
在您的第一個(gè)函數(shù)中,如果n != 1
evaluates False
,它將表現(xiàn)得像我上面給出的示例函數(shù)。
正如@Mustafa Ayd?n 評論的那樣,該錯誤與您的錯誤略有不同,UnboundLocalError
但概念仍然存在。
添加回答
舉報(bào)
0/150
提交
取消