查看完整版本: 關於Python內部函數的問題,麻煩前輩指導(已解決,感謝各位前輩)
頁: [1]

chialewang 發表於 2019-8-23 11:36 PM

關於Python內部函數的問題,麻煩前輩指導(已解決,感謝各位前輩)

本帖最後由 chialewang 於 2019-8-27 10:59 AM 編輯

各位前輩 您們好:

線上教學他打的是以下的程式碼



我照keyin
def FunX(x):
    def Fun(y):
        return x * y
    return FunY
i = FunX(8)
i(5)但卻顯示 NameError: name 'FunY' is not defined

我不曉得哪裡錯了?怎樣都顯示不出他說的 8*5 = 40  

此外,此單元叫"閉包"?
聽起來好像怪怪的,好像大陸用語
真的叫閉包嗎? 還是台灣有更正確的說法

麻煩前輩們指點一下

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

chialewang 發表於 2019-8-24 08:08 PM

snowflying 前輩 您好:

您說:"你裡面的打成 Fun 而不是 FunY"
是指第二行嗎?

我改成def FunY(y):
依然不行耶def FunX(x):
    def FunY(y):
        return x * y
    return FunY
i = FunX(8)
i(5)請前輩指教 感恩

tryit244178 發表於 2019-8-25 10:09 AM

本帖最後由 tryit244178 於 2019-8-26 04:28 PM 編輯

改成這樣試試
用print()把結果顯示出來>>>def FunX(x):
...   def FunY(y):
...      return x*y
...   return FunY
...
>>>i = FunX(8)
>>>print(i)
>>>print(type(i))
>>>print(i(5))
>>>print(FunX(8)(5))











補充內容 (2019-8-25 10:13 AM):
格式一直被吃掉...放棄編輯orz






補充內容 (2019-8-26 04:29 PM):
搞…搞定了_(:з」∠)_

ddttdtxb 發表於 2019-8-25 05:28 PM

在 python 的例子中… 如果看到 >>> 開頭。

就表示它是在 python shell 裡執行的。
如果一行中只有變數,會將它的值印出來…  (還有沒有其它的詳細規則,我不清楚。)
所以範例中 只寫 i(5) ,但實際上會有 「print(i(5))」的效果。
猜想可能是樓主不在 python shell 環境,覺得沒有東西輸出感到奇怪…

閉包這個詞,在台灣也有人在用吧!至於是不是對岸用語,老實說我覺得已不重要了。
台灣的程式中文書市場不夠大,繁中書出版的量太少,翻譯書也慢原版的許久。
如果英文不夠好,接觸大陸用的習慣用語是閃不掉了,早點習慣比較好。

閉包就是一個變數生存空間,以及能否被使用的概念。
在 JavaScript 裡也常常使用到這個概念,能寫出許多看起來很神奇,
要讀懂很花力氣的程式碼…  XD...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chialewang 發表於 2019-8-27 10:50 AM

chialewang 發表於 2019-8-24 08:08 PM static/image/common/back.gif
snowflying 前輩 您好:

您說:"你裡面的打成 Fun 而不是 FunY"


snowflying 前輩 您好:

沒有錯誤訊息
不過我改成您上次教導我的
凡事要多+print,那一定印得出來
所以我+了def FunX(x):
    def FunY(y):
        return x * y
    return FunY
i = FunX(8)
print(i(5))
print(FunX(8)(5))
果然很成功的輸出40

再次感謝您的指點 感恩...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

chialewang 發表於 2019-8-27 10:54 AM

tryit244178 發表於 2019-8-25 10:09 AM static/image/common/back.gif
改成這樣試試
用print()把結果顯示出來



tryit244178 前輩 您好:

我將您的程式碼改成def FunX(x):
    def FunY(y):
        return x * y
    return FunY
i = FunX(8)
print(i(5))
print(FunX(8)(5))
結果成功印出
我是用spyder下去寫的
所以加上print就成功了

感謝前輩的指導 感恩...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chialewang 發表於 2019-8-27 10:58 AM

ddttdtxb 發表於 2019-8-25 05:28 PM static/image/common/back.gif
在 python 的例子中… 如果看到 >>> 開頭。

就表示它是在 python shell 裡執行的。


ddttdtxb 前輩 您好:

我的確不是在python shell 環境編寫
是在spyder
+上print就成功輸出了

關於"閉包"的說明
感謝您的說明 感恩
頁: [1]