C语言中不能在函数里面嵌套定义函数,但是在MATLAB和Python中可以在函数内部定义函数,下面用实例来说明。
编写一个计算立方根的函数,由一个递推公式,给定精度,计算满足精度要求的立方根。
def rt(x):
if x == 0.0:
return 0.0
guess = x
while abs((guess**3-x) / x) >1e-6:
guess = (2.0 - guess + x /guess**2) / 3
return guess
print(rt(8))
把每一个功能封装成函数后有:
def not_enough(guess,x):
return abs((guess**3-x) / x) >1e-6
def go_on(guess,x):
return (2.0 - guess + x /guess**2) / 3
def rt(x):
if x ==0.0:
return 0.0
else:
guess = x
while not_enough(guess,x):
guess = go_on(guess,x)
return guess
print(rt(8))
这里由一个问题就是,上述not_enough()和go_on()函数都是为了rt()定义的,但是此处外部的函数也能调用这两个函数,可以将这两个函数放入rt()函数内部:
def rt(x):
def not_enough(guess, x):
return abs((guess ** 3 - x) / x) > 1e-6
def go_on(guess, x):
return (2.0 - guess + x / guess ** 2) / 3
if x ==0.0:
return 0.0
else:
guess = x
while not_enough(guess,x):
guess = go_on(guess,x)
return guess
print(rt(8))
不仅如此,内部函数可以直接访问外部定义的变量和数据,上面的代码可以改为:
def rt(x):
def not_enough():
return abs((guess ** 3 - x) / x) > 1e-6
def go_on():
return (2.0 - guess + x / guess ** 2) / 3
if x ==0.0:
return 0.0
else:
guess = x
while not_enough():
guess = go_on()
return guess
print(rt(8))
上面的内部定义的函数就没有输入参数,直接访问外部函数中的数据,并可以直接对其进行赋值操作等。