#Python 工匠:使用数字与字符串的技巧学习笔记
#https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-on-numbers-and-strings.md

:使用 enum 枚举类型改善代码

  1. #避免如下代码
  2. def mark_trip_as_featured(trip):
  3. """将某个旅程添加到推荐栏目
  4. """
  5. if trip.source == 11:
  6. do_some_thing(trip)
  7. elif trip.source == 12:
  8. do_some_other_thing(trip)
  9. ... ...
  10. return
  11.  
  12. #提倡如下代码
  13. from enum import IntEnum
  14.  
  15. class TripSource(IntEnum):
  16. FROM_WEBSITE = 11
  17. FROM_IOS_CLIENT = 12
  18.  
  19. def mark_trip_as_featured(trip):
  20. if trip.source == TripSource.FROM_WEBSITE:
  21. do_some_thing(trip)
  22. elif trip.source == TripSource.FROM_IOS_CLIENT:
  23. do_some_other_thing(trip)
  24. ... ...
  25. return

:不必预计算字面量表达式

  1. #避免如下代码
  2. def f1(delta_seconds):
  3. # 如果时间已经过去了超过 11 天,不做任何事
  4. if delta_seconds > 950400:
  5. return
  6. ...
  7. #提倡如下代码
  8. def f1(delta_seconds):
  9. if delta_seconds > 11 * 24 * 3600:
  10. return

实用技巧

  1. 1.布尔值其实也是“数字”
  2. ["Python", "Javascript"][2 > 1]
  3. 'Javascript'
  4.  
  5. [2>1]为TrueTrue1
  6. ["Python", "Javascript"][1]

2.改善超长字符串的可读性

使用括号将长字符串包起来,然后就可以随意折行了:

  1. def main():
  2. logger.info(("There is something really bad happened during the process. "
  3. "Please contact your administrator."))

可以用标准库 textwrap 来解决整段代码的缩进视觉效果

  1. from textwrap import dedent
  2.  
  3. def main():
  4. if user.is_active:
  5. # dedent 将会缩进掉整段文字最左边的空字符串
  6. message = dedent("""\
  7. Welcome, today's movie list:
  8. - Jaw (1975)
  9. - The Shining (1980)
  10. - Saw (2004)""")

3.float("inf") 和 float("-inf") 它们俩分别对应着数学世界里的正负无穷大。当它们和任意数值进行比较时,满足这样的规律:float("-inf") < 任意数值 < float("inf")。

因为它们有着这样的特点,我们可以在某些场景用上它们:

  1. # A. 根据年龄升序排序,没有提供年龄放在最后边
  2. >>> users = {"tom": 19, "jenny": 13, "jack": None, "andrew": 43}
  3. >>> sorted(users.keys(), key=lambda user: users.get(user) or float('inf'))
  4. ['jenny', 'tom', 'andrew', 'jack']
  5.  
  6. # B. 作为循环初始值,简化第一次判断逻辑
  7. >>> max_num = float('-inf')
  8. >>> # 找到列表中最大的数字
  9. >>> for i in [23, 71, 3, 21, 8]:
  10. ...: if i > max_num:
  11. ...: max_num = i
  12. ...:
  13. >>> max_num
  14. 71

Python 工匠:使用数字与字符串的技巧学习笔记的更多相关文章

  1. python入门:数字型和字符串换行要同类型 注意连接符

    #!/usr/bin/env python # -*- coding: utf-8 -*- #数字型和字符串换行要同类型 注意连接符 a = 1 b = 2 print(str(a) + " ...

  2. 《python基础教程(第二版)》学习笔记 字符串(第3章)

    <python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...

  3. 《python基础教程(第二版)》学习笔记 基础部分(第1章)

    <python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...

  4. 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)

    <python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...

  5. 《python基础教程(第二版)》学习笔记 字典(第4章)

    <python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...

  6. 《python基础教程(第二版)》学习笔记 列表/元组(第2章)

    <python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...

  7. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  8. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  9. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

随机推荐

  1. Android PKMS服务

    它的作用? 关于PKMS的全称是啥应该咱们不陌生,PackageManagerService,和AMS一样是Android系统的核心服务,它主要负责系统中Package的管理,应用程序的安装.卸载.信 ...

  2. linux定时任务(转)

    转自:https://www.cnblogs.com/intval/p/5763929.html linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非 ...

  3. c语言的#和##的用法

    #include <stdio.h> #define ADD(A,B) printf(#A " + " #B " = %d\n",((A)+(B)) ...

  4. 2019 Nowcoder Multi-University Training Contest 1 H-XOR

    由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...

  5. 【每天学一点linux】后台进程不打印日志

    command > out.file 2>&1 & 将文件输出到指定的文件中

  6. html css div固定底部

    <div id="father"> <footer></footer> </div> #father{ position:relat ...

  7. Numpy | 01 简介

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...

  8. git 初始用法

    Git global setup git config --global user.name "xiaoming" git config --global user.email & ...

  9. 使用 Python 和 Flask 设计 RESTful API

    近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Pyt ...

  10. 【AtCoder】 ARC 099

    link C-Minimization 枚举覆盖\(1\)的区间,两边的次数直接算 #include<bits/stdc++.h> #define ll long long #define ...