非常有用的Python技巧

 函数连续调用

 
 
 
 
  1. def add(x): 
  2.     class AddNum(int): 
  3.         def __call__(self, x):
  4.             return AddNum(self.numerator + x)
  5.      return AddNum(x) 
  6. print add(2)(3)(5) 
  7. # 10 
  8. print add(2)(3)(4)(5)(6)(7) 
  9. # 27 
  10. # javascript 版 
  11. var add = function(x){ 
  12.     var addNum = function(x){ 
  13.         return add(addNum + x); 
  14.     }; 
  15.     addNum.toString = function(){ 
  16.         return x; 
  17.     } 
  18.     return addNum; 
  19. }
  20. add(2)(3)(5)//10 
  21. add(2)(3)(4)(5)(6)(7)//27

默认值陷阱

 
 
 
 
  1. >>> def evil(v=[]): 
  2. ...     v.append(1) 
  3. ...     print v
  4. ... 
  5. >>> evil() 
  6. [1] 
  7. >>> evil() 
  8. [1, 1]

读写csv文件

 
 
 
 
  1. import csv 
  2. with open('data.csv', 'rb') as f: 
  3.     reader = csv.reader(f) 
  4.     for row in reader:
  5.          print row 
  6. # 向csv文件写入 
  7. import csv 
  8. with open( 'data.csv', 'wb') as f: 
  9.     writer = csv.writer(f) 
  10.     writer.writerow(['name', 'address', 'age'])  # 单行写入 
  11.     data = [ 
  12.             ( 'xiaoming ','china','10'), 
  13.             ( 'Lily', 'USA', '12')]  
  14.     writer.writerows(data)  # 多行写入

数制转换

 
 
 
 
  1. >>> int('1000', 2) 
  2. >>> int('A', 16) 
  3. 10

格式化 json

 
 
 
 
  1. echo'{"k": "v"}' | python-m json.tool

list 扁平化

 
 
 
 
  1. list_ = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
  2. [k for i in list_ for k in i] #[1, 2, 3, 4, 5, 6, 7, 8, 9] 
  3. import numpy as np 
  4. print np.r_[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
  5. import itertools 
  6. print list(itertools.chain(*[[1, 2, 3], [4, 5, 6], [7, 8, 9]])) 
  7. sum(list_, []) 
  8. flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] 
  9. flatten(list_)

list 合并

 
 
 
 
  1. >>> a = [1, 3, 5, 7, 9] 
  2. >>> b = [2, 3, 4, 5, 6] 
  3. >>> c = [5, 6, 7, 8, 9] 
  4. >>> list(set().union(a, b, c)) 
  5. [1, 2, 3, 4, 5, 6, 7, 8, 9]

出现次数最多的 2 个字母

 
 
 
 
  1. from collections import Counter 
  2. c = Counter('hello world') 
  3. print(c.most_common(2)) #[('l', 3), ('o', 2)]

谨慎使用

 
 
 
 
  1. eval("__import__('os').system('rm -rf /')", {})

置换矩阵

 
 
 
 
  1. matrix = [[1, 2, 3],[4, 5, 6]]
  2. res = zip( *matrix )   # res = [(1, 4), (2, 5), (3, 6)]

列表推导

 
 
 
 
  1. [item**2 for item in lst if item % 2] 
  2. map(lambda item: item ** 2, filter(lambda item: item % 2, lst)) 
  3. >>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) 
  4. ['1', '2', '3', '4', '5', '6', '7', '8', '9']

排列组合

 
 
 
 
  1. >>> for p in itertools.permutations([1, 2, 3, 4]): 
  2. ...     print ''.join(str(x) for x in p) 
  3. ... 
  4. 1234 
  5. 1243 
  6. 1324 
  7. 1342 
  8. 1423 
  9. 1432 
  10. 2134 
  11. 2143 
  12. 2314 
  13. 2341 
  14. 2413 
  15. 2431 
  16. 3124 
  17. 3142 
  18. 3214 
  19. 3241 
  20. 3412 
  21. 3421 
  22. 4123 
  23. 4132 
  24. 4213 
  25. 4231 
  26. 4312 
  27. 4321 
  28. >>> for c in itertools.combinations([1, 2, 3, 4, 5], 3): 
  29. ...     print ''.join(str(x) for x in c) 
  30. ... 
  31. 123 
  32. 124 
  33. 125 
  34. 134 
  35. 135 
  36. 145 
  37. 234 
  38. 235 
  39. 245 
  40. 345 
  41. >>> for c in itertools.combinations_with_replacement([1, 2, 3], 2): 
  42. ...     print ''.join(str(x) for x in c) 
  43. ... 
  44. 11 
  45. 12 
  46. 13 
  47. 22 
  48. 23 
  49. 33 
  50. >>> for p in itertools.product([1, 2, 3], [4, 5]): 
  51. (1, 4) 
  52. (1, 5) 
  53. (2, 4) 
  54. (2, 5) 
  55. (3, 4) 
  56. (3, 5)

默认字典

 
 
 
 
  1. >>> m = dict() 
  2. >>> m['a'] 
  3. Traceback (most recent call last): 
  4.   File "", line 1, in  
  5. KeyError: 'a' 
  6. >>> 
  7. >>> m = collections.defaultdict(int) 
  8. >>> m['a'] 
  9. >>> m['b'] 
  10. >>> m = collections.defaultdict(str) 
  11. >>> m['a'] 
  12. '' 
  13. >>> m['b'] += 'a' 
  14. >>> m['b'] 
  15. 'a' 
  16. >>> m = collections.defaultdict(lambda: '[default value]') 
  17. >>> m['a'] 
  18. '[default value]' 
  19. >>> m['b'] 
  20. '[default value]'

反转字典

 
 
 
 
  1. >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
  2. >>> m 
  3. {'d': 4, 'a': 1, 'b': 2, 'c': 3} 
  4. >>> {v: k for k, v in m.items()} 
  5. {1: 'a', 2: 'b', 3: 'c', 4: 'd'} 

网站名称:非常有用的Python技巧
文章转载:http://www.shufengxianlan.com/qtweb/news47/331347.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联