重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

怎么用JupyterNotebook教Python

本篇内容主要讲解“怎么用Jupyter Notebook教Python”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Jupyter Notebook教Python”吧!

创新互联公司"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联公司具备承接各种类型的成都网站制作、成都做网站项目的能力。经过10余年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

首先,需要一些“胶布”。通常,你会使用一些漂亮的命令行测试器来做测试,比如 pytest 或 virtue。通常,你甚至不会直接运行它。你使用像 tox 或 nox 这样的工具来运行它。然而,对于 Jupyter 来说,你需要写一小段粘合代码,可以直接在其中运行测试。

幸运的是,这个代码又短又简单:

import unittest def run_test(klass):    suite = unittest.TestLoader().loadTestsFromTestCase(klass)    unittest.TextTestRunner(verbosity=2).run(suite)    return klass

现在,装备已经就绪,可以进行第一次练习了。

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

那么,让我们来修复一个非常简单的测试:

@run_testclass TestNumbers(unittest.TestCase):       def test_equality(self):        expected_value = 3 # 只改这一行        self.assertEqual(1+1, expected_value)
    test_equality (__main__.TestNumbers) ... FAIL       ======================================================================    FAIL: test_equality (__main__.TestNumbers)    ----------------------------------------------------------------------    Traceback (most recent call last):      File "", line 6, in test_equality        self.assertEqual(1+1, expected_value)    AssertionError: 2 != 3       ----------------------------------------------------------------------    Ran 1 test in 0.002s       FAILED (failures=1)

“只改这一行” 对学生来说是一个有用的标记。它准确地表明了需要修改的内容。否则,学生可以通过将第一行改为 return 来修复测试。

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

@run_testclass TestNumbers(unittest.TestCase):       def test_equality(self):        expected_value = 2 # 修复后的代码行        self.assertEqual(1+1, expected_value)
    test_equality (__main__.TestNumbers) ... ok       ----------------------------------------------------------------------    Ran 1 test in 0.002s       OK

然而,很快,unittest 库的原生断言将被证明是不够的。在 pytest 中,通过重写 assert 中的字节码来解决这个问题,使其具有神奇的属性和各种启发式方法。但这在 Jupyter notebook 中就不容易实现了。是时候挖出一个好的断言库了:PyHamcrest。

from hamcrest import *@run_testclass 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 "", 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_testclass 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_testclass 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 "", 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 "", 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_testclass 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 "", 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 "", 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_testclass 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”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


分享题目:怎么用JupyterNotebook教Python
文章网址:http://cqcxhl.cn/article/pcseih.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP