是否可以调用需要参数的函数,而无需该参数?在python

时间:2019-02-21 19:56:49

标签: python python-3.x error-handling conditional

我正在学习使用Exercism在Python 3.x上进行编码。我必须编写条件代码(在辅助文件上)以根据主要函数发送的单词返回字符串:

用户功能:

def two_fer(name):
    if name:
        string = "One for " + name + ", one for me."
    else:
        string = "One for you, one for me."
    return string

主要功能:

class TwoFerTest(unittest.TestCase):
    def test_no_name_given(self):
        self.assertEqual(two_fer(), 'One for you, one for me.')

    def test_a_name_given(self):
        self.assertEqual(two_fer("Alice"), "One for Alice, one for me.")

    def test_another_name_given(self):
        self.assertEqual(two_fer("Bob"), "One for Bob, one for me.")

问题是,对于主函数中的第一个条件,它会无条件调用two_fer(),这会导致失败。

应该不修改主功能,仅通过用户功能可以解决问题吗?

谢谢。

4 个答案:

答案 0 :(得分:2)

您可以更改:

def two_fer(name):

收件人:

def two_fer(name=None):

默认情况下将其命名为None

答案 1 :(得分:1)

如果为name提供默认值"you",则可以在没有显式参数的情况下调用函数,并且完全摆脱if语句。

def two_fer(name="you"):
    return "One for " + name + ", one for me"

或更妙的是,

def two_fer(name="you"):
    return "One for {}, one for me".format(name)

答案 2 :(得分:0)

您可以使用默认参数,即None(无),并检查函数是否接收到任何参数。

用户功能:

def two_fer(name = None):
    if name != None:
        string = "One for " + name + ", one for me."
    else:
        string = "One for you, one for me."
    return string

如果在没有任何参数的情况下调用two_fer方法,则以上代码将执行else部分。

答案 3 :(得分:0)

使用如下所示的默认参数

def two_fer(name=None):
    if name:
        s = "One for " + name + ", one for me."
    else:
        s = "One for you, one for me."
return s

还有一个提示,请避免将变量名分配为关键字,例如就您而言,它是一个标准库,因此最好避免使用它。