关于python:翻译实用的Python编程InstructorNotes

3次阅读

共计 5639 个字符,预计需要花费 15 分钟才能阅读完成。

实用的 Python 编程——讲师阐明

作者:戴维·比兹利(David Beazley)

概述

对于如何应用我的课程“实用的 Python 编程”进行教学的问题,本文档提供一些通用的阐明和倡议,包含课程目标、课程受众、辣手的内容等。

一些人会在一个典型的、为期三天的公司培训中进行教学,本阐明就是提供给这些教学人员的。在如何传授本人的课程方面,这些阐明可能会给你带来一些启发。

指标受众和个别办法

本课程旨在作为曾经有肯定的编程教训人员的“Python 入门”课程。这相对不是一门为编程老手而设计的课程。

话虽如此,我发现 Python 课程中的学生也不大可能是硬核软件工程师或者程序员。相同,你可能会遇到工程师,科学家, web 程序员以及经验不足的开发者。学生背景差别很大。有些学生可能具备丰盛的 C,C++, Java 教训,有些学生可能理解 PHP 和 HTML,有些学生可能把握的是诸如 MATLAB 这样的工具,只管我曾经尽了最大致力把课程的先决条件说分明,然而有些学生可能依然简直没有传统的 ” 编程 ” 教训。

思考到这一点,本课程旨在通过操作数据(尤其是股市数据)的个别问题来教 Python。之所以抉择这个畛域是因为它很简略,并且无论每个人的背景如何,都应该对此有所理解。举个例子,编程能力很较弱的学生依然可能要理解一些罕用的货色,例如应用电子表格(Excel)。所以,如果他们真的被卡住了,你能够像这样通知他们“元组的就像电子表格外面的数据行”或者“列表的操作和电子表格的列进行操作并且把后果放到新的一列中相似。”要害思维是扎根于事实世界环境中,而不是偏离到深奥的“计算机科学”问题上(例如:计算斐波那契数列)。

这个畛域的问题也能够很好的引入其它编程主题。例如,科学家 / 工程师可能想理解数据分析或者数据可视化,所以你能够给他们展现如果应用 matplotlib 绘图。Web 程序员可能想要理解如何在网页展现股市数据,所以,你能够探讨模板引擎。系统管理员可能想应用日志文件做一些事件,所以,你能够疏导他们查看实时的股票数据流日志文件。软件工程师可能想理解设计,所以,你能够让他们看看将股票数据封装到对象外部或者使程序可扩大的办法(例如,如何让程序以 10 种不同的表格模式产生输入)。你懂的。

演示指南

演示幻灯片(notes)为课程提供了叙述构造,供学生练习时参考。退出学生可能浏览那些幻灯片并且他们写代码时有工夫回头查看,那么就没必要一字不落的解说。我偏向于疾速地浏览幻灯片,并在后退的过程中展现一些简短的例子。我常常跳过这些幻灯片,进行现场演示。例如,你真的不须要那么多对于列表(list)的幻灯片,而是走向解释器,现场执行一些列表示例即可。教训法令:每张幻灯片的工夫不超过 1 分钟,除非是特地辣手的内容。诚实说,如果你感觉适宜本人的话,能够跳过大部分的幻灯片,而只应用实时演示讲课。我常常这样做。

课程练习

本课程大概有 130 个入手练习。如果你进行每一项练习,并让学生有工夫思考和写代码,则可能须要大概 10-12 小时。在实践中,你可能会发现学生在某些练习中须要更多的工夫。对此,我在上面有一些阐明。

你应该向学生反复强调,题解代码是可用的,并且查看和复制题解代码也是能够的——尤其是有工夫限度的时候。

在传授课程之前,我强烈建议你浏览并实现每一道练习,免得发生意外。

在授课期间,当学生做练习的时候,我通常也在本人的电脑上从头开始不看答案地实现每一道练习。为此,我强烈建议你手头筹备一份练习的打印正本,而不用在电脑上查看练习(电脑屏幕那时可能正在投影)。在练习工夫快要完结时,我将会开始探讨我的题解代码,强调屏幕上的不同点并对此进行探讨。如果题解存在任何潜在问题(包含设计注意事项),我也将进行探讨。请向学生强调,在持续之前,他们可能要看看或者复制题解代码。

第 1 节: 简介

本节的次要指标是让学生从编程环境开始动手。包含应用交互式 shell,编辑或者运行简短的程序。在本节完结时,学生应该可能编写用于读取数据文件并执行简略的计算的简短脚本。他们将会理解数字,字符串,列表和文件,也会理解函数,异样和模块,然而不会介绍得太具体。

本节往往所消耗的工夫是最长的,因为学生对工具不相熟,可能会遇到各种问题。你应该在教室到处走走并且确保每个人能够编辑,运行和调试简略的代码,这是至关重要的。确保学生正确装置了 Python,下载了课程练习,网络失常运行。解决呈现的任何其余问题。

工夫:我打算在第 1 天的中午完结第 1 节。

第 2 节:解决数据

在这门课程中,本节可能是最重要的。它笼罩了数据表示和操作的根底,包含元组,列表,字典和汇合。

2.2 节是重中之重,请在正当的状况下,给学生足够的工夫让他们实现练习。这些练习可能会继续 45 分钟,具体取决于学生。在本练习的两头,我往往会后退到 2.3 节(格式化输入),给学生足够多的工夫来持续做练习。综上所述,2.2 或 2.3 可能须要 1 个小时以上的工夫。

2.4 节让学生摸索 enumerate() 和 zip() 函数的用法。我认为这两个函数是必不可少的,所以,请不要跳过它们。

2.5 节介绍 collections 模块。对于 collections,大量的内容能够说,但这个时候,学生可能还不齐全能体会其重要性。不要停留在“collections 是一个很酷的模块,稍后再看。这仅仅是一些示例”的观点中,而要具体理解 collections。

2.6 节介绍列表推导式,这是一个用于解决列表数据的重要个性。向学生强调列表推导式与 SQL 数据库查问十分类似。在练习完结时,我常常做一些波及更高级内容的交互性示例,如写一个列表推导式,或者应用 matplotlib 将数据可视化。如果你违心,这也是一个介绍 Jupyter 的机会。

2.7 节是最简单的练习。它波及到在 Python 中一级数据的应用,以及事实——诸如列表之类的数据结构能够存储任何类型对象,只有你想。这些练习与解析 CSV 中的数据列相干,稍后在 3.2 节中会再次应用相干的概念。

工夫:现实状况下,你心愿第一天就实现第 2 节。然而,通常以第 2.5 节或者第 2.6 节完结。因而,如果你感觉本人有写落后,也不要惊恐。

第 3 节:程序组织

本节的次要指标是介绍无关函数的更置信的信息,并且激励学生应用函数。本节将函数构建到模块和脚本编写中。

3.1 节是对于如何将简略的“脚本”转变为函数。不要激励学生写乌七八糟的“脚本”,相同,代码至多应该模块化到函数中。这使代码更易于了解,更易于后续变更,运行更快。函数很好。

在整个课程中,3.2 节可能是最高级的一组练习。本节练习中,学生须要编写一个通用的实用函数来解析面向列的数据。然而,这会大量应用列表推导式和函数(例如,作为一等对象的函数)。你可能须要领导学生实现此代码的每一个步骤,具体地展现它的工作原理。然而,这样做的回报是微小的——你能够向学生展现一个简短的通用函数,该函数的性能十分弱小。如果没有大量简单的代码,这些性能用 C、C++ 或 Java 简直是不可能写进去的。对于这些代码,有很多可能的设计或者探讨路径。施展你的想象力吧。

3.3 节为在 3.2 节中创立的函数增加了错误处理。通常,这是一个探讨异样解决的好时机。肯定要谈一谈捕捉所有异样的危险性。这可能是议论“Python 之禅”外面“谬误绝不能轻轻疏忽”准则的好时机。

注意事项:在练习 3.4 之前,确保学生取得了齐全能够用的 report.py,pcost.py 和 fileparse.py。如果须要,请从 Solution 目录复制。

3.4 节介绍模块导入。3.2-3.3 节编写的文件用于简化 3.1 节的代码。请留神,你可能须要帮忙学生解决 IDLE,sys.path 以及其它与导入无关的各种设置的问题。

3.5 节探讨 __main__ 和脚本编写。有一点内容是对于命令行参数的。您可能会偏向于探讨相似 argparse 这样的模块。然而请留神,这样做会“关上一个泥潭”(译注:opens up a quagmire,可了解为“引入新的问题”),个别状况下,最好只提一下而后持续。

3.6 节对 Python 中的设计展开讨论。编写灵便的代码好还是编写硬编码文件名的代码好?这是你批改代码并必须对已有代码进行重构的第一个中央。

从这里开始,大部分的练习都是对曾经写好的代码做一些小改变。

第 4 节:类和对象

本节是对于面向对象编程(OOP)的。一般来说,假设学生在面向对象(OO)方面有深厚的背景是不保险的。因而,在开始之前,我通常会对面向对象编程“格调”以及数据和办法是如何绑定在一起的进行形容。以字符串和列表为例,阐明什么是“对象”以及对象是如何调用(通过 . 号调用)办法进行操作的。强调办法是如何绑定到对象自身的。例如,应用 items.append(x),而不是调用一个独自的函数 append(items, x)。

4.1 节介绍类语句以及向学生展现如何创立一个根本的对象。实际上,这只是为了介绍:类能够作为定义简略数据结构的一种形式——能够和第 2 节中为此目标而应用元组和列表分割起来。

4.2 节是对于继承以及如何应用应用继承创立可扩大程序的。就面向对象编程和面向对象设计而言,本组练习可能是最重要的。请给学生足够的工夫(30-45 分钟)学习继承。依据趣味,你能够破费大量工夫对面向对象编程的不同方面进行探讨。例如,不同的设计模式,继承层次结构,形象基类等。

4.3 节应用非凡办法做了一些试验。我不会破费太多工夫去折腾非凡办法。稍后,练习 6.1 和其它中央会介绍非凡办法。

工夫上,通常是第二天完结。

第 5 节:外部对象

本节将向学生介绍对象零碎的幕后常识,如何应用字典构建对象零碎,实例和类是如何绑定在一起的,继承是如何工作的。不过,本节最重要的局部可能是封装(private,attributes,,properties,slots 等)。

5.1 节揭开表面现象,让学生察看和应用实例和类的底层字典。

5.2 节探讨在 get/set 函数背地暗藏属性(attribute)并应用特色属性(properties)。我通常强调,这些技术在库和框架中很罕用——尤其是须要对用户的抉择进行管制的时候。

精通 Python 的高手会发现我基本没有探讨像形容器(descriptors)或属性拜访办法(__getattr__
__setattr__)这样的高级主题。依据以往的教训,我发现,这样做对于加入入门课程的学生而言,精神负担太重了。此时,每个人的头脑曾经处于爆炸的边缘,如果当初去探讨形容器的工作原理,那么,要么在明天余下的工夫里,要么在这门课程剩下的工夫里,你会失去他们。将这些高级主题放到“高级 Python”课程吧。

如果你正在看着时钟想着“我讲不完这门课程了”,那么你齐全能够跳过第 5 节。

第 6 节:生成器

本节的次要目标是介绍生成器,生成器可用于实现自定义迭代。并将其用于与数据处理相干的各种问题。本节练习让学生学会剖析流数据。练习应用被写入日志文件的股票更新信息作为流数据。

在本节中,有两大观点须要强调一下。第一个观点,能够应用生成器编写基于增量解决(incremental processing)的代码。这对于流数据或其它宏大的数据集十分有用,因为这些数据太大了,无奈一次性全副放入内存中。第二个观点,你能够将生成器 / 迭代器链接在一起应用以创立解决管道(相似于 Unix 的 pipes)。同样,这是解决和思考流数据,大型数据集的十分弱小的办法。

省略的内容:只管本节形容了迭代协定,然而并没有具体介绍如何创立可迭代对象(即带有 __iter__()next() 办法的类)。在实践中,我发现没必要总是介绍如何创立可迭代对象(生成器通常更好 / 更简略)。所以,为了节省时间,我特意将其省略。也不包含扩大生成器(协程)和并产生成器(如微线程 tasklets)。在高级课程中,最好蕴含这些内容。

第 7 节:高级主题

本节基本上是各种高级主题。这些主题本能够在之前进行介绍,然而因为与课程流程和课程练习内容相干的各种起因而没有介绍。如果你肯定要晓得的话,我已经在课程的后面介绍过这些内容。因为学生曾经被短缺的信息所困扰,所以稍后再探讨这些高级主题更好一些——特地是到目前为止,每个人对 Python 都更加相熟并且开始把握应用 Python 的诀窍。

高级主题包含可变参数(args, *kwargs),匿名函数(lambda),闭包(closures)以及装璜器(decorators)。对装璜器的探讨只是元编程(metaprogramming)的一小部分。对此,你能够畅所欲言,然而我可能会避开元类(metaclasses)。最近,我始终在演示“numba”,将其作为更乏味的装璜器的例子。

如果工夫紧迫,第 7 节的大部分内容能够跳过或者高度稀释(例如跳过练习)。

第 8 节:测试和调试

本节次要目标是介绍各种与测试、调试、以及软件开发相干的工具和技术。向学生介绍单元测试模块(unittest)、日志模块(logging),探讨断言(assertions)和 ” 契约(contract)编程的思维 ”,展现调试器(debugger)和分析器(profiler)。这其中的大部分内容是不言自明的。

第 9 节:包

当初,学生曾经编写了各种文件(pcost.py,report.py,fileparse.py,tableformat.py,stock.py,portfolio.py,follow.py……)。本节次要有两个指标:第一个,将所有的代码放入 Python 包构造中,尽管这只是简略的介绍,然而它们会将文件移到一个目录中,并且所有的内容将会被毁坏,所以须要对导入语句(与包相干的导入)进行批改,并且可能须要弄一个 __init__.py 文件。第二个,编写一个简略的 setup.py 文件用于打包代码并分发给其他人。就这些,本课程到此结束。

目录

注:残缺翻译见 https://github.com/codists/practical-python-zh

正文完
 0