作者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/cn.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