Python 理解断言方法



我是python中的新事物。我从上个月开始学习它。我找到了一个名为 exercism.io 的网站,并开始在那里做一些练习。我已经停在第二个。你可以在那里找到一些"断言的类",看起来像:

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,因为您没有将任何默认值应用于函数上的参数name

def two_fer(name=None):
if name:
return f'One for {name}, one for me.'
elif not name:
return "One for you, one for me."

断言显示:

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

没有向two_fer()提供参数,因为偏执是空的。

但是您定义了two_fer需要与以下人员进行争论:

def two_fer(name):
...

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

相关内容

  • 没有找到相关文章

最新更新