如何使用jupyter notebook,jupyter notebook做笔记

  如何使用jupyter notebook,jupyter notebook做笔记

  使用Jupyter和PyHamcrest,您可以通过将它们与少量测试代码连接起来,教授任何适合单元测试的Python内容。

  Python视频教程专栏为您详细介绍~

  Ruby社区的一些东西一直给我留下深刻的印象,其中两个是对测试的承诺和对易用性的强调。这两个方面最好的例子就是Ruby Koans,你可以通过修复测试来学习Ruby。

  如果我们能把这些神奇的工具应用到Python中,我们应该能做得更好。没错,用Jupyter笔记本和PyHamcrest,再加上一点类似胶带的粘合代码,我们就可以做一个教程,里面包括教学、工作代码和需要修复的代码。

  首先,我们需要一些“胶带”。通常情况下,你会使用一些漂亮的命令行测试器进行测试,比如pytest或者virtue。通常,你甚至不会直接运行它。你用tox或nox之类的工具来运行它。然而,对于Jupyter,您需要编写一个简短的glue代码,在其中您可以直接运行测试。

  幸运的是,这段代码简短而简单:

  导入单元测试

  定义运行测试(klass):

  suite=unittest。TestLoader()。loadTestsFromTestCase(klass)

  单元测试。TextTestRunner(verbosity=2)。运行(套件)

  现在返回klass副本代码,设备准备好进行第一次练习。

  在教学中,从一个简单的练习中建立自信总是一个好主意。

  所以,让我们做一个非常简单的测试:

  @运行_测试

  类TestNumbers(unittest。测试用例):

  定义测试_等式(自身):

  Expected_value=3 #只更改这一行

  自我。assert equal (1 1,expected _ value)复制代码test _ equality (_ _ main _ _。测试编号).失败

  ======================================================================

  fail : test _ equality(_ _ main _ _)。测试编号)

  -

  回溯(最近呼叫):

  文件 ipython-input-7-5ebe25bc00f3 ,第6行,在test_equality中

  self.assertEqual(1 1,expected_value)

  AssertionError: 2!=3

  -

  在0.002秒内运行1次测试

  失败(failures=1)复制代码“只修改这一行”对学生来说是一个有用的标记。它准确地显示了需要修改的内容。否则,学生可以通过将第一行改为return来修复测试。

  在这种情况下,修复很容易:

  @运行_测试

  类TestNumbers(unittest。测试用例):

  定义测试_等式(自身):

  Expected_value=2 #修复的代码行

  Self.assertequal (1 1,expected _ value)复制代码test _ equality (_ _ main _ _。测试编号).好的

  -

  在0.002秒内运行1次测试

  好的,复制代码。但是,很快,unittest库的本机断言将被证明是不够的。在pytest中,通过重写

  >assert 中的字节码来解决这个问题,使其具有神奇的属性和各种启发式方法。但这在 Jupyter notebook 中就不容易实现了。是时候挖出一个好的断言库了:PyHamcrest。

  

from hamcrest import *

  @run_test

  class TestList(unittest.TestCase):

   def test_equality(self):

   things = [1,

   5, # 只改这一行

   3]

   assert_that(things, has_items(1, 2, 3))复制代码

 test_equality (__main__.TestList) ... FAIL

   ======================================================================

   FAIL: test_equality (__main__.TestList)

   ----------------------------------------------------------------------

   Traceback (most recent call last):

   File "<ipython-input-11-96c91225ee7d>", line 8, in test_equality

   assert_that(things, has_items(1, 2, 3))

   AssertionError:

   Expected: (a sequence containing <1> and a sequence containing <2> and a sequence containing <3>)

   but: a sequence containing <2> was <[1, 5, 3]>

   ----------------------------------------------------------------------

   Ran 1 test in 0.004s

   FAILED (failures=1)复制代码

PyHamcrest 不仅擅长灵活的断言,它还擅长清晰的错误信息。正因为如此,问题就显而易见了。[1, 5, 3] 不包含 2,而且看起来很丑:

  

@run_test

  class TestList(unittest.TestCase):

   def test_equality(self):

   things = [1,

   2, # 改完的行

   3]

   assert_that(things, has_items(1, 2, 3))复制代码

 test_equality (__main__.TestList) ... ok

   ----------------------------------------------------------------------

   Ran 1 test in 0.001s

   OK复制代码

使用 Jupyter、PyHamcrest 和一点测试的粘合代码,你可以教授任何适用于单元测试的 Python 主题。

  例如,下面可以帮助展示 Python 从字符串中去掉空白的不同方法之间的差异。

  

