前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pythonic之路(二)

pythonic之路(二)

作者头像
企鹅号小编
发布2018-02-01 12:48:16
5890
发布2018-02-01 12:48:16
举报
文章被收录于专栏:编程编程编程

pythonic之路(二)

十、多用生成器和生成器表达式

至于什么是生成器,可参看我的另一篇文章迭代对象、迭代器、生成器浅析

如果需要迭代处理的序列包含了无限的元素,比如串口读回来的数据流、某网站发帖信息流等,生成器是最好选择,否则用list类容器的话数据会占用完内存,除非不断地把旧值pop掉,但这样做显然没有生成器那么简洁清晰。

如果需要从一个很大的序列每次提取一个值来做非常复杂的运算,那么用list类容器一次性把数据全读入内存显然会降低运算效率,这时最好用生成器。

故,生成器是你python路上的挚友。

一个例子,获取Twitter上某个关键字对应的数据流。

list实现:

generator实现:

十一、多用上下文管理器

对于文件的操作上下文管理器可谓是将遇良才,极其适用。

上下文管理器本质上是一个实现了 和 魔法方法的类。除了python内置的上下文管理器,自己也可以实现一个,只要加入这两个魔法方法即可。也可以用 装饰器来实现上下文管理器。

一个官方例子。当执行到 子句时, 下面的代码将被执行,类似于 文件时的 。其实 返回的就是一个生成器,源码内部有 语句。

十二、用单下划线 作为占位符忽略掉不使用的数据

有时候某些数据的出现是毫无用途的,这时候就不要把它赋值给某个变量了,而是直接舍弃掉,也可以节约点内存。

十三、直接交换两个变量的值,不要引入临时变量作为过渡

十四、使用全大写字母表示全局变量或常数。

十五、在每个程序中都加入 语句

在每一个 文件末尾最好都加入 。尤其是当该文件作为模块导入时更方便。

可将调试语句和零时验证程序正确与否的语句放在if条件句后面,很方便简单调试及结果显示,如果一旦作为模块导入了,那么if条件句后面的代码块都会被忽略,因为此时的 不再是 了。

十六、用 返回程序错误代码

对于任何程序,最好都定义一个返回值为0的 函数。在 内部通过调用 返回错误信息,在 里通过 调用 ,如果正常运行则返回0并安全退出。

这样的写法可直接用于Unix pipelines和SHELL。

十七、永远不要使用 来导入包或模块

是个通配符,会将package里的所有东西都导入进来,如果package里有个模块名字为 ,而自己写的程序里也有一个子程序叫 ,这会导致命名空间冲突,因为 污染了当前命名空间。

十八、导入模块顺序

其实,可以以任意顺序导入模块,但最好用约定俗成的顺序。

standard library modules

third-party library modules installed in site-packages

modules local to the current project

如果每一类型模块包含了好几个模块,最好用字母顺序排序。

十九、善用自带电池,不要重新造轮子

python是一门自带电池的语言,扩展库和模块非常丰富。每当遇到一个功能,首先考虑标准库有没有实现,其次再想办法自己造轮子。

充分利用标准库好处良多,最主要的有两点,第一,节省程序开发时间,同时标准库模块的性能更高;第二、代码更加清晰简洁,让维护者更轻松。

如果标准库里没有找到你需要的功能,那就上PyPI(the Python Package Index)找找,PyPI维护着超过27000个各种包。如果PyPI里也没有,那就上GitHub找;还没有的话那就自己造,如果能造出很好的轮子,可以申请添加到PyPI,让整个python社区受益。

如果找到了一个包,最好用python包管理器pip进行安装,语法为 。也可以上GitHub下载源码,在CMD里通过 手动安装,但是这种方法不方便,因为有些包还需要别的包来支持,所以还得手动安装支持包(如果支持包之前没安装过)。但用pip就很方便了,会自动检测支持包并自动安装。

二十、用 模块操作文件路径

包含了处理文件路径的所有功能,不要用“+”去操作路径。

一个重命名文件的例子。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档