Python 测试
Python 测试
应该测试什么?如果可能的话,代码库中的所有代码都要测试。但这取决于开发者,如果写一个健壮性测试是不切实际的,你可以跳过它。就像 Nick Coghlan(Python 核心开发成员) 在访谈里面说的:有一个坚实可靠的测试套件,你可以做出大的改动,并确信外部可见行为保持不变。
单元测试这里引用维基百科的介绍:
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
单元测试模块在 Python 里我们有 unittest 这个模块来帮助我们进行单元测试。
阶乘计算程序在这个例子中我们将写一个计算阶乘的程序 factorial.py。
1234567891011121314151617181920212223242526272829import sysdef fact(n): ""&q ...
Python Virtualenv
Python Virtualenv
安装首先安装 pip3。
12$ sudo apt-get update$ sudo apt-get install python3-pip
用如下命令安装 virtualenv:
1$ sudo pip3 install virtualenv
用法我们会创建一个叫做 virtual 的目录,在里面我们会有两个不同的虚拟环境。
1$ mkdir virtual
下面的命令创建一个叫做 virt1 的环境。
12$ cd virtual$ virtualenv virt1
现在我们激活这个 virt1 环境。
12$ source virt1/bin/activate(virt1)shiyanlou:~/$
提示符的第一部分是当前虚拟环境的名字,当你有多个环境的时候它会帮助你识别你在哪个环境里面。
现在我们将安装 redis 这个 Python 模块。
1(virt1)$ sudo pip3 install redis
此处输入图片的描述
使用 deactivate 命令关闭虚拟环境。
12(virt1)$ deact ...
Python 迭代器、生成器、装饰器
Python 迭代器、生成器、装饰器
迭代器Python 迭代器(Iterators)对象在遵守迭代器协议时需要支持如下两种方法。iter(),返回迭代器对象自身。这用在 for 和 in 语句中。next(),返回迭代器的下一个值。如果没有下一个值可以返回,那么应该抛出 StopIteration 异常。
123456789101112131415class Counter(object): def __init__(self, low, high): self.current = low self.high = high def __iter__(self): return self def __next__(self): #返回下一个值直到当前值大于 high if self.current > self.high: raise StopIteration else: self.current += ...
Python PEP8 代码风格指南
Python PEP8 代码风格指南
介绍这份文档给出的代码约定适用于主要的 Python 发行版所有标准库中的 Python 代码。请参阅相似的 PEP 信息,其用于描述实现 Python 的 C 代码规范[1]。
这份文档和 PEP 257(文档字符串约定) 改编自 Guido 的 Python 风格指南原文,从 Barry 的风格指南里添加了一些东西[2]。
随着时间的推移,这份额外约定的风格指南已经被认可了,过去的约定由于语言自身的发展被淘汰了。
许多项目有它们自己的编码风格指南。如果有冲突,优先考虑项目规定的编码指南。
愚蠢的一致性就像没脑子的妖怪Guido 的一个主要见解是读代码多过写代码。这里提供指南的意图是强调代码可读性的重要性,并且使大多数 Python 代码保持一致性。如 PEP 20 所述,“Readability counts”。
风格指南是关于一致性的。风格一致对于本指南来说是重要的,对一个项目来说是更重要的,对于一个模块或者方法来说是最重要的。
但是最最重要的是:知道什么时候应该破例–有时候这份风格指南就是不适用。有疑问时,用你最好的判断力,对比其它的例子来 ...
Python3 挑战实验 -- 类和Collection
Python3 挑战实验 – 类和Collection
介绍我们之前通过3个课程学习了 Python 的类,模块和Collection 模块的知识。这次我们通过一个简单的挑战实验来测试一下我们对之前知识点的掌握程度。
目标改写我们在第11节类这个模块当中 2.3 继承 部分的 student_teacher.py 脚本,在Person()类中增添函数get_grade()。对于教师类,该函数可以自动统计出老师班上学生的得分情况并按照频率的高低以A: X, B: X, C: X, D: X 的形式打印出来。对于学生类,该函数则可以以Pass: X, Fail: X 来统计自己的成绩情况(A,B,C 为 Pass, 如果得了 D 就认为是 Fail)。
student_teacher.py 文件可以通过在Xfce 终端中输入如下代码来获取
1wget http://labfile.oss.aliyuncs.com/courses/790/student_teacher.py
要求请把最终的student_teacher.py 代码文件放在 ...
Python Collections 模块
Python Collections 模块
Counter在这个实验我们会学习 Collections 模块。这个模块实现了一些很好的数据结构,它们能帮助你解决各种实际问题。
1>>> import collections
这是如何导入这个模块,现在我们来看看其中的一些类。
Counter 是一个有助于 hashable 对象计数的 dict 子类。它是一个无序的集合,其中 hashable 对象的元素存储为字典的键,它们的计数存储为字典的值,计数可以为任意整数,包括零和负数。
我们可以这样查看 Counter 的帮助信息,事实上这些信息来源于 Counter 的文档字符串(collections.Counter.__doc__)。
下面我们来看一个例子,例子中我们查看 Python 的 LICENSE 文件中某些单词出现的次数。
Counter 示例123456>>> from collections import Counter>>> import re>>> path = '/u ...
Python 模块
Python 模块
模块介绍到目前为止,我们在 Python 解释器中写的所有代码都在我们退出解释器的时候丢失了。但是当人们编写大型程序的时候他们会倾向于将代码分为多个不同的文件以便使用,调试以及拥有更好的可读性。在 Python 中我们使用模块来到达这些目的。模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。
你可以由全局变量 name 得到模块的模块名(一个字符串)。
现在我们来看看模块是怎样工作的。创建一个 bars.py 文件。文件内容如下:
12345678910111213141516171819202122232425"""Bars Module============这是一个打印不同分割线的示例模块"""def starbar(num): """打印 * 分割线 :arg num: 线长 ""&q ...
Python 类
Python 类
定义类在写你的第一个类之前,你应该知道它的语法。我们以下面这种方式定义类:
1234class nameoftheclass(parent_class): statement1 statement2 statement3
在类的声明中你可以写任何 Python 语句,包括定义函数(在类中我们称为方法)。
12345>>> class MyClass(object):... """A simple example class"""... i = 12345... def f(self):... return 'hello world'
init 方法类的实例化使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可。例如(假设沿用前面的类):
1x = MyClass()
以上创建了一个新的类实例并将该对象赋给局部变量 x。
这个实例化操作创建一个空的对象。很多类都倾向于将对象创建为有初始 ...
Python3 挑战实验 -- 玩转函数
Python3 挑战实验 – 玩转函数
介绍我们之前通过3个课程学习了 Python 的函数,文件处理,以及异常。这次我们通过一个简单的挑战实验来测试一下我们对之前代码的掌握程度。
目标请在 /home/shiyanlou/Code写出一个 MinutesToHours.py 脚本文件,实现一个函数 Hours(),将用户输入的 分钟数 转化为 小时数和分钟数,并要求小时数尽量大。讲结果以 XX H, XX M 的形式打印出来。(注意打印格式中的空格)
要求用户能够通过命令行输入分钟数,程序需要打印出相应的小时数和分钟数如果用户输入的是一个负值,程序需要报错 ValueError需要进行 try…except 操作来控制异常。如果异常,在屏幕上打印打印出 ValueError: Input number cannot be negative 提示用户输入的值有误
举例:
提示语
import sys
raise语句
try…except 语句
知识点
异常
文件处理
if-else
来源实验楼团队
答案12345678910111213141516#!/usr/ ...
Python 异常
Python 异常
在程序执行过程中发生的任何错误都是异常。每个异常显示一些相关的错误信息,比如你在 Python3 中使用 Python2 独有的语法就会发生 SyntaxError:
不小心在行首多打了一个空格就会产生 IndentationError:
NameError当有人试图访问一个未定义的变量则会发生 NameError。
1234>>> print(kushal)Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'kushal' is not defined
最后一行包含了错误的详细信息,其余行显示它是如何发生(或什么引起该异常)的详细信息
TypeErrorTypeError 也是一种经常出现的异常。当操作或函数应用于不适当类型的对象时引发,一个常见的例子是对整数和字符串做加法。
1234>>> print(1 + "kushal" ...