从另一个函数访问函数内部的变量

时间:2017-02-11 23:34:01

标签: python

我的函数AB有1个参数,AB有一堆循环,我有一个计数器跟踪它循环的数量。它(必须)返回一个真或假的答案。

我有一个名为AC的第二个函数,它调用了2个AB实例,并为参数添加了不同的东西,并将它们比作它们

if (AB(option1) == True and AB(option2) == False):
     result = "Option1 Wins"
elif (AB(option1) == False and AB(option2) == True):
     result = "Option2 Wins"
if (AB(option1) == True and AB(option2) == True):
     result = ??

但是如果两个案例都是'True',我需要知道哪个案例首先达到'True',所以这意味着我需要知道它循环了多少次(我需要知道计数器变量的值)< / p>

如何访问变量?

我正在考虑使用辅助功能来访问它,但我不确定这是否可能/如何做到

4 个答案:

答案 0 :(得分:2)

您可以从python中的函数返回多个值:

def AB(param):
   return True, 1

val = AB(1) # it will be (True,1), so it's a set
val, val1 = AB(2) # val = True, val1 = 1

所以在你的代码中你应该检查AB(param)[0]以检查True,如果你只想保留一个返回值(你应该在不同的变量中得到它们)。

但是你的代码是错误的,因为每次检查输出时都会调用AB(),这将执行所有循环,最终可能会为同一输入带来意外的响应。您应该先为每个参数获取AB()的输出,然后在if块中检查它们。

答案 1 :(得分:0)

零评估为False,非零评估为True

如果AB失败,则返回0,否则返回循环量:

def AB(param):
    if failed:
        return 0
    else:
        return counter

用法:

if AB(option1) and not AB(option2):
    result = "Option1 Wins"
elif not AB(option1) and AB(option2):
    result = "Option2 Wins"
elif AB(option1) < AB(option2):
    result = "Option1 Wins"
else:
    result = "Option2 Wins"

答案 2 :(得分:0)

OOP解决方案:使用此方法作为成员函数创建一个类,并将计数器变量创建为成员变量。现在,您可以从任何位置检查该类的任何对象的值。

同样在您的代码中,无需多次调用AB

o1 = AB(option1)
o2 = AB(option2)
if o1 and not o2:
     result = "Option1 Wins"
elif not o1 and o2):
     result = "Option2 Wins"
elif o1 and o2:
     result = ??

面向对象的解决方案可能如下所示(代码未经过测试)

class solver(object, option):
    reached = 0
    option = option
    status = False

    def AB(self):
        # implementation. use self.option and update self.reached and self.status

opt1 = solver(option1)
opt2 = solver(option2)
o1 = opt1.AB()
o2 = opt2.AB()

if o1.status and not o2.status:
     result = "Option1 Wins"
elif not o1.status and o2.status):
     result = "Option2 Wins"
elif o1 and o2:
     if o1.reached < o2.reached:
         # o1 reached first

答案 3 :(得分:-1)

您可以使用全局变量来存储计数器的值。有关详细信息,请参阅http://www.diveintopython.net/html_processing/locals_and_globals.html