Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
nobodxbodon opened this issue Feb 1, 2019 · 6 comments
Open

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

nobodxbodon opened this issue Feb 1, 2019 · 6 comments

Comments

@nobodxbodon
Copy link
Member

源自#11 (comment) 比如vscode下的snippet功能(详见VS Code创建自定义Python代码片段):
2019-01-29-vscode

@nobodxbodon
Copy link
Member Author

nobodxbodon commented Feb 3, 2019

参考"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 欢迎意见建议.

@RimoChan
Copy link
Member

RimoChan commented Feb 3, 2019

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

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

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

@nobodxbodon
Copy link
Member Author

@RimoChan 多谢

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

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

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

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

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

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

@nobodxbodon
Copy link
Member Author

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

@nobodxbodon
Copy link
Member Author

nobodxbodon commented May 21, 2020

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

@nobodxbodon
Copy link
Member Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants