第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

難以理解“賦值前引用的局部變量”

難以理解“賦值前引用的局部變量”

素胚勾勒不出你 2023-01-04 11:31:12
有很多帖子有類似的問題,但即使看完它們,我也無法理解背后的邏輯。對不起,我以前從未編程過。下面是兩段代碼——用于計算階乘的遞歸函數(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)錯誤。


查看完整回答
反對 回復 2023-01-04
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

考慮這個功能:

def func(n): 
   return f

很容易看出為什么這個函數(shù)會報錯,因為f它不存在。

在您的第一個函數(shù)中,如果n != 1evaluates False,它將表現(xiàn)得像我上面給出的示例函數(shù)。

正如@Mustafa Ayd?n 評論的那樣,該錯誤與您的錯誤略有不同,UnboundLocalError但概念仍然存在。


查看完整回答
反對 回復 2023-01-04
  • 2 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號