0
def fvals_sqrt(x):
   """
   Return f(x) and f'(x) for applying Newton to find a square root.
   """
   f = x**2 - 4.
   fp = 2.*x
   return f, fp

def solve(fvals_sqrt, x0, debug_solve=True):
   """
   Solves the sqrt function, using newtons methon.
   """
   fvals_sqrt(x0)
   x0 = x0 + (f/fp)
   print x0

当我尝试调用函数solve时,python返回:

NameError: global name 'f' is not defined

显然这是一个范围问题,但是如何在我的求解函数中使用 f 呢?

4

4 回答 4

3

您正在调用fvals_sqrt()但不对返回值做任何事情,因此它们被丢弃。返回变量不会神奇地使它们存在于调用函数中。你的电话应该是这样的:

f, fp = fvals_sqrt(x0)

当然,您不需要为变量使用与return您正在调用的函数的语句中使用的相同的名称。

于 2013-05-01T21:40:40.340 回答
3

问题是您没有将函数调用的返回值存储在任何地方:

f,fp = fvals_sqrt(x0)
于 2013-05-01T21:40:56.953 回答
3

你要这个:

def solve(fvals_sqrt, x0, debug_solve=True):
    """
    Solves the sqrt function, using newtons methon.
    """
    f, fp = fvals_sqrt(x0) # Get the return values from fvals_sqrt
    x0 = x0 + (f/fp)
    print x0
于 2013-05-01T21:41:02.080 回答
1

fvals_sqrt(x0)你需要用这条线展开 , 的结果

f, fp = fvals_sqrt(x0)

在全球范围内,您应该尝试

def fvals_sqrt(x):
   """
   Return f(x) and f'(x) for applying Newton to find a square root.
   """
   f = x**2 - 4.
   fp = 2.*x
   return f, fp

def solve(x0, debug_solve=True):
   """
   Solves the sqrt function, using newtons methon.
   """
   f, fp = fvals_sqrt(x0)
   x0 = x0 + (f/fp)
   print x0

solve(3)

结果

>>> 
3.83333333333
于 2013-05-01T22:09:37.340 回答