前言众所周知Python 以语法简洁著称同样实现一个功能Java 可能要十来行Python 一行就可以搞定。Python 的代码之所以这么优雅完全归功于其独有的特性只要你掌握了这些特性同样可以写出像诗一样的代码。下面我们就一起看看 Python 中的骚操作。0x00 Hello World对于大部分程序员来说第一个程序应该都是 Hello World! 了Python 直接将该入门程序做成了一个包。12In [1]:import__hello__Hello world!0x01 交换变量一行代码搞定变量交换无需临时变量也无需异或操作。1In [1]: x,yy,x0x02 变量比较对于变量的连续比较Python 是支持的比较好的。1234567In [24]: x10In [25]:5 x 20Out[25]:TrueIn [26]:11 x 20Out[26]:False0x03 列表推导式123456In [2]:listlist(range(10))# 取偶数In [3]: even[xforxinlistifx%20]In [4]: evenOut[4]: [0,2,4,6,8]0x04 合并字符串很多语言合并字符串大都是通过 号来实现的但由于字符串的不可变性不断合并后的字符串会不断的申请新的内存。1234In [5]: x[a,b,c,d,e,f,g]In [6]: .join(x)Out[6]:abcdefg0x05 列表切片12345678910In [2]: xOut[2]: [0,1,2,3,4,5,6,7,8,9]# 取索引为 2 到 8 的值步长为 2In [4]: x[2:8:2]Out[4]: [2,4,6]# 步长为负值表示从后面取值In [6]: x[::-2]Out[6]: [9,7,5,3,1]0x06 反转字符串1234In [7]: xHello Python!In [8]: x[::-1]Out[8]:!nohtyP olleH0x07 同时获取下标和值123xlist(range(10))forindex, valueinenumerate(x):print(index, value)0x08 zip()函数12345678910111213141516171819202122In [7]: a[1,2,3]In [8]: b[4,5,6]In [9]: c[7,8,9]In [16]:list(zip(a, b, c))Out[16]: [(1,4,7), (2,5,8), (3,6,9)]# 逆操作In [18]: zz(zip(a, b, c))In [19]: x, y, zzip(*zz)In [20]: x,y,zOut[20]: ((1,2,3), (4,5,6), (7,8,9))# 合并列表相邻项In [22]: a[1,2,3,4,5,6]In [23]:list(zip(a[::2], a[1::2]))Out[23]: [(1,2), (3,4), (5,6)]0x09 闭包123456789101112131415defouter(x):definner(y):# 在内函数中 用到了外函数的变量nonlocal xxyreturnxy# 外函数的返回值是内函数的引用returninnerfunouter(10)print(fun(10))# 30print(fun(10))# 40print(fun(10))# 50总结今天我们学习了一些 Python 的技巧都是大家平时工作必须掌握的技能。大家学会了么。