函数参数的默认值[异常]

时间:2016-03-03 03:00:23

标签: python python-2.7 python-3.x

我遇到了一些我不太了解def函数中的参数如何工作的东西:

即:

def test(a=1, b=9, c='what'):
    return a

test(a,b,c)

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-295-937fe43dbbd5> in <module>()
      2     return a
      3 
----> 4 test(a,b,c)

NameError: name 'a' is not defined

def test(a=1, b=9, c='what'):
    return a

test('what')

Output: 'what'

好吧,我希望将参数a,b设置为默认值。现在,对于第一个例子,如果我调用test(a,b,c),则表示a未定义。但是,我已经定义了#34;它在函数参数?这意味着,如果让我们说a,b和c是默认参数,我就不能执行test(a,b,c)?只有test()有效吗? WHAT!

在示例2中,我甚至不知道......

1 个答案:

答案 0 :(得分:2)

问题在于您尝试使用在运行该方法的全局范围中不存在的三个变量来调用方法测试。

您定义方法的方式:

def test(a=1, b=1, c=1)

并不意味着参数a, b, c可以全局使用,就像您尝试使用它们一样。

通过将方法定义为a=1, b=1, c=1,您可以为参数设置默认值。这意味着,您可以使用或不将参数传递给您的方法来调用您的方法。

因此,对于您的第一个示例,您可以这样称呼它:

test(a="what")

这表明您现在正在为a分配“内容”,并且不再保留其默认值“1”。

或者,您可以简单地调用它而不使用任何参数,这反过来会将默认值分配给方法中的本地参数。所以,如果你真的这样称呼你的方法:

test()

然后,默认值“1”现在将分配给“a”。

在第二个示例中,您传递的是字符串,默认情况下,您的参数从函数定义的左侧到右侧分配。所以,当你这样做时:

test("what")

您正在为a分配“内容”。