Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Assert - Fatal编程技术网

Python理解断言方法

Python理解断言方法,python,python-3.x,assert,Python,Python 3.x,Assert,我是python新手。我从上个月就开始学了。我找到了一个名为exercism.io的网站,并开始在那里做一些练习。我在第二个一站停了下来。您可以找到一些“assert's class”,如下所示: class TwoFerTest(unittest.TestCase): def test_no_name_given(self): self.assertEqual(two_fer(), "One for you, one for me.") def test_a_

我是python新手。我从上个月就开始学了。我找到了一个名为exercism.io的网站,并开始在那里做一些练习。我在第二个一站停了下来。您可以找到一些“assert's class”,如下所示:

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.")
主代码应该由我来完成。我应该做的好功能是:

def two_fer(name):
    if name:
        return f'One for {name}, one for me.'
    elif not name:
        return "One for you, one for me."
问题是:为什么我不能这样做:

if not name:
        return "One for you, one for me."
elif name:
    return f'One for {name}, one for me.'
对我来说是一样的,但这种方法让我大吃一惊:

def test_no_name_given(self):
    self.assertEqual(two_fer(), "One for you, one for me.")

 self.assertEqual(two_fer(), "One for you, one for me.")
TypeError: two_fer() missing 1 required positional argument: 'name'

苏蒙能解释一下原因吗?我理解这个错误,但我不明白为什么。对我来说,我的第二个def函数与第一个相同。

您收到一个TypeError,因为您没有对函数的paramater
名称应用任何默认值:

def two\u fer(name=None):
如果名称:
返回f'One代表{name},One代表我。'
elif非名称:
return“一个给你,一个给我”
断言向您显示:

self.assertEqual(两个,一个给你,一个给我)
没有提供给
two\u fer()
的参数,因为该参数为空

但是您定义了
two\u fer
需要有一个参数:

def二者(名称):
...

由于您没有为
name
提供任何默认值,解释器会告诉您,如果调用了assert,则缺少一个参数。

我认为两者都不起作用,但函数头必须是
def two\fer(name=None):
。只有这样,调用时才能忽略参数。否则,必须显式传递
None
(或至少非truthy)值:
two\u fer(None)
two\u fer(“”)
。我将进一步了解您编写的内容。因为现在我没有使用像name=none这样的东西,老实说,我不知道它是如何工作的。无论如何,我的第一个def函数运行良好,已提交给exercism。谢谢!!现在我明白了!