source_string = " hello world "

  @run_test

  class TestList(unittest.TestCase):

   # 这是个赠品:它可以工作!

   def test_complete_strip(self):

   result = source_string.strip()

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world")))

   def test_start_strip(self):

   result = source_string # 只改这一行

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world ")))

   def test_end_strip(self):

   result = source_string # 只改这一行

   assert_that(result,

   all_of(starts_with(" hello"), ends_with("world")))复制代码

 test_complete_strip (__main__.TestList) ... ok

   test_end_strip (__main__.TestList) ... FAIL

   test_start_strip (__main__.TestList) ... FAIL

   ======================================================================

   FAIL: test_end_strip (__main__.TestList)

   ----------------------------------------------------------------------

   Traceback (most recent call last):

   File "<ipython-input-16-3db7465bd5bf>", line 19, in test_end_strip

   assert_that(result,

   AssertionError:

   Expected: (a string starting with ' hello' and a string ending with 'world')

   but: a string ending with 'world' was ' hello world '

   ======================================================================

   FAIL: test_start_strip (__main__.TestList)

   ----------------------------------------------------------------------

   Traceback (most recent call last):

   File "<ipython-input-16-3db7465bd5bf>", line 14, in test_start_strip

   assert_that(result,

   AssertionError:

   Expected: (a string starting with 'hello' and a string ending with 'world ')

   but: a string starting with 'hello' was ' hello world '

   ----------------------------------------------------------------------

   Ran 3 tests in 0.006s

   FAILED (failures=2)复制代码

理想情况下,学生们会意识到 .lstrip().rstrip() 这两个方法可以满足他们的需要。但如果他们不这样做,而是试图到处使用 .strip() 的话:

  

source_string = " hello world "

  @run_test

  class TestList(unittest.TestCase):

   # 这是个赠品:它可以工作!

   def test_complete_strip(self):

   result = source_string.strip()

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world")))

   def test_start_strip(self):

   result = source_string.strip() # 改完的行

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world ")))

   def test_end_strip(self):

   result = source_string.strip() # 改完的行

   assert_that(result,

   all_of(starts_with(" hello"), ends_with("world")))复制代码

 test_complete_strip (__main__.TestList) ... ok

   test_end_strip (__main__.TestList) ... FAIL

   test_start_strip (__main__.TestList) ... FAIL

   ======================================================================

   FAIL: test_end_strip (__main__.TestList)

   ----------------------------------------------------------------------

   Traceback (most recent call last):

   File "<ipython-input-17-6f9cfa1a997f>", line 19, in test_end_strip

   assert_that(result,

   AssertionError:

   Expected: (a string starting with ' hello' and a string ending with 'world')

   but: a string starting with ' hello' was 'hello world'

   ======================================================================

   FAIL: test_start_strip (__main__.TestList)

   ----------------------------------------------------------------------

   Traceback (most recent call last):

   File "<ipython-input-17-6f9cfa1a997f>", line 14, in test_start_strip

   assert_that(result,

   AssertionError:

   Expected: (a string starting with 'hello' and a string ending with 'world ')

   but: a string ending with 'world ' was 'hello world'

   ----------------------------------------------------------------------

   Ran 3 tests in 0.007s

   FAILED (failures=2)复制代码

他们会得到一个不同的错误信息,显示去除了过多的空白:

  

source_string = " hello world "

  @run_test

  class TestList(unittest.TestCase):

   # 这是个赠品:它可以工作!

   def test_complete_strip(self):

   result = source_string.strip()

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world")))

   def test_start_strip(self):

   result = source_string.lstrip() # Fixed this line

   assert_that(result,

   all_of(starts_with("hello"), ends_with("world ")))

   def test_end_strip(self):

   result = source_string.rstrip() # Fixed this line

   assert_that(result,

   all_of(starts_with(" hello"), ends_with("world")))复制代码

 test_complete_strip (__main__.TestList) ... ok

   test_end_strip (__main__.TestList) ... ok

   test_start_strip (__main__.TestList) ... ok

   ----------------------------------------------------------------------

   Ran 3 tests in 0.005s

   OK复制代码

在一个比较真实的教程中,会有更多的例子和更多的解释。这种使用 Jupyter Notebook 的技巧,有的例子可以用,有的例子需要修正,可以用于实时教学,可以用于视频课,甚至,可以用更多的其它零散用途,让学生自己完成一个教程。

  现在就去分享你的知识吧!

  

更多相关免费学习推荐:python视频教程

  

以上就是使用Jupyter Notebook 学习 Python的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: