unit-test

unit-test

自动化测试

不同于C和Java等语言编写的程序,Python只有在运行中才会检查一些错误,因此只有在运行和测试程序时,才会知道它是否能够正常的运行。
为了解决这个问题,就有了用于测试,调试和探查Python代码的技术和库模块。

Read more
记一次写刷分程序
Python-class

Python-class

2020/10/25更新 整合了内容

Python面向对象编程

ps:相对熟悉的知识就不仔细列出了

定义与实例

  • class定义一个对象
  • 类的实例是以函数的形式调用类对象来创建的,__init__()为构造函数,__del__()为析构函数

作用域规则

  • Python类中没有作用域,这与C++,Java不同。而需要显示使用self的原因在于Python没有提供显示声明变量的方式(如:int x;),因此无法知道在方法中要赋值的变量是不是局部变量,或者是否要保存为实例属性,而显示self可以解决这一问题。

继承

  • super(cls, instance)会返回一个特殊对象,该对象支持在基类上执行属性查找。你可以通过super获取基类,调用基类的函数。在Python3中,super中的参数可以不要。
  • 多继承不要使用不要使用不要使用

多态动态绑定和鸭子类型

  • 动态绑定(在继承背景下使用,也成多态),obj.attr,首先搜索实例本身,然后是实例的类定义,然后是基类,查找会返回第一个匹配项
  • 动态绑定在于其不受对象obj的类型影响,因此如果执行像obj.name这样的查找,对于所有拥有name属性的obj都适用。这种行为有时候被称作“鸭子类型”(duck typing),这个名称来源于一个谚语:“如果看起来,叫声像而且走起路来像鸭子,那么它就是鸭子”。
Read more
Python-base-general

Python-base-general

Python 基础的一些补充

生成器

概念

如果使用yield语句, 可以让函数生成一个结果序列,而不仅仅是一个值
如:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>>def countdown(n):
print("Counting down!")
while n > 0:
yield n
n -= 1
>>>countdown(5)
<generator object countdown at 0x00000289CCDB0888>
>>>c = countdown(5)
>>>c.__next__()
Counting down!
5
>>>c.__next__()
4

  • __next__()调用使生成器函数一直运行,到下一条语句为之。此时next()将返回传递给yield的值,而且函数将暂时中止执行,再次调用next时,将执行yield之后的语句的,持续到函数返回为止。
    通常不会手动调用__next__(),而是使用for in 循环
Read more