【发布时间】:2013-03-05 12:07:09
【问题描述】:
我阅读并理解了other question中描述的整篇文章。
我的问题是关于这个source code。
作者在函数assign中返回值:
def assign(values, s, d):
"""Eliminate all the other values (except d) from values[s] and propagate.
Return values, except return False if a contradiction is detected."""
other_values = values[s].replace(d, '')
if all(eliminate(values, s, d2) for d2 in other_values):
return values
else:
return False
但在调用函数 parse_grid(grid) 时,从来没有使用 assign 设置现有变量值:
def parse_grid(grid):
values = dict((s, digits) for s in squares)
for s,d in grid_values(grid).items():
if d in digits and not assign(values, s, d):
return False ## (Fail if we can't assign d to square s.)
return values
所以返回值对我来说似乎是不必要的。由于他只使用 assign() 作为布尔值,他不能只返回 true 吗?
我知道返回一个值不会改变原始变量的任何内容。只有当变量作为参数传递并在那里更改而不反弹到另一个变量时,“原始”变量才会更改,因为它拥有相同的引用。
但是def parse_grid(grid 中的return values) 应该是一个完全改变的值,然后是函数开头的那个。什么时候分配?
问题:
def parse_grid(grid) 中的values 在哪里更改?因为这个函数返回值,这个返回值不应该和这个函数开始时设置的相同。那么它是在哪里改变的,又是如何改变的呢?
例如这样调用:display(parse_grid(grid2))
【问题讨论】:
标签: python variables return variable-assignment