Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python |返回变量_Python_Variables_Return_Variable Assignment - Fatal编程技术网

Python |返回变量

Python |返回变量,python,variables,return,variable-assignment,Python,Variables,Return,Variable Assignment,我阅读并理解中描述的整篇文章 我的问题是关于这个 作者在函数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].

我阅读并理解中描述的整篇文章

我的问题是关于这个

作者在函数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从未用于设置现有变量值:

因此,对我来说,返回值似乎没有必要。既然他只使用assign()作为布尔值,他就不能返回true吗

我知道返回一个值不会改变原始变量的任何内容。只有当变量作为参数传递并在那里更改而没有返回到另一个变量时,“原始”变量才会更改,因为它持有相同的引用

但是
def parse_grid(grid
)中的
返回值应该是一个完全更改的值,而不是函数开始时的值。这是什么时候分配的

问题:

def parse_grid(grid
)中的
值在哪里更改?因为此函数返回值,并且此返回值不应与此函数开始时设置的值相同。那么它是在哪里改变的,又是如何改变的呢


例如,它被这样调用:
display(parse_grid(grid2))
赋值函数被多次调用。例如,在搜索功能中:

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
    n,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])
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的返回值传递到搜索中,以继续深度优先搜索。

多次调用assign函数。例如,在搜索功能中:

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
    n,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])
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的返回值被传递到search中,以继续深度优先搜索。

让我们看看这个函数:

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
    n,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])
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

在此函数返回一个新的
dict
。它返回它,以便调用者可以使用它做一些事情。函数不返回
True
,因为调用方希望获取并使用新的
dict

让我们看看这个函数:

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
    n,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])
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

在此函数返回一个新的
dict
。它返回它,以便调用者可以使用它做一些事情。函数不返回
True
,因为调用者希望获得并使用新的
dict

在您显示的代码中,assign似乎未充分使用。您是对的:它只用于检查值的有效性(无矛盾测试)。 所以,正如你所说,返回true就可以了

但是既然分配可以做得更多,为什么要削弱它呢?它可能在代码的其他地方有用



编辑:事实上是这样。查看链接的代码,函数
search
调用它并使用返回值。

在您显示的代码中,assign似乎未充分使用。您是对的:它只用于检查值的有效性(无矛盾测试)。 所以,正如你所说,返回true就可以了

但是既然分配可以做得更多,为什么要削弱它呢?它可能在代码的其他地方有用



编辑:事实上是这样。查看链接的代码,函数
search
调用它并使用返回值。

但它应该返回一个更改的dict。此方法中的值在哪里更改了?它不返回更改的dict。它返回一个全新的dict。通过调用
dict()创建
constructor。那么,他如何获得一个完全解决的数独显示(parse_grid(grid2))呢?I虽然values=dict((s,数字)表示正方形中的s)以一个数独开始,其中提到了所有正方形的所有可能性。然后他执行赋值函数,pof,在parse_grid()中,他返回一个数独解出的值?!呃,我不知道。这个问题会演变成解释所有这些代码吗?现在,就这一部分。。这个函数必须发生变化,不是吗?如何设置其他值?我不是问它是如何工作的,只是想了解parse_grid()中的值在哪里被更改,以便他返回不同的值。。对于我来说,我不擅长解释>,但它应该返回一个更改的dict。这个方法中的值在哪里更改了?它不返回更改的dict。它返回一个全新的dict。它是通过调用
dict()
构造函数创建的。但是,他如何得到一个带显示的完全解决的数独(解析网格(grid2))?I虽然values=dict((s,数字)表示正方形中的s)以一个数独开始,其中提到了所有正方形的所有可能性。然后他执行赋值函数,pof,在parse_grid()中,他返回一个数独解出的值?!呃,我不知道。这个问题会演变成解释所有这些代码吗?现在,就这一部分。。这个函数必须发生变化,不是吗?如何设置其他值?我不是问它是如何工作的,只是想了解parse_grid()中的值在哪里被更改,以便他返回不同的值。。SRY对于我的任何不明确之处,我不擅长解释>Ok,但是def parse_grid(grid)中的值是在哪里更改的呢?因为他没有先使用search()来测试它。他得到了一个完全改变了的值(解决了数独问题)。好吧,但在def parse_网格(网格)中,值在哪里改变了呢?因为他没有先使用search()来测试它。他得到了一个完全改变了的价值观(解决了数独问题)。