下划线_作为Python中的variables名

彼得·诺维格(Peter Norvig)撰写了一篇文章,描述了通过结合确定性逻辑运算和智能遍历可能解决scheme来解决数独谜题 (甚至是最困难的问题)的程序 。 后者是recursion地完成的; 这里是该函数( 来源 ):

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 ”开始的行。 这似乎是解压缩的元组( len(values[s]),s )和len(values[s]),s的最小值。 Norvig医生是否使用“ _ ”作为variables名称来表示这是一个“不关心”的结果,或者是其他的事情呢? 有时候推荐使用“ _ ”作为variables名吗? 在交互模式下,“ _ ”表示前面操作的答案; 在非交互式代码中有没有类似的function?

更新

感谢您的好答案。 我想这个答案是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])) 

(不确定Peter写了什么版本的Python,但是他使用的是“装饰sortingundecorate”[[DSU]]的例子,除了min,而不是sorting,在今天的Python中, key= optional参数是一般是做DSU的最好方法;-)。

你是对的。 在非交互模式下_没有特别的意义。 事实上,诺维希只是想expression他不关心这个variables的价值。

Offtopic:Norvig的那篇文章非常好。 build议阅读。

你的解释是正确的。 在交互模式_之外的特殊意义之外,只是用作“不关心”的variables名,特别是在解包时。