python - 这个 return 语句究竟指示程序做什么?

标签 python recursion return

这是来自 https://wiki.python.org/moin/SimplePrograms 的 8 皇后问题的递归解决方案.我很难理解 solve 函数中的 return 语句如何/为何起作用。乍一看,它似乎违反了规则(例如,解决方案在 return 语句的循环之前没有声明或赋值,但它出现在 return 语句的循环之前)但我可以成功运行它,所以我很想知道它是如何工作的,以及为什么有人可能会选择这样写(混淆?简而言之?因为我还不明白的其他限制?)

BOARD_SIZE = 8

def under_attack(col, queens):
    left = right = col

    for r, c in reversed(queens):
        left, right = left - 1, right + 1

        if c in (left, col, right):
            return True
    return False

def solve(n):
    if n == 0:
        return [[]]

    smaller_solutions = solve(n - 1)

    return [solution+[(n,i+1)]
        for i in xrange(BOARD_SIZE)
            for solution in smaller_solutions
                if not under_attack(i+1, solution)]
for answer in solve(BOARD_SIZE):
    print answer

我通过一些实验和参加的类(class)熟悉问题的递归解决方案,但我对整个 Python 还很陌生(我主要在类里面和自己使用过 Java 和 C)。

有没有人有好的方法来解释这种语法是如何工作的,或者我可以研究的其他示例可能有助于我理解它?这真的激起了我的好奇心……

最佳答案

我猜你对这行代码感到困惑:

       v---- this starts the list
return [solution+[(n,i+1)]
        for i in xrange(BOARD_SIZE)
            for solution in smaller_solutions
                if not under_attack(i+1, solution)]
                                                  ^-- this ends the list

这实际上是一个list comprehension ,一种创建列表的简便方法。

这是该循环的普通版本。

x = []
for i in xrange(BOARD_SIZE):
    for solution in smaller_solutions:
        if not under_attack(i+1, solution):
            x.append(solution+[(n, i+1)])
return x

关于python - 这个 return 语句究竟指示程序做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18975935/

相关文章:

Python:如何更改 smtp/MIME 脚本中的 "to"字段而不是添加新字段?

python - Django 更新整个对象(行)

python - TensorFlow:有没有办法测量模型的 FLOPS?

javascript - 遍历我的主目录时出现 EPERM 错误的原因是什么?

在循环 R 中迭代时从函数返回值

python - sklearn DecisionTreeClassifier 中 min_samples_split 和 min_samples_leaf 的区别

javascript - 如何在 JavaScript 对象循环内递归聚合值?

java - 简单递归到迭代

java - 如何返回字符串中的数字循环? [Java]

string - JNI程序中的jstring返回