overview icon indicating copy to clipboard operation
overview copied to clipboard

通过IDE扩展提供常用功能的例程/片段

Open nobodxbodon opened this issue 5 years ago • 6 comments

源自https://github.com/program-in-chinese/overview/issues/11#issuecomment-417743692 比如vscode下的snippet功能(详见VS Code创建自定义Python代码片段): 2019-01-29-vscode

nobodxbodon avatar Feb 01 '19 06:02 nobodxbodon

参考"Python Cookbook第三版", 把计划中的先分功能块列举如下, 第一章是数据结构/算法:

  1. (参考1.3) 保持一系列元素的最后N个(用deque)
  2. (参考1.4) 获取列表中最大的N个值 (可按key排序). 如取数量最大的两个物品名称:
货品清单 = [{'名称': '台式机', '数量': 5}, {'名称': '笔记本', '数量': 10}, {'名称': '显示器', '数量': 15}]
  1. (1.6) 新建1:N的字典, 如
{
  '奇数': {1, 3, 5},
  '偶数': {2, 4, 6}
}
{
  '奇数': [1, 3, 5],
  '偶数': [2, 4, 6]
}
  1. (1.7) 保持添加次序的字典, 用OrderedDict
  2. (1.8) 字典按值求最小/大, 以及排序(用zip). 如取数量最大/小的物品:
货品清单 = {
  '台式机': 5,
  '笔记本': 10,
  '显示器': 15
}
  1. (1.9) 求两个字典的重合部分(键, 键&值):
仓库1 = {
  '台式机': 5,
  '笔记本': 10,
  '显示器': 15
}
仓库2 = {
  '键盘': 5,
  '笔记本': 20,
  '显示器': 15
}
  1. (1.10) 从列表中删去重复元素, 并保持原顺序
  2. (1.12) 获取列表中出现频率最高的元素
  3. (1.13) 按照某个共通的键排序一系列字典, 如按笔记本数量排序No.5中的仓库
  4. (1.14) 按照对象中的某个属性进行排列, 如按用户类的用户id对几个用户进行排序:
class 用户:
	def __init__(self, 用户id):
	    self.用户id = 用户id
	def __repr__(self):
	    return '用户({})'.format(self.用户id)
  1. (1.15) 按照对象中的某个值分类一批对象, 如将一批人按照生日月份分组
  2. (1.16) 按照某个条件过滤列表中的元素
  3. (1.17) 从字典中按照某个条件提取一个子集
  4. (1.18) 由名称映射到值(用nametuple), 没想好描述(Mapping Names to Sequence Elements)
>>> from collections import namedtuple
>>> 用户 = namedtuple('用户', ['邮件', '加入时间'])
>>> 用户1 = 用户('[email protected]', '2019-01-01')
>>> 用户1
用户(邮件='[email protected]', 加入时间='2019-01-01')
>>> 用户1.邮件
'[email protected]'
>>> 用户1.加入时间
'2019-01-01'
  1. (1.19) 同时转换与reduce, 如下, 还可用于any, min, max`等:
sum(x *x for x in range(1, 4))
  1. (1.20) 合并多个字典(通过ChainMap)

未列入的条目及原因:

1.1 将列表拆成变量 -- 难以找到有代表性的代码片段 1.2 Unpacking Elements from Iterables of Arbitrary Length -- 同1.1 1.5 实现优先级queue -- 代码块较大 1.11 Naming a Slice -- 属于代码重构优化

@cflw @RimoChan 欢迎意见建议.

nobodxbodon avatar Feb 03 '19 08:02 nobodxbodon

应该能起到加快速度的作用。相比起整理成函数还是有一定好处的,比如需要某个功能的时候并不好「import 我的常用功能」……

我觉得实际上要用到的地方不多,有时候我倒是会选择效率低一些但是代码短的方法……

对了,python规范是4空格缩进,你的gif里vscode把\t自动变成变成了2空格

RimoChan avatar Feb 03 '19 11:02 RimoChan

@RimoChan 多谢

相比起整理成函数还是有一定好处的

感觉相对灵活些, 但也是刚接触, 之前也不大用, 先自己试试.

有时候我倒是会选择效率低一些但是代码短的方法

嗯, 现在觉得这个主要用户群也许是不熟悉Python但不时用来完成一些日常事务的, 越是熟练开发者这个插件的价值会越小.

你的gif里vscode把\t自动变成变成了2空格

之前是参考了vscode文档示例, 要研究一下哪个vscode选项出了问题(因为之前代码也是在vscode下, 却是4格缩进).

nobodxbodon avatar Feb 03 '19 18:02 nobodxbodon

@RimoChan btw 缩进2格的问题是因为之前在vscode选项里加了全局的"editor.tabSize": 2,. 了之后就好了.

nobodxbodon avatar Feb 03 '19 23:02 nobodxbodon

考虑也添加些常用算法,尤其是排序相关的

nobodxbodon avatar May 21 '20 19:05 nobodxbodon

https://github.com/antfu/wenyan-lang-vscode/issues/16 中发现,prefix 用中文时,可用ctrl+space 触发补全窗口(mac 中测试): Screen Shot 2020-06-03 at 11 51 12 PM 打算接下去在木兰vsc 插件中开始实践。

nobodxbodon avatar Jun 06 '20 08:06 nobodxbodon