Python 工匠:使用数字与字符串的技巧学习笔记
#Python 工匠:使用数字与字符串的技巧学习笔记
#https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-on-numbers-and-strings.md
:使用 enum 枚举类型改善代码
- #避免如下代码
- def mark_trip_as_featured(trip):
- """将某个旅程添加到推荐栏目
- """
- if trip.source == 11:
- do_some_thing(trip)
- elif trip.source == 12:
- do_some_other_thing(trip)
- ... ...
- return
- #提倡如下代码
- from enum import IntEnum
- class TripSource(IntEnum):
- FROM_WEBSITE = 11
- FROM_IOS_CLIENT = 12
- def mark_trip_as_featured(trip):
- if trip.source == TripSource.FROM_WEBSITE:
- do_some_thing(trip)
- elif trip.source == TripSource.FROM_IOS_CLIENT:
- do_some_other_thing(trip)
- ... ...
- return
:不必预计算字面量表达式
- #避免如下代码
- def f1(delta_seconds):
- # 如果时间已经过去了超过 11 天,不做任何事
- if delta_seconds > 950400:
- return
- ...
- #提倡如下代码
- def f1(delta_seconds):
- if delta_seconds > 11 * 24 * 3600:
- return
实用技巧
- 1.布尔值其实也是“数字”
- ["Python", "Javascript"][2 > 1]
- 'Javascript'
- [2>1]为True,True即1
- ["Python", "Javascript"][1]
2.改善超长字符串的可读性
使用括号将长字符串包起来,然后就可以随意折行了:
- def main():
- logger.info(("There is something really bad happened during the process. "
- "Please contact your administrator."))
可以用标准库 textwrap 来解决整段代码的缩进视觉效果
- from textwrap import dedent
- def main():
- if user.is_active:
- # dedent 将会缩进掉整段文字最左边的空字符串
- message = dedent("""\
- Welcome, today's movie list:
- - Jaw (1975)
- - The Shining (1980)
- - Saw (2004)""")
3.float("inf") 和 float("-inf") 它们俩分别对应着数学世界里的正负无穷大。当它们和任意数值进行比较时,满足这样的规律:float("-inf") < 任意数值 < float("inf")。
因为它们有着这样的特点,我们可以在某些场景用上它们:
- # A. 根据年龄升序排序,没有提供年龄放在最后边
- >>> users = {"tom": 19, "jenny": 13, "jack": None, "andrew": 43}
- >>> sorted(users.keys(), key=lambda user: users.get(user) or float('inf'))
- ['jenny', 'tom', 'andrew', 'jack']
- # B. 作为循环初始值,简化第一次判断逻辑
- >>> max_num = float('-inf')
- >>> # 找到列表中最大的数字
- >>> for i in [23, 71, 3, 21, 8]:
- ...: if i > max_num:
- ...: max_num = i
- ...:
- >>> max_num
- 71
Python 工匠:使用数字与字符串的技巧学习笔记的更多相关文章
- python入门:数字型和字符串换行要同类型 注意连接符
#!/usr/bin/env python # -*- coding: utf-8 -*- #数字型和字符串换行要同类型 注意连接符 a = 1 b = 2 print(str(a) + " ...
- 《python基础教程(第二版)》学习笔记 字符串(第3章)
<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...
- 《python基础教程(第二版)》学习笔记 基础部分(第1章)
<python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...
- 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)
<python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...
- 《python基础教程(第二版)》学习笔记 字典(第4章)
<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...
- 《python基础教程(第二版)》学习笔记 列表/元组(第2章)
<python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...
- 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
<python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- 《python基础教程(第二版)》学习笔记 函数(第6章)
<python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params): block return values 记录函数:def f ...
随机推荐
- Android PKMS服务
它的作用? 关于PKMS的全称是啥应该咱们不陌生,PackageManagerService,和AMS一样是Android系统的核心服务,它主要负责系统中Package的管理,应用程序的安装.卸载.信 ...
- linux定时任务(转)
转自:https://www.cnblogs.com/intval/p/5763929.html linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非 ...
- c语言的#和##的用法
#include <stdio.h> #define ADD(A,B) printf(#A " + " #B " = %d\n",((A)+(B)) ...
- 2019 Nowcoder Multi-University Training Contest 1 H-XOR
由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...
- 【每天学一点linux】后台进程不打印日志
command > out.file 2>&1 & 将文件输出到指定的文件中
- html css div固定底部
<div id="father"> <footer></footer> </div> #father{ position:relat ...
- Numpy | 01 简介
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...
- git 初始用法
Git global setup git config --global user.name "xiaoming" git config --global user.email & ...
- 使用 Python 和 Flask 设计 RESTful API
近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Pyt ...
- 【AtCoder】 ARC 099
link C-Minimization 枚举覆盖\(1\)的区间,两边的次数直接算 #include<bits/stdc++.h> #define ll long long #define ...