overview
overview copied to clipboard
通过IDE扩展提供常用功能的例程/片段
源自https://github.com/program-in-chinese/overview/issues/11#issuecomment-417743692 比如vscode下的snippet功能(详见VS Code创建自定义Python代码片段):
参考"Python Cookbook第三版", 把计划中的先分功能块列举如下, 第一章是数据结构/算法:
- (参考1.3) 保持一系列元素的最后N个(用
deque
) - (参考1.4) 获取列表中最大的N个值 (可按key排序). 如取数量最大的两个物品名称:
货品清单 = [{'名称': '台式机', '数量': 5}, {'名称': '笔记本', '数量': 10}, {'名称': '显示器', '数量': 15}]
- (1.6) 新建1:N的字典, 如
{
'奇数': {1, 3, 5},
'偶数': {2, 4, 6}
}
{
'奇数': [1, 3, 5],
'偶数': [2, 4, 6]
}
- (1.7) 保持添加次序的字典, 用
OrderedDict
- (1.8) 字典按值求最小/大, 以及排序(用
zip
). 如取数量最大/小的物品:
货品清单 = {
'台式机': 5,
'笔记本': 10,
'显示器': 15
}
- (1.9) 求两个字典的重合部分(键, 键&值):
仓库1 = {
'台式机': 5,
'笔记本': 10,
'显示器': 15
}
仓库2 = {
'键盘': 5,
'笔记本': 20,
'显示器': 15
}
- (1.10) 从列表中删去重复元素, 并保持原顺序
- (1.12) 获取列表中出现频率最高的元素
- (1.13) 按照某个共通的键排序一系列字典, 如按笔记本数量排序No.5中的仓库
- (1.14) 按照对象中的某个属性进行排列, 如按
用户
类的用户id
对几个用户进行排序:
class 用户:
def __init__(self, 用户id):
self.用户id = 用户id
def __repr__(self):
return '用户({})'.format(self.用户id)
- (1.15) 按照对象中的某个值分类一批对象, 如将一批人按照生日月份分组
- (1.16) 按照某个条件过滤列表中的元素
- (1.17) 从字典中按照某个条件提取一个子集
- (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.19) 同时转换与reduce, 如下, 还可用于
any
,min
, max`等:
sum(x *x for x in range(1, 4))
- (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 欢迎意见建议.
应该能起到加快速度的作用。相比起整理成函数还是有一定好处的,比如需要某个功能的时候并不好「import 我的常用功能」……
我觉得实际上要用到的地方不多,有时候我倒是会选择效率低一些但是代码短的方法……
对了,python规范是4空格缩进,你的gif里vscode把\t自动变成变成了2空格
@RimoChan 多谢
相比起整理成函数还是有一定好处的
感觉相对灵活些, 但也是刚接触, 之前也不大用, 先自己试试.
有时候我倒是会选择效率低一些但是代码短的方法
嗯, 现在觉得这个主要用户群也许是不熟悉Python但不时用来完成一些日常事务的, 越是熟练开发者这个插件的价值会越小.
你的gif里vscode把\t自动变成变成了2空格
之前是参考了vscode文档示例, 要研究一下哪个vscode选项出了问题(因为之前代码也是在vscode下, 却是4格缩进).
@RimoChan btw 缩进2格的问题是因为之前在vscode选项里加了全局的"editor.tabSize": 2,
. 改了之后就好了.
考虑也添加些常用算法,尤其是排序相关的。
https://github.com/antfu/wenyan-lang-vscode/issues/16 中发现,prefix 用中文时,可用ctrl+space 触发补全窗口(mac 中测试):
打算接下去在木兰vsc 插件中开始实践。