Python编程从入门到实践项目
Alien Invasion(外星人入侵项目)
在for循环中,不应该从列表或编组中删除条目,因此最好是遍历副本的方式.如果直接对列表做删除条目,那么代码如下所示,
1
2
3
4
5
6numbers = [1, 2, 2, 3]
for n in numbers:
if n == 2:
numbers.remove(n)
print(numbers)
# 结果为[1,2,3]
在for循环中,不应该从列表或编组中删除条目,因此最好是遍历副本的方式.如果直接对列表做删除条目,那么代码如下所示,
1 | numbers = [1, 2, 2, 3] |
模块化和包机制是Python管理复杂性的核心手段,也是代码复用的基础.每个源文件都是一个模块,import用于加载并执行一个模块.我们在到如模块的同时也到入了其定义的命名空间.
1 | import foo |
迭代定义经常发生在循环遍历项的时候发生调用,代码如下所示,
1 | a=[2,4,10,37,62] |
这是一个十分常见的代码编程模式,常见于循环,列表推导式等.他的迭代语法原型为
1 | for x in obj: |
在编写程序中存在大量代码重复的问题,其在编写过程会十分枯燥无聊,并且后续难以维护.元编程涉及编写操作其他代码的代码问题.其相应的应用示例为宏(Marco),包装器(wrapper),切面(aspect).因此其本质上是对代码进行操作.元编程的核心动力是DRY原则(Don't Repeat Yourself). 当发现存在大量代码结构类似的情况,则可以用元编程.与C/C++的宏在编译前处理文本,Python的元编程是在运行的时候操作对象(func,class).其会更加的灵活,更加的动态.装饰器是一个创建另一个函数包装器的函数.包装器则是一个全新的函数,但是他的工作原理和原有函数是完全相同的,接受相同的函数参数可以返回相同的返回值,但是可以增加一些额外的操作.装饰器本质上是接受函数作为参数并返回新函数的高阶函数.理想的装饰器应该是对被装饰器的调用者是透明的,也就是即使换成被装饰了的函数,其调用和返回也不应该导致代码出错.而额外的输出则是由包装器函数实现,但仍然依靠原始函数获得结果
字典是命名化值的集合,用户自定义的对象的底层使用字典,如实例数据和类成员.换言之,整个对象系统的底层是基于字典.实例的__dict__字典属性会用于存储实例数据,在创建实例属性并赋值的时候,实际上就是对__dict__字典的元素填充.并且不同实例的__dict__字典属性是私用的,并不会互通共享.换言之,其实就是如果程序中创建了100个实例,那么也会有100个不同的实例字典.与实例的__dict__字典不同的是,类也是存在__dict__字典属性的,其是用于存储类成员.类和对象在逻辑上是具有很强的联系的,也就是实例是类的可操作对象,类提供了实例的数据属性和操作行为.实例的__class__属性返回的是其实例化的类,因此可以从实例反连接到类.
本笔记完全基于David Beazley的Python教程-Practical Python.
任意一个python文件就是一个模块,这里的模块解决的是代码复用与命名空间隔离.
1 | # foo.py |
但是在大型程序中,具有大量的模块文件,如果仍然通过模块管理代码,会使得主程序被大量的模块文件隐藏,因此对于大量代码组织架构的程序中,包代替模块成为管理代码的好方式.