作者MADNUG (就是比你長)
看板Python
標題[問題] def func內呼叫不到builtin function
時間Sun Aug 30 23:51:09 2015
小弟目前在自學Python,之前有幾年MATLAB和幾個月R的經驗
現在遇到些問題想請教各位板大
程式碼如下: backsub.py
http://pastebin.com/q2uzRfRJ
問題:
import numpy
from numpy import *
import backsub as sta
sta.backsub(X,y)
跳出錯誤訊息:
NameError: name 'zeros' is not defined
但如果把backsub.py的程式碼整個複製到IDLE中執行後
backsub(X,y)
就成功且正確跑出來了
似乎def func中呼叫不到zeros這個function
因此懷疑是不是和local vs global有關
但辜狗一下都只是看到針對variable沒看到對function的說明
異想天開在程式碼加上
global zeros
一樣無法成功跑出sta.backsub(X,y)
請問到底是什麼原因呢?
謝謝!
--
○ 啊~ ○○ 咿~ ○ 喔~ 嗯~
ㄥ︹○ ︽〕 ○\︿ ○
》 ﹨︿ ○︿/︿ ○≦\_
(十面埋伏) (針鋒相對) (腹背受敵) (騰雲駕霧)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 184.6.253.131
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1440949878.A.8E2.html
1F:推 chenstin: 看起來是 "from numpy import *" 要放在backsub.py裡 08/31 00:09
謝謝C大
其實我第一次就有把'from numpy import *'寫在backsub.py裡
但是import backsub as sta時跳出下列錯誤訊息,所以我就刪了
SyntaxError: import * only allowed at module level
剛剛發現變成arange這個function呼叫不到...
所以靈光一現,不用import *,而是把會用到的三個numpy::function寫進去
'from numpy import zeros, arrange, dot'
就成功了!
但對原理還是不太了解....
請問有板大能幫忙解釋一下並提供其他解決法嗎?
畢竟要是下次是三十個而不是三個function那就麻煩了...
※ 編輯: MADNUG (184.6.253.131), 08/31/2015 01:09:15
2F:推 tiefblau: import * 就一定要寫在moudle level啊 你是希望啥解釋?? 08/31 10:48
3F:→ MADNUG: 就是請問大大為何我在外層已經import *了,def內還是呼叫 08/31 11:39
4F:→ MADNUG: 不到function?那除了在def內把需要用到的function一個一 08/31 11:39
5F:→ MADNUG: 個import之外,有無其他方法? 08/31 11:39
6F:→ uranusjr: 看不懂你在講什麼, 把完整的程式放出來才有得談 08/31 13:19