【文末送书】非常实用的 Python 技巧

举报
Python爱好者 发表于 2020/12/29 00:03:57 2020/12/29
【摘要】 别忘了查看文末送书送书哦! 函数连续调用 def add(x): class AddNum(int): def __call__(self, x): return AddNum(self.numerator + x) return AddNum(x)print add(2)(3)(5)# 10print add(2)(3)(4)(5)(6)(7)# 27#...

别忘了查看文末送书送书哦!

函数连续调用


   
  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. 8
  3. >>> int('A', 16)
  4. 10

格式化 json

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)]

谨慎使用

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 "<stdin>", line 1, in <module>
  5. KeyError: 'a'
  6. >>>
  7. >>> m = collections.defaultdict(int)
  8. >>> m['a']
  9. 0
  10. >>> m['b']
  11. 0
  12. >>> m = collections.defaultdict(str)
  13. >>> m['a']
  14. ''
  15. >>> m['b'] += 'a'
  16. >>> m['b']
  17. 'a'
  18. >>> m = collections.defaultdict(lambda: '[default value]')
  19. >>> m['a']
  20. '[default value]'
  21. >>> m['b']
  22. '[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'}

更多


   
  1. https://www.zhihu.com/question/27376156
  2. stackoverflow.com/questions/101268/hidden-features-of-python
  3. https://zhuanlan.zhihu.com/p/22909144
  4. https://www.zhihu.com/question/29995881
  5. 本次送书规则
  6. 《Python网络爬虫开发》
  7. (点击查看详情)
  8. 本次送书5
  9. 1、公众号回复:送书 参与活动
  10. 2、扫一扫下方的二维码参与送书

文章来源: blog.csdn.net,作者:敲代码的灰太狼,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/tongtongjing1765/article/details/108114403

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。