5wd3 Note
TOP1 命名
背景
- 这次课大妈单独拿出一段时间来谈命名. 随着课程的深入我确实在命名方面有些困扰, 要么觉得名字越命越长, 要么觉得名字不够清楚的反应出用途, 要么就是觉得有些重复, 总之, 不!漂!亮!
查阅资料与思考
- 大妈之前提到了Google Python Style Guide, 其中就有一节关于命名的一些规范, 同时我也忘在哪下到一个pdf是大妈05年写的Python Coding Rules, 其中关于命名写得已经非常清楚明白.
- 其中我发现我没意识到的是这种命名方式:
_getname
.即,变量名或者函数名前边加下划线. 通过了解才知道这中变量名主要是用于模块内部使用, 如果用from XXX import *
调用该模块, 并不能调用这种命名方式的函数. - 通过这个也让我意识到了, 以后在写代码的过程中, 要考虑什么东西是要私有的, 不宜公开的. 变量有local和global的区别, 函数同样会私有和公开的区别. 这在命名过程中也需要体现出来.
- 之前大妈就说过, 其实一个好的代码示范就像读精彩的小说一样. 而这多半需要有很好命名功力. 阳老也表达过这样的观点, coding也是需要写作能力的.
如何改进
- 回过头再仔细阅读上文提到的两篇文章关于命名的部分.
- 重构以前的代码, 查找自己命名上用的不对的地方, 并整理出自己的错误.
- 每隔一段时间用错误清单对照自己这段时间的代码, 看是否有改进.
- 再次修改清单返回(3), 这样不断重复几次, 相信命名方面一定会有很大改观.
TOP2 最小原则
背景
- 上边这四个字也算是我这段时间被大妈反复提醒以及看到阳老的留言,才意识到需要好好思考的四个字.
- What 和 Why 就不说了. :-)
如何才能提炼出最小原则
?
- 分类. 清楚自己所在的场景, 不同类型的场景, 需要不同的
最小原则
. 例如,- 文档类. 那么我们要学会如何快速阅读文档. 立即提炼出围绕如何解决问题的相关知识.
- 开发类. 那么我们要会识别最小功能有哪些, 在最小功能的基础上慢慢迭代出"最大"功能.
- 记录. 记录自己在整个过程中都做了什么, 花了多少时间, 走了多少弯路才达到目标.
- 但是我觉得记录的习惯可能真的不太容易养成, 现在我也做不好. 但做的不好的痛苦是, 回顾想的到反馈时, 会有信息丢失, 也就是忘了某些部分的尝试.
- 所以, 只能反复练习, 反复练习.
- 分析. 分析整个过程中, 什么行为是最小原则之外的, 也就是可以抛弃不做的.
- 输出. 将整个分析的结果记录下来, 用来日后回顾,对比, 同时可以反馈给周围人, 获得他们的反馈, 进一步完善自己.
- 循环起来, 变成本能.
这是我目前的一些思考, 希望能够启发大家, 同时也能得到大家的反馈. ;-)
TOP3 list
背景
list
一直挖的不够深, 导致很多时候在调用, 选择, 输出等等场景的时候, 显得特别啰嗦.- 所以, 通过大妈的讲解又让自己对list有了进一步的认识.
some new
- 列表推导式. 这个在小赖的Gitbook上有一篇文章介绍了如何用列表推导式.
.join(for...in ...)
- 之前用的都是, for循环, 然后用手动组合添加分号.
- 这个后来在看笨办法的时候也看到.
- itertools
- 这个真的要认真读一下, 里面提供了很多各种功能的迭代. 原来需要手动编写的函数, 在这里已经内置.
- 完全是
不知道自己不知道
啊.
- Built-in Types
generator
- 通过文档了解了
generator
的一些性质 generator
返回的是列表中的一个值, 而不是整个列表. 所以在输出的时候, 如果是print 一个generator, 那么会显示类似下面的字样.\
at 0x401f08> 可是这个却并不耽误各种运算.
- 优点则是对较大数据进行迭代时, 更高效, 节省内存.
- 通过文档了解了
更新
151121 编辑
References
- https://wiki.python.org/moin/Generators
- 不理解generator的童鞋可以看看这个
- http://anandology.com/python-practice-book/iterators.html
- 这个给出了各种例子, 会帮助理解.
- https://docs.python.org/2/library/itertools.html?highlight=itertools#module-itertools
- https://docs.python.org/2/library/stdtypes.html?highlight=built
- https://docs.python.org/2/library/functions.html#xrange