亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

賦值前引用的局部變量“n”。閉包

賦值前引用的局部變量“n”。閉包

慕桂英546537 2022-06-14 16:18:30
def fibonacci_closure(n):    def fibonaci():          if n == 0: """in this line error occured idk why because in watches i see n=4"""             return 0          elif n == 1 or n == 2:            return 1          else:            i = 1             j = 1             tmp = 1             while n != 2:                 n -=1                tmp = i                 i = j + i                 j = tmp             return i     return fibonacia = fibonacci_closure(4)a()任務: 返回一個閉包,該閉包將在重復調用時生成斐波那契數列的元素。例子:    g = fibonacci_closure()    g() # 1    g() # 1    g() # 2    g() # 3UnboundLocalError:分配前引用的局部變量“n”
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

斐波那契數是生成器的典型示例。為什么函數應該返回一個函數而不是生成器只是令人惱火的。


def fibonacci_closure():

    def fibonacci():

        i = j = 1

        while True:

            yield i

            i, j = j, i + j

    return fibonacci().__next__


查看完整回答
反對 回復 2022-06-14
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

您嘗試完成的任務可以通過創建一個類來完成。(或者您可以考慮創建一個“生成器”對象,這是它自己獨立的東西。)


為了在一次調用到下一次調用中保留 n 的值,您需要某種全局變量。Python 中的全局變量是可能的,但這是不好的做法。同樣的事情可以在一個類中完成,其中 n 存儲并封裝在該類中。


查看我所做的更改,看看該功能現在是否按您的預期工作。干杯!


class fibonacci_closure():

    def __init__(self):

        self.n = 0


    def fibonaci(self): 

        if self.n == 0:

            self.n+=1

            print(0) 

        elif self.n == 1 or self.n == 2:

            self.n+=1

            print(1) 

        else:

            i = 1 

            j = 1 

            tmp = 1

            hold = self.n 

            while hold != 2: 

                hold -=1

                tmp = i 

                i = j + i 

                j = tmp

            self.n+=1

            print(i) 


查看完整回答
反對 回復 2022-06-14
  • 2 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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