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

心有法竹
TA貢獻1866條經驗 獲得超5個贊
函數(shù) 1 -
def func(n): if n != 1: f = n*func(n-1) else: return f
在第一個函數(shù)中,
f
返回時可能仍未初始化(取決于輸入)。您的第一個函數(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
但是,在您的第二個函數(shù)中,您將始終
f
在返回它之前進行初始化( n >= 1 )或進入無限遞歸( n < 1 )。無論如何,你不會在沒有初始化的情況下返回它。所以它沒有給出錯誤。
希望你明白為什么會出現(xiàn)錯誤。

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