pythonic之路(一)
一、 中不要直接将语句与 、 、 做比较
python中隐含为 的对象:
数值 (不是字符 )
空容器,比如空list 、空tuple 、空dict 、空str
其余的则隐含为 。
尽量避免用如下语法 , , ,应替换为 , , 。
但是,如果一个程序的关键字参数默认值为 ,代码需要判断输入是否为 ,则必须显式的与 比较,即
假如写为
那么 也被排除在外,如果参数 是一个序列的指标(index)则0显然是其中一个而不应该被排除。
同时,要记住,与 作比较时用 和 ,不要用 。
所以, 是个例外,对于其他的条件判断,直接用python隐含的 和 来做比较,而不是 。
二、尽量不要用可变对象(比如list、dict)作为函数的默认参数
因为可变对象会将实参累积起来,导致随后的调用出现问题。可用 作为默认值。
问题代码:
改进代码:
总的来说,要在函数里重新初始化形参,这样每次调用时都是以初始化的形参来接收实参,从而避免了累加。这对初学者来说可能是个陷阱,但老司机一般不会犯这样的错。
三、用 表示list的剩余元素
四、通过字典 给变量提供默认值
字典方法 实现了一个条件判断功能。 。
一个原理验证例子。
一个有点用处但语法啰嗦的例子。
用 改进版。
五、用 函数格式化字符串
格式化字符串一般有三种方法,用“+”、用“%”、用“format函数”。
最糟糕的莫过于用“+”,语句冗长晦涩难懂(尤其当有一串字符需要格式化时);
用“%”稍微好一些,缺点是用变量格式作为占位符,完全与格式化的内容脱节,也难懂;
直接使用命名的占位符,一看一目了然,清晰简洁。
六、如果有一个list,可用 创建一个string
七、class受保护变量和私有变量
受保护变量以单下划线开始,比如 ,受保护的意思是提示客户(client)不要直接使用它。
私有变量以双下划线开始,比如 ,私有的意思是提示子类没法直接调用该属性。
一定要记住,这只是程序员所遵循的一个传统而已,如果client真想一窥究竟,谁也没法阻止,实际上没有真正的隐私。但是要尊重开发人员的意图。
八、在class里定义一个魔法方法 ,用于友好的打印instance信息。
九、用 消除重复元素
集合的一个特性是唯一性,即没有重复的元素。相当于字典的键。
是 和 的子类。所以可用于 循环,也可当做 语句的迭代对象。
集合可以很方便的用集合表达式(类似于列表表达式)来生成。
包含了所有数学意义上集合的运算,比如并( )、交( )、差( )、对称差(并集-交集 )。
可以通过交集求出经常上线的且正在活跃的用户。
啰嗦写法:
简洁写法:
领取专属 10元无门槛券
私享最新 技术干货