让代码更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代码简化的更多相关文章

  1. python多行代码简化

    python中,可以把多行代码简化为一行,把for循环和if条件判断都集中到一行里来写,示例如下: >>> from nltk.corpus import stopwords > ...

  2. Python 代码风格

    1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...

  3. Convex Hull 实现理论+自制Python代码

    Convex Hull 概述 计算n维欧式空间散点集的凸包,有很多的方法.但是如果要实现快速运算则其难点在于:如何快速判断散点集的成员是否是在凸集的内部.如果可以简化判断的运算过程,则可以极大简化迭代 ...

  4. 深入理解 GIL:如何写出高性能及线程安全的 Python 代码

    深入理解 GIL:如何写出高性能及线程安全的 Python 代码 本文由 伯乐在线 - 郑芸 翻译.未经许可,禁止转载!英文出处:A. Jesse.欢迎加入翻译组. GIL对多线程的影响:http:/ ...

  5. Golang 调用 Python 代码

    go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件( ...

  6. 命令行下设置 PYTHONPATH 来正确运行Python代码

    写Python程序,总要使用一些自己使用的库:在运行此类程序的时候,就需要先配置好 PYTHONPATH 环境变量:否则会导致找不到库错误. Windows下,可以写一个bat来简化配置: @ECHO ...

  7. 机器学习完整过程案例分布解析,python代码解析

    所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...

  8. Python代码规范问题及解决

    Python代码规范问题及解决 为了养成使用Python编程好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8 只是 ...

  9. 如何写出优雅的Python代码?

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

随机推荐

  1. Array.fill & String.padStart & String.padEnd

    Array.fill & String.padStart & String.padEnd Array.fill arr.fill(value[, start[, end]]) http ...

  2. git whoami

    git whoami $ git config --list $ git config --global --list # quit $ q $ git config user.name xgqfrm ...

  3. CSS3 & transition & animation

    CSS3 & transition & animation https://developer.mozilla.org/en-US/docs/Web/CSS/transition-ti ...

  4. egg.js in action

    egg.js in action fullstack https://github.com/eggjs/egg/ cli config router service midlewares HTTP C ...

  5. how to get selected option text in javascript

    how to get selected option text in javascript refs https://developer.mozilla.org/en-US/docs/Web/API/ ...

  6. uniapp 发起网络请求

    推荐下我写的uni-http 创建http-config.js import Vue from 'vue' const BASE_URL = 'http://xxx.com'; if (process ...

  7. NGK以强大的创新能力赋予NGK公链超级实用的特性

    公链从大趋势看是一个不断迭代的过程,不管是共识算法.网络架构.开发者协议都在一代一代不断完善跟创新. NGK公链作为公链赛道上的后起之秀,对于主流公链技术的局限性以及下一代公链技术的发展方向都有非常清 ...

  8. Using Sqoop to import from db2 to hadoop

    参考 : https://stackoverflow.com/questions/23933481/db2-data-import-into-hadoop         sqoop import - ...

  9. 1.3.1 apache的配置(上)

    Apache是比较常用的web服务器软件,用来解析HTTP网页.这里需注意,apache本身并不能解析php页面,它是用来配置解析http页面的.当然,作为一款最流行的web服务器软件,apache支 ...

  10. Django-1.11中文文档-模型Models(一)

    官方文档链接 模型是数据信息的唯一并明确的来源.它包含了我们储存的数据的基本字段和行为.通常,每个模型映射到一张数据库表. 基本概念: 每个模型都是django.db.models.Model的一个子 ...