艰苦地学习Python ex39

艰苦地学习Python ex39,python,python-2.7,Python,Python 2.7,在“艰苦学习Python()”的练习39中,定义了以下函数(get\u slot()和get()): 为什么在调用get_slot()时写入default=default 在我看来,简单地用“default”调用get\u slot()就足够了?->获取插槽(aMap、键、默认值) default=default是否与命名vs位置函数参数有关?(正如这里所讨论的:) 或者说,default=default是完全出于不同的原因完成的吗?default是函数get_slot()的“关键参数”,其默认

在“艰苦学习Python()”的练习39中,定义了以下函数(
get\u slot()
get()
):

为什么在调用get_slot()时写入
default=default

在我看来,简单地用“default”调用
get\u slot()
就足够了?-><代码>获取插槽(aMap、键、默认值)

default=default
是否与命名vs位置函数参数有关?(正如这里所讨论的:) 或者说,
default=default
是完全出于不同的原因完成的吗?

default
是函数
get_slot()
的“关键参数”,其默认值为None。 当您调用
get\u slot()
而不指定“default”时,它接受值“None”。 在上面的示例中,您将关键参数“default”设置为“default”,这是传递给函数“get”的参数,因此它接受value
None

因此,在这种特殊情况下,您是否调用:

获取插槽(aMap,钥匙)

get\u插槽(aMap,key,default=default)

但是,如果将一个不同于
None
的值传递给
get
函数,则
get\u插槽中的
default
变量将采用一个不同于
None
的值


我希望这能澄清一点。

在本例中也是如此,但通常情况下,即使在位置匹配时也使用关键字参数名称是一种好的做法(更安全)。好的,因为“default”是一个命名参数,所以在调用函数时使用关键字参数“default=”是一种好的做法?我理解正确了吗?感谢您的回答,出于某种原因,编辑我问题的人将代码从“无”更改为“1”(我已将其更改为“1”,并添加了一个指向“艰苦学习Python”示例的链接,以便人们可以现场查看代码)。这会改变你的答案吗?谢谢你的澄清。它实际上改变了答案,因为最后您的
默认值将取
None
。在函数之间传递值的方式不会改变,但是最终结果会改变。我会更新答案的!
def get_slot(aMap, key, default=None):
    """
    Returns the index, key, and value of a slot found in a bucket.
    Returns -1, key, and default (None if not set) when not found.
    """
    bucket = get_bucket(aMap, key)

    for i, kv in enumerate(bucket):
        k, v = kv
        if key == k:
            return i, k, v
    return -1, key, default

def get(aMap, key, default=None):
    """Gets the value in a bucket for the given key, or the default."""
    i, k, v = get_slot(aMap, key, default=default)
    return v