值得收藏,Python 开发中的高级技巧


Posted in Python onNovember 23, 2018

Python 开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来 Pythonic 一点。如果你还在按照类C语言的那套风格来写的话,在 code review 恐怕会要被吐槽了。

列表推导式

>>> chars = [ c for c in 'python' ]
>>> chars
['p', 'y', 't', 'h', 'o', 'n']

字典推导式

>>> dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
>>> double_dict1 = {k:v*2 for (k,v) in dict1.items()}
>>> double_dict1
{'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10}

集合推导式

>>> set1 = {1,2,3,4}
>>> double_set = {i*2 for i in set1}
>>> double_set
{8, 2, 4, 6}

合并字典

>>> x = {'a':1,'b':2}
>>> y = {'c':3, 'd':4}
>>> z = {**x, **y}
>>> z
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

复制列表

>>> nums = [1,2,3]
>>> nums[::]
[1, 2, 3]
>>> copy_nums = nums[::]
>>> copy_nums
[1, 2, 3]

反转列表

>>> reverse_nums = nums[::-1]
>>> reverse_nums
[3, 2, 1]
 PACKING / UNPACKING

变量交换

>>> a,b = 1, 2
>>> a ,b = b,a
>>> a
2
>>> b
1

高级拆包

>>> a, *b = 1,2,3
>>> a
1
>>> b
[2, 3]

或者

>>> a, *b, c = 1,2,3,4,5
>>> a
1
>>> b
[2, 3, 4]
>>> c
5

函数返回多个值(其实是自动packing成元组)然后unpacking赋值给4个变量

>>> def f():
...   return 1, 2, 3, 4
...
>>> a, b, c, d = f()
>>> a
1
>>> d
4

列表合并成字符串

>>> " ".join(["I", "Love", "Python"])
'I Love Python'

链式比较

>>> if a > 2 and a < 5:
...   pass
...
>>> if 2<a<5:
...   pass
yield from
# 没有使用 field from
def dup(n):
  for i in range(n):
    yield i
    yield i
# 使用yield from
def dup(n):
  for i in range(n):
  yield from [i, i]
for i in dup(3):
  print(i)
>>>
0
0
1
1
2
2

in 代替 or

>>> if x == 1 or x == 2 or x == 3:
...   pass
...
>>> if x in (1,2,3):
...   pass

字典代替多个if else

def fun(x):
  if x == 'a':
    return 1
  elif x == 'b':
    return 2
  else:
    return None
def fun(x):
  return {"a": 1, "b": 2}.get(x)

有下标索引的枚举

>>> for i, e in enumerate(["a","b","c"]):
...   print(i, e)
...
0 a
1 b
2 c

生成器

注意区分列表推导式,生成器效率更高

>>> g = (i**2 for i in range(5))
>>> g
<generator object <genexpr> at 0x10881e518>
>>> for i in g:
...   print(i)
...
0
1
4
9
16

默认字典 defaultdict

>>> d = dict()
>>> d['nums']
KeyError: 'nums'
>>>
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d["nums"]
[]

字符串格式化

>>> lang = 'python'
>>> f'{lang} is most popular language in the world'
'python is most popular language in the world'

列表中出现次数最多的元素

>>> nums = [1,2,3,3]
>>> max(set(nums), key=nums.count)
3

或者

from collections import Counter
>>> Counter(nums).most_common()[0][0]
3

读写文件

>>> with open("test.txt", "w") as f:
...   f.writelines("hello")

判断对象类型,可指定多个类型

>>> isinstance(a, (int, str))
True

类似的还有字符串的 startswith,endswith

>>> "http://foofish.net".startswith(('http','https'))
True
>>> "https://foofish.net".startswith(('http','https'))
True
__str__ 与 __repr__ 区别
>>> str(datetime.now())
'2018-11-20 00:31:54.839605'
>>> repr(datetime.now())
'datetime.datetime(2018, 11, 20, 0, 32, 0, 579521)'

前者对人友好,可读性更强,后者对计算机友好,支持 obj == eval(repr(obj))

使用装饰器

def makebold(f):
return lambda: "<b>" + f() + "</b>"
def makeitalic(f):
return lambda: "<i>" + f() + "</i>"
@makebold
@makeitalic
def say():
return "Hello"
>>> say()
<b><i>Hello</i></b>

不使用装饰器,可读性非常差

def say():
return "Hello"
>>> makebold(makeitalic(say))()
<b><i>Hello</i></b>

总结

以上所述是小编给大家介绍的Python 开发中的高级技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现文件名批量替换和内容替换
Mar 20 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
Python线程中对join方法的运用的教程
Apr 09 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python验证文件是否可读写代码分享
Dec 11 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
Django实现文件上传和下载功能
Oct 06 Python
python函数定义和调用过程详解
Feb 09 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
python 常见字符串与函数的用法详解
Nov 23 #Python
django+mysql的使用示例
Nov 23 #Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 #Python
Windows下Python3.6安装第三方模块的方法
Nov 22 #Python
Python第三方Window模块文件的几种安装方法
Nov 22 #Python
python实现归并排序算法
Nov 22 #Python
Python的iOS自动化打包实例代码
Nov 22 #Python
You might like
PHP个人网站架设连环讲(二)
2006/10/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php支付宝APP支付功能
2020/07/29 PHP
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
python实现udp数据报传输的方法
2014/09/26 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python内建模块struct实例详解
2018/02/02 Python
Django中url的反向查询的方法
2018/03/14 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Tensorflow 实现释放内存
2020/02/03 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
了解AppleTalk协议吗
2014/04/01 面试题
单位未婚证明范本
2014/01/18 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL