1 lambda匿名函数
使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
使用lambda在某些时候让代码更容易理解。
打算就是在新版的tmqdu中大量的去使用匿名函数,列表运算,函数式编程。
2 yield
def g(n): for i in range(n): yield i **2
类似上面的代码
如果这样调用的话
for i in g(5): print i
这样就会返回打印出0, 1, 4, 。。。
包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。函数也许会有个return语句,但它的作用是用来yield产生值的。
不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效
3 with
参考 http://weifei520120.blog.163.com/blog/static/1768908201368044556/
4 可变参数和关键词参数
http://blog.csdn.net/FeiSan/article/details/1729905
最近写代码是这样的
class ShoppingCart(object): """一个购物车类 实现了创建添加删除商品""" def __init__(self, shopping_cart=[]):
使用了一个空列表表示默认参数
但是在单元测试中
def test_add_to_cart(self): shopping_cart = ShoppingCart() shopping_cart.add(self.product1.id) #省略一部分 def test_add_to_cart_product_do_not_exist(self): shopping_cart = ShoppingCart() print shopping_cart.content
你就会发现下面那个单元测试竟然会有上面那个测试添加进去的商品!
这个问题可以参考 http://blog.csdn.net/hsuxu/article/details/7785835
http://www.cnblogs.com/fox23/archive/2010/03/07/python-default-args-onetime-evaluate.html
这个页面还有几个问题挺好的,先记下来,有空再逐个的搞明白。
- 1. 是否了解动态语言的鸭子模型?
- 2. 是否了解可变参数与关键字参数?
- 3. 对函数式编程有初步了解。
- 4. 是否知道列表生成式?
- 5. 是否知道lambda/decorator/slots?
- 6. 为什么要把缺省参数设为immutable?
- 7. 是否知道Mixin?
- 8. 是否知道WSGI接口?
- 9. 是否知道异步框架如gevent/tornado?
- 10. 是否深入了解过Python的GC和GIL?
- 11.是否了解python对象的查找机制?