python - 下划线 _ 作为 Python 中的变量名

标签 python variables naming-conventions metasyntactic-variable

Peter Norvig 有一篇文章描述了 program to solve sudoku puzzles ,即使是最难的,通过结合确定性逻辑操作和可能的解决方案的智能遍历。后者是递归完成的;这是那个函数(source):

def search(values):
    "Using depth-first search and propagation, try all possible values."
    if values is False:
        return False ## Failed earlier
    if all( len( values[s]) == 1 for s in squares): 
        return values ## Solved!
    ## Chose the unfilled square s with the fewest possibilities
    _,s = min( (len( values[s]), s) 
                for s in squares 
                if len(values[s]) > 1
            )
    return some( search( assign( values.copy(), s, d)) 
                for d in values[s]
            )

(为了我的眼睛,我添加了一些空格、CR 和制表符;向 Norvig 博士道歉。)

评论正下方有一行以“_,s”开头。这似乎是具有 s 最小值的解包元组 (len(values[s]),s)。 Norvig 博士使用“_”作为变量名只是为了表明它是“无关紧要”的结果,还是发生了其他事情?是否有时建议将“_”作为变量名?在交互模式下,“_”保存上一个操作的答案;非交互代码中是否有类似的功能?

更新

感谢您的好答案。我想答案是亚历克斯·马泰利(Alex Martelli)的“增值”;他指出,“_, vbl_of_interest”习语通常是 DSU 习语的副作用,而这本身在很大程度上是不必要的。

最佳答案

是的,_ 是“无关紧要”的传统名称(不幸的是,这与它在 I18N 中的使用相冲突,但这是一个单独的问题;-)。顺便说一句,在今天的 Python 中,而不是:

_,s = min( (len( values[s]), s) 
            for s in squares 
            if len(values[s]) > 1
        )

你可以编码

s = min((s for s in squares if len(values[s])>1), 
        key=lambda s: len(values[s]))

(不确定彼得写的是什么版本的 Python,但他使用的成语是“装饰-排序-不装饰”的一个例子 [[DSU]] 除了用 min 代替 sort,而在今天的 Python 中 key= 可选参数通常是做 DSU 的最佳方式;-)。

关于python - 下划线 _ 作为 Python 中的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739514/

相关文章:

python - 在 Python 3.x 中聚合没有嵌套循环的嵌套列表

postgresql - 在 PL/pgSQL 函数中使用变量

c# - 模板方法模式的这个示例是否有标准命名约定?

java - 我应该遵循 Java 包的命名约定吗?

python - 无需凭据即可使用 Python Google Storage 客户端

python - 管道输入错误 "Input Contains NaN"

java - 变量的保存/分配/设置错误

c++ - 在 C++ 中实例化一个新对象

php - 使用 extract($variables) 获取内容,但变量未定义

python - 从excel中提取多个表