Python中的一些高级技巧
Python 开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来 Pythonic 一点。如果你还在按照类C语言的那套风格来写的话,在 code review 恐怕会要被吐槽了.
列表推导式
1 | >>> chars = [ c for c in 'python' ] |
字典推导式
1 | >>> dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} |
集合推导式
1 | >>> set1 = {1,2,3,4} |
合并字典
1 | >>> x = {'a':1,'b':2} |
复制列表
1 | >>> nums = [1,2,3] |
反转列表
1 | >>> reverse_nums = nums[::-1] |
变量交换
1 | >>> a,b = 1, 2 |
高级拆包
1 | >>> a, *b = 1,2,3 |
或者
1 | >>> a, *b, c = 1,2,3,4,5 |
函数返回多个值(其实是自动packing成元组)然后unpacking赋值给4个变量
1 | >>> def f(): |
列表合并成字符串
1 | >>> " ".join(["I", "Love", "Python"]) |
链式比较
1 | >>> if a > 2 and a < 5: |
yield from
1 | # 没有使用 field from |
in 代替 or
1 | >>> if x == 1 or x == 2 or x == 3: |
字典代替多个if else
1 | def fun(x): |
有下标索引的枚举
1 | >>> for i, e in enumerate(["a","b","c"]): |
生成器
注意区分列表推导式,生成器效率更高
1 | >>> g = (i**2 for i in range(5)) |
注意区分列表推导式,生成器效率更高
1 | >>> g = (i**2 for i in range(5)) |
默认字典 defaultdict
1 | >>> d = dict() |
字符串格式化
1 | >>> lang = 'python' |
列表中出现次数最多的元素
1 | >>> nums = [1,2,3,3] |
读写文件
1 | >>> with open("test.txt", "w") as f: |
判断对象类型,可指定多个类型
1 | >>> isinstance(a, (int, str)) |
类似的还有字符串的 startswith,endswith
1 | >>> "http://foofish.net".startswith(('http','https')) |
str 与 repr 区别
1 | >>> str(datetime.now()) |
前者对人友好,可读性更强,后者对计算机友好,支持 obj == eval(repr(obj))
使用装饰器
1 | def makebold(f): |
不使用装饰器,可读性非常差
1 | def say(): |