下划线_作为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名,特别是在解包时。