[英]Accessing the variable of a function within a function
假设我有一个来自用户输入的积分的下限值和上限值。 我先要求下限,然后再检查其有效性。 然后为了比较我的上限和我的下限,我做了一个嵌套函数,这样我也可以要求用户输入上限,检查其有效性并确保我的上限大于我的下限(因为您知道集成),并显示以下代码。
def LowLimCheck():
while True:
try:
a = float(input("Please enter the lower limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
print("You have chosen the lower limit: ", a)
def UppLimCheck():
b = -1
while b <= a:
while True:
try:
b = float(input("Please enter the upper limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
if b <= a:
print("The upper limit must be bigger than the lower limit!")
print("You have chosen the upper limit: ", b)
return b
UppLimCheck()
return a
现在一切正常,直到我真正需要使用值a和b,因为我需要将这些值放入已设置的整数中。 它基本上是由辛普森法则构成的一个一般积分,现在不容易理解。 所以我将函数定义为:
def simpsonsRule(func, a, b, N):
<insert code here>
<insert code here>
return d
好的,所以我的函数基本上允许用户插入任意函数,即上限(a),下限(b)和N(辛普森法则中的条带数),并吐出d,该值是对任意积分的求值按照辛普森规则在上面起作用。 我现在的问题是,当我尝试打印答案时,我可以将变量a取出并放入整数中,但是由于变量b在函数中,所以我无法取出它! 例如,如果我现在打印积分值(例如,在sin(x)和N = 20的情况下)
print(simpsonsRule(lambda x:np.sin(x), a, b, 20)
因此,我知道a和b值在它们自己的函数中是局部的。 现在对于a的值,我可以轻松地做到这一点以获得a的值
k = 0 #initialising the variable
k = LowLimCheck()
print(simpsonsRule(lambda x:np.sin(x), k, b, 20)
因为既然k调用LowLimCheck(),它返回我可以放入函数中的a的值。 但是,如何获取嵌套在第一个函数中的b的值? 我想基本使用b。 有办法解决吗?
对于冗长的问题表示歉意,并在此先感谢您!
您可以从LowLimCheck()返回一个元组:
def LowLimCheck():
...
b = UppLimCheck()
return (a,b)
然后在调用LowLimCheck()时解压缩它们
a, b = LowLimCheck()
更新:
在您问题的最直接答案中, LowLimCheck()
变为:
def LowLimCheck():
while True:
try:
a = float(input("Please enter the lower limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
print("You have chosen the lower limit: ", a)
def UppLimCheck():
b = -1
while b <= a:
while True:
try:
b = float(input("Please enter the upper limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
if b <= a:
print("The upper limit must be bigger than the lower limit!")
print("You have chosen the upper limit: ", b)
return b
b = UppLimCheck() # Storing the b
return (a,b) # Passing b out with a in a tuple
然后打电话
a, b = LowLimCheck()
最后,
print(simpsonsRule(lambda x:np.sin(x), a, b, 20)
替代解决方案 (如原始注释中所述,进行了更多实质性更改,但代码结构更好;更平坦,更易读,更少考虑范围):
def LowLimCheck():
while True:
try:
a = float(input("Please enter the lower limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
print("You have chosen the lower limit: ", a)
return a
def UppLimCheck(a):
b = -1
while b <= a:
while True:
try:
b = float(input("Please enter the upper limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
if b <= a:
print("The upper limit must be bigger than the lower limit!")
print("You have chosen the upper limit: ", b)
return b
然后:
lowLim = LowLimCheck()
upLim = UppLimCheck(lowLim) # pass in lowLim as an argument
print(simpsonsRule(lambda x:np.sin(x), lowLim, upLim, 20)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.