Python代码简化
让代码更Pythonic
当然不要过分追求简洁,不然阅读的人就遭殃了,
部分逻辑复杂的情况还应按照清晰的逻辑脉络去写方便阅读,
毕竟我们是用代码实现功能然后维护,而不是单单的炫技。
##############
这里博主收集了一些比较常见的 Pythonic 写法,帮助你养成写优秀代码的习惯
1. 交换两个变量的值,正常都会想利用一个中间临时变量来过渡。
能用一行代码解决的(并且不影响可读性的),决不用三行代码
1 tmp = a
2 a = b
3 b = tmp
4
5 ##############
6 a,b = b,a
2.在一个 for 循环中,如果逻辑比较简单,不如试用一下列表的列表推导式,虽然只有一行代码,但也逻辑清晰
1 my_list = []
2 for i in range(10):
3 my_list.append(i*2)
4
5 ##################
6 my_list = [i*2 for i in range(10)]
3.带索引遍历,更好的做法是利用 enumerate 这个内置函数
1 for i in range(len(my_list)):
2 print(i, "-->", my_list[i])
3
4 ###############
5 for i,item in enumerate(my_list):
6 print(i, "-->",item)
4.序列解包,使用 * 可以对一个列表解包
1 a, *rest = [1, 2, 3]
2 # a = 1, rest = [2, 3]
3
4 #################
5 a, *middle, c = [1, 2, 3, 4]
6 # a = 1, middle = [2, 3], c = 4
5.字符串拼接,一个列表(或者可迭代对象)中的所有元素都是字符串对象,想要将他们连接起来,更推荐的做法是使用 join 函数
1 letters = ['s', 'p', 'a', 'm']
2 s=""
3 for let in letters:
4 s += let
5
6 ###############
7 letters = ['s', 'p', 'a', 'm']
8 word = ''.join(letters)
6.判断一个变量是否为真(假),新手习惯直接使用 == 与 True、False、None 进行对比,实际上,""、[]、{} 这些没有任何元素的容器都是假值,可直接使用 if not xx 来判断。
1 if attr == True:
2 print('True!')
3
4 if attr == None:
5 print('attr is None!')
6
7
8 #################
9 if attr:
10 print('attr is truthy!')
11
12 if not attr:
13 print('attr is falsey!')
7.当直接使用 [] 来访问字典里的元素时,若key不存在,是会抛异常的,所以新会可能会先判断一下是否有这个 key,有再取,
更推荐的做法是使用 get 来取,如果没有该 key 会默认返回 None(当然你也可以设置默认返回值)
1 d = {'hello': 'world'}
2 if d.has_key('hello'):
3 print(d['hello']) # prints 'world'
4 else:
5 print('default_value')
6
7 ######################
8 d = {'hello': 'world'}
9
10 print(d.get('hello', 'default_value')) # prints 'world'
11 print(d.get('thingy', 'default_value')) # prints 'default_value'
8.可以使用列表推导或者高阶函数 filter 来实现过滤列表元素,除了 filter 之外,还有 map、reduce 这两个函数也很好用
1 a = [3, 4, 5]
2 b = []
3 for i in a:
4 if i > 4:
5 b.append(i)
6 ##############
7 a = [3, 4, 5]
8 b = [i for i in a if i > 4]
9 # Or:
10 b = filter(lambda x: x > 4, a)
11
12 a = [3, 4, 5]
13 b = map(lambda i: i + 3, a)
14 # b: [6,7,8]
9.文件读取是非常常用的操作,在使用完句柄后,是需要手动调用 close 函数来关闭句柄的,
如果代码写得太长,即使你知道需要手动关闭句柄,却也会经常会漏掉。因此推荐养成习惯使用 with open 来读写文件,上下文管理器会自动执行关闭句柄的操作
1 fp = open('file.txt')
2 print(fp.read())
3 fp.close()
4
5 #############
6 with open('file.txt') as fp:
7 for line in fp.readlines():
8 print(line)
10.代码续航,将一个长度较长的字符串放在一行中,是很影响代码可读性的(下面代码可向左滑动),
稍等注重代码可读性的人,会使用三个引号 \来续写,也可以使用括号,导包的时候亦是如此
1 long_string = 'For a long time I used to go to bed early. Sometimes, when I had put out my candle, my eyes would close so quickly that I had not even time to say “I’m going to sleep.”'
2
3 ####################################
4 long_string = 'For a long time I used to go to bed early. ' \
5 'Sometimes, when I had put out my candle, ' \
6 'my eyes would close so quickly that I had not even time to say “I’m going to sleep.”'
7
8 #or
9 long_string = (
10 "For a long time I used to go to bed early. Sometimes, "
11 "when I had put out my candle, my eyes would close so quickly "
12 "that I had not even time to say “I’m going to sleep.”"
13 )
14 ###############################
15 from some.deep.module.inside.a.module import (
16 a_nice_function, another_nice_function, yet_another_nice_function)
11.有时候出于需要,我们会使用一些特殊的魔法来使代码适应更多的场景不确定性,
但若非必要,请不要那么做。无端增加代码的不确定性,会让原先本就动态的语言写出更加动态的代码
1 def make_complex(*args):
2 x, y = args
3 return dict(**locals())
4
5 ################
6 def make_complex(x, y):
7 return {'x': x, 'y': y}
12.对于暂不需要,却又不得不接收的的变量,请使用占位符
1 filename = 'foobar.txt' 2 basename, _, ext = filename.rpartition('.')
13.对于简单的判断并赋值,其实是可以使用三目运算,一行搞定
1 age = 20
2 if age > 18:
3 type = "adult"
4 else:
5 type = "teenager"
6
7 ###############
8 age = 20 b = "adult" if age > 18 else "teenager"
Python代码简化的更多相关文章
- python多行代码简化
python中,可以把多行代码简化为一行,把for循环和if条件判断都集中到一行里来写,示例如下: >>> from nltk.corpus import stopwords > ...
- Python 代码风格
1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...
- Convex Hull 实现理论+自制Python代码
Convex Hull 概述 计算n维欧式空间散点集的凸包,有很多的方法.但是如果要实现快速运算则其难点在于:如何快速判断散点集的成员是否是在凸集的内部.如果可以简化判断的运算过程,则可以极大简化迭代 ...
- 深入理解 GIL:如何写出高性能及线程安全的 Python 代码
深入理解 GIL:如何写出高性能及线程安全的 Python 代码 本文由 伯乐在线 - 郑芸 翻译.未经许可,禁止转载!英文出处:A. Jesse.欢迎加入翻译组. GIL对多线程的影响:http:/ ...
- Golang 调用 Python 代码
go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件( ...
- 命令行下设置 PYTHONPATH 来正确运行Python代码
写Python程序,总要使用一些自己使用的库:在运行此类程序的时候,就需要先配置好 PYTHONPATH 环境变量:否则会导致找不到库错误. Windows下,可以写一个bat来简化配置: @ECHO ...
- 机器学习完整过程案例分布解析,python代码解析
所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...
- Python代码规范问题及解决
Python代码规范问题及解决 为了养成使用Python编程好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8 只是 ...
- 如何写出优雅的Python代码?
有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...
随机推荐
- GitHub Sponsors
GitHub Sponsors https://github.com/sponsors https://github.com/sponsors/xgqfrms?preview=true https:/ ...
- css skeleton loading & skeleton components
css skeleton loading css & :empty See the Pen Skeleton Screen with CSS by xgqfrms (@xgqfrms) on ...
- lerna
lerna A tool for managing JavaScript projects with multiple packages. https://lerna.js.org/ https:// ...
- Techme INC解读基因魔剪,带来的是机遇还是风险?
10月7日,诺贝尔化学奖颁给了法国美国生物学家Jennifer Doudna和生物化学家Emmanuelle Charpentier,以表彰她们对新一代基因技术CRISPR的贡献,全网沸腾. CRIS ...
- django学习-5.获取url参数和name的作用
1.前言 假如我们要打开这两个博客园地址:[https://www.cnblogs.com/xiamen-momo/archive/2020/11.html].[https://www.cnblogs ...
- [转]Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
转载地址:https://www.cnblogs.com/MYSQLZOUQI/p/4233630.html 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱 ...
- C++算法代码——你要乘坐的飞碟在这里[usaco]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1056 题目描述 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO. 这些不明 ...
- 16_MySQL聚合函数的使用(重点,建议大家多动手操作)
本节所涉及的SQL语句 -- 聚合函数 SELECT AVG(sal+IFNULL(comm,0)) AS avg FROM t_emp; -- SUM SELECT SUM(sal) FROM t_ ...
- SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法
本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...
- banner自用图床2