函数中的参数

Arguments in a function

我了解到在定义一个函数的时候,可以提供一个参数,像这样:

def func(lst):
    # code 

我还了解到,当您定义一个函数时,您可以使用 *args 语法提供多个参数,如下所示:

def func(*lst):
    # code

我有一个问题,我必须定义一个函数来对列表进行排序并删除所有重复项。

这是我所做的:

def func(lst):
    return sorted(set(lst))

我做这道练习题的网站 (edabit.com) 测试了我的代码,像这样:

Test.assert_equals(func([1, 3, 3, 5, 5]), [1, 3, 5])

测试运行成功,我的代码是正确的。但这就是我感到困惑的地方,测试提供了多个参数(1、3、3、5、5),我没有使用 *args 语法,但不知何故它 运行 成功了。

它不是应该给我一个错误,说类似 func() 的东西正好需要 1 个参数(给定 5 个)吗?

当我提供 *args 语法时,它告诉我 TypeError: unhashable type:'list'

我猜这可能是因为测试没有调用函数,而是使用了 assert 关键字。我的猜测是否正确?

您传入了一个数字列表,这是一个参数:

func([1, 3, 3, 5, 5])

对比

func(1, 3, 3, 5, 5)

不,你给出了一个列表类型的参数。如果你有 a = [1,2,3,4] 你有一个清单 呼唤 f(a)f([1, 2,3,4])是一样的 注意 [ 括号。 但是,如果您过于调用 f(1, 2,3,4),那将是一个错误。

另外:assert 关键字仍然调用该函数。它无法不调用它,因为它已作为表达式放入。 如果你调用 f(g(5)) 然后 f 已经用 g 的结果调用,而不是函数调用本身。

看起来他们只向您的函数传递了一个参数。

Test.assert_equals(func([1, 3, 3, 5, 5]), [1, 3, 5]))

数组 [1, 3, 3, 5, 5] 作为单个参数传递给 func(),然后数组 [1, 3, 5] 作为第二个参数传递给 assert_equals()