18式优雅你的Python

文章授权转载自 Python与算法之美,粗体文字为生信宝典的修改和补充。文后有生信宝典原创的系列Python学习教程(Python2和Python3)。

一 优雅你的Jupyter

1,更改Jupyter Notebook初始工作路径

平凡方法:在cmd中输入jupyter notebook --generate-config,然后找到生成的配置文件jupyter_notebook_config.py,在其中加入一条语句:

c.NotebookApp.notebook_dir = 'F:\我的坚果云\PythonFiles'

优雅方法:新建文本文件,在其中输入以下内容:

F: cd F:\我的坚果云\PythonFiles jupyter notebook pause

保存后将文件重命名为jupyter.cmd (jupyter.bat也可以),双击该文件即可。

2,获取函数帮助

平凡方法:help()。

优雅方法:光标移动至函数名右侧 (或选中函数名),按住Shift + Tab键弹出帮助文本框。

3,修改多处的同一标识符名字

平凡方法:逐个修改。

优雅方法:按住Ctrl鼠标移动光标同时选中多处编辑位置,启动多行编辑。(Jupyter也可以加一个插件,开启vim模式,自由替换,见Python文学化编程 - Jupyter notebook使用和插件拓展)。

二,优雅你的赋值语句

4,为多个变量赋值

平凡方法:逐一赋值。

优雅方法:使用元组语法同时赋值。

5,序列解包

平凡方法:使用下标访问逐一赋值。

优雅方法:序列自动解包。

6,对象方法的嵌套

平凡方法:定义中间变量,不嵌套。

优雅方法:使用对象方法嵌套,减少中间变量。

三,优雅你的判断语句

7,单行if语句:if...else...三目运算符

平凡方法:使用普通需要换行的if...else...语句。

优雅方法:使用单行if语句:if...else...三目运算符。(三目运算符不太推荐

8,区间判断

平凡方法:使用and连接两次判断。

优雅方法:使用链式判断。

9,判断是否为多个取值之一

平凡方法:使用or连接多次相等判断。

优雅方法:使用关键字in。(set和dict的查询速度是O(1),很快的,具体见为啥我的Python这么慢 - 项查找 (二)

10,判断是否为空列表,空字典,空字符串

平凡方法:使用len函数判断长度是否大于0。

优雅方法:利用隐含类型转换直接判断

11,判断诸多条件是否至少有一个成立

平凡方法:使用or连接多次判断。

优雅方法:使用any函数。(R也有类似用法,R学习见ggplot2高效实用指南 (可视化脚本、工具、套路、配色))

12,判断诸多条件是否全部成立

平凡方法:使用and连接多次判断。

优雅方法:使用all函数。

四,优雅你的循环语句

13,单行循环语句:推导式

平凡方法:使用普通for循环。

优雅方法:使用推导式:[... for .... in ... if ... ]。(列表解析和字典解析很常用

14,同时遍历序列的元素和元素下标

平凡方法:遍历下标,并用下标访问元素。

优雅方法:使用enumerate函数生成下标和元素对。

15,显示循环进度

平凡方法:直接不断print下标。该方法容易导致输出刷屏。

优雅方法:print下标后设置不换行并使用‘\r’回车到行首以避免输出刷屏。(\r的妙用,回车不换行)

优雅方法加强版:定义progress_bar函数,直观显示进度条。

五,优雅你的函数

16,使用lambda匿名函数实现简单的函数

平凡方法:使用def关键字定义函数。

优雅方法:使用lambda匿名函数。

17,使用yield生成器收集系列值

平凡方法:在函数中直接用列表收集系列值。

优雅方法:使用yield生成器收集系列值。生成器具有惰性计算特点,被迭代才逐个计算输出值。

18,使用装饰器给函数添加插入日志,性能测试等非核心功能

平凡方法:将插入日志,性能测试等非核心功能直接内嵌到函数定义中。

优雅方法:使用装饰器扩展函数的非核心功能。装饰器函数可以一次定义,到处装饰。(装饰器值得好好学习)

原文发布于微信公众号 - 生信宝典(Bio_data)

原文发表时间:2018-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

《C++ primer》--第11章

习题11.1 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。编写...

20650
来自专栏重庆的技术分享区

关于eslint使用规则,和各种报错对应规则

62650
来自专栏前端儿

ES6笔记(7)-- Promise异步编程

Promise是一种异步编程的解决方案,本质来说其实它是一种规范,Promises/A+规范

13110
来自专栏前端进阶之路

JS学习系列 07 - 标签声明(Label Statement)

我想要当 j = 2 的时候就退出所有的for语句,打印最后的 done ,你会怎么做?

12320
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-11总结Eclipse使用,API,Object类

1:Eclipse的概述使用(掌握) 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 ...

36960
来自专栏小樱的经验随笔

记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)

这一串代码描述是这样子,我们要绕过A-Za-z0-9这些常规数字、字母字符串的传参,将非字母、数字的字符经过各种变换,最后能构造出 a-z 中任意一个字符,并且...

21920
来自专栏Google Dart

Dart语言指南(二) 顶

Dart是一种面向对象的语言 包含类和基于 mixin 的继承两部分。每个对象是一个类的实例, 并且 Object.是所有类的父类。 基于 mixin 的继承指...

30820
来自专栏Vamei实验室

Python标准库01 正则表达式 (re包)

我将从正则表达式开始讲Python的标准库。正则表达式是文字处理中常用的工具,而且不需要额外的系统知识或经验。我们会把系统相关的包放在后面讲解。 正则表达式(r...

37190
来自专栏AzMark

Python 学习笔记之类与实例

类 (class) 封装一组相关数据,使之成为一个整体,并使用一种方法持续展示和维护。

5610
来自专栏偏前端工程师的驿站

JS魔法堂:ES6新特性——GeneratorFunction介绍

一、前言                                   第一次看koajs的示例时,发现该语句 function *(next){.....

28650

扫码关注云+社区

领取腾讯云代金券