名称错误:函数名称未定义

3

我正在使用Python2.7.6(默认版本为Jun 22 2015, 17:58:13)编写一个小的Python模块,并且使用IPython1.2.1来运行我的程序。

该模块将包含多个基于幂级数的数学函数的计算。我将Python函数定义与Python函数测试分开处理。

下面是我的PowerSeries.py代码:

### Computations of some functions by power series ###

def exp(x):
    """Exponential function"""
    exp=1.0
    term=1.0
    iteration=1
    factorial=1
    while(abs(term/factorial)>1e-10):
        factorial*=iteration
        term*=x
        exp+=term/factorial
        iteration+=1
    return exp

def hyperbolicCosine(x):
    """Hyperbolic cosine function"""
    cosh=1.0
    term=1.0
    iteration=1
    factorial=1
    while(abs(term/factorial)>1e-10):
        factorial*=iteration
        term*=x
        if iteration%2==0:
            cosh+=term/factorial
        iteration+=1
   return cosh

def sine(x):
    """Sine function"""
    sine=0.0
    term=1.0
    iteration=1
    factorial=1
    while(abs(term/factorial)>1e-10):
        factorial*=iteration
        term*=x
        if iteration%2==1:
            sine+=term/factorial                
            term=-term
        iteration+=1
    return sine

def cosine(x):
    """Cosine function"""
    cosine=1.0
    term=1.0
    iteration=1
    factorial=1
    while(abs(term/factorial)>1e-10):
        factorial*=iteration
        term*=x
        if (iteration)%2==0:
            term=-term
            cosine+=term/factorial              
        iteration+=1
    return cosine

这是我的tests.py代码

### Tests for PowerSeries Module ###
from math import pi
from PowerSeries import *

# Tests of exponential
print "### Tests of exponential ###"
x=-2
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=-1
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=0
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=1
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=2
print("x=%f exp(x)=%.10f" % (x,exp(x)))

# Tests of hyperbolic cosine
print "### Tests of hyperbolic cosine ###"
x=-2
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=-1
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=0
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=1
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=2
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))


# Tests of sine
print "### Tests of sine ###"
x=0
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/6
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/4
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/3
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/2
print("x=%f sin(x)=%.10f" % (x,sine(x)))

# Tests of cosine
print "### Tests of cosine ###"
x=0
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/6
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/4
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/3
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/2
print("x=%f cos(x)=%.10f" % (x,cosine(x)))

一切正常,直到我添加双曲余弦定义。 执行tests.py文件时,出现一个无法解决的NameError错误:

     19 print "### Tests of hyperbolic cosine ###"
     20 x=-2
---> 21 print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
     22 x=-1
     23 print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))

NameError: name 'hyperbolicCosine' is not defined

欢迎提供帮助。


4
您确定您没有某个早于您的.py文件的.pyc文件,或者一个在不同目录下的.py文件而不是您认为正在使用的那个吗?请将PowerSeries.py临时更名并使用另一个名称进行导入。 - Patrick Maupin
你是如何运行 tests.py 代码的?可以展示一下具体的命令吗?是在 ipython 解释器内部运行的吗? - Anand S Kumar
我用命令 run tests.py 在ipython解释器中运行tests.py代码。但根据帕特里克·莫平的说法,实际上是通过删除旧的 PowerSeries.pyc 文件来解决错误。所以现在它可以运行了,我会添加更多函数定义并牢记这个问题。谢谢你们两个。 - Cédric
1个回答

1
我因为太新而无法发表评论,但从一个特定的模块中明确地导入所需内容总是更好的想法。如果你总是这样做,它可以帮助在将来缩小问题的范围(即,你将得到一个ImportError而不是NameError)。
此外,.pyc文件是基于时间戳重新生成的。看起来这个问题更可能是由于iPython在内存中有旧模块造成的。

是的,veggie1,你说得对。我太懒了,没打函数名。但我已经改正了。此外,我是一个新的ipython用户。我还不太了解它的工作原理。我想我需要深入研究一下有关导入模块和相关命令机制的教程。谢谢你的建议。 - Cédric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接