如何调用多个退货之一?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调用多个退货之一?相关的知识,希望对你有一定的参考价值。

def sudoku_solver(sudoku):
    l = [0, 0]
    if not find_empty_location(sudoku, l):
        return True
    row = l[0]
    col = l[1]
    for num in range(1, 10):
        if check_location_is_safe(sudoku, row, col, num):
            sudoku[row][col] = num
            if sudoku_solver(sudoku):
                return  True,sudoku            
            sudoku[row][col] = 0
    return False

def P():
    a = np.zeros((9,9))
    if sudoku_solver(sudoku):
        a = sudoku_solver(sudoku)[1]
    else:
        a = 1
    return a

有两个回报,Truesudoku。我怎样才能在函数P中调用sudoku?当我运行P()函数时,它将显示'bool' object is not subscriptable

答案

您可以使函数返回单个值,该值可以是None或数独数据。

Python将None视为false,因此您的条件可能是:

...
if sudoku_solver(sudoku):
   a = sudoku_solver(sudoku)
   ...

请注意,如果sudoku_solver()是一个复杂且耗时的函数,您将需要在测试条件之前将其结果放在变量中,以便它不会执行两次(如上述条件中的情况)

...
a = sudoku_solver(sudoku)
if a:
   ...

另一种选择是系统地返回带有布尔值和数据数据(或无)的元组。

您的退货声明必须更改为return True,sudokureturn False,None

那你的条件可以直接使用索引:

...
if sudoku_solver(sudoku)[0]:
   a = sudoku_solver(sudoku)[1]
   ...

但同样,你可能不想两次执行该函数:

...
ok,a = sudoku_solver(sudoku)
if ok :
   ...

另一件事是,如果你将sudoku作为参数传递,你必须意识到你的函数将修改调用变量的内容,即使它返回False。这可能不是你想要的,但如果是,那么返回第二个值是没有意义的,因为调用者的sudoku变量实例已经被修改并且可用。

另一答案

当你看到

return  True,sudoku

你可以像这样捕获返回的值

result, sudoku = my_function()

或者如果你对结果没兴趣

_, sudoku = my_function()

- -编辑 - -

看来你的问题围绕两个回报。亦即

return True,sudoku

return False

这增加了不必要的复杂性。我可以建议你简化使用

return sudoku

然后是

return None

这意味着您可以像这样检查返回的值

sudoku = my_function()
if (sudoku):
    // Do something here
else:
    // Do something else
另一答案

您不能从函数返回多个对象,但可以返回包含多个成员对象的容器对象,例如列表或元组。尝试使用

return [ True, sudoku ]

以上是关于如何调用多个退货之一?的主要内容,如果未能解决你的问题,请参考以下文章

如何一个接一个地打开同一片段但具有不同数据的多个实例?

在不存在的片段上调用片段生命周期和 onCreate 的问题

如何正确地将多个片段添加到片段过渡?

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

如何测量代码片段的调用次数和经过时间

如何从片段中调用 getSupportFragmentManager()?