Loading... ## 简介 PyCharm 是 Python 的最强 IDE,熟练掌握动态代码模板 Live Template 让编程效率事半功倍 比如想写一段 ```python open('', 'w', encoding="utf-8") ``` 那就得挨个敲完 ## 添加代码片段 打开pycharm-->setting-->Editor-->Live templates-->选择到python  复制一个已有的也可以,新建也行 ## 创建 这里我创建了一个`opw` 内容是 ```python open("$END$", "w", encoding="utf-8") ``` 点击Apply然后点击ok重新打开pycharm,新建一个文件,输入`opw`  就会自动添加代码 ```python open("", "w", encoding="utf-8") ``` ## 内置模版 灵活切换快捷键: * Enter 或 Tab:下一个光标 * Shift + Tab:上一个光标 * Esc:取消提示 ## [动态模板变量](https://www.jetbrains.com/help/pycharm/template-variables.html) 由 Edit variables 里指定  | | | | | --------------------------------------- | ---------------------------------- | -------------------------- | | 参数 | 含义 | 例子 | | **$END$** | 光标所在位置 | main | | $SELECTION$ | 选中区域 | | | blockCommentEnd() | 返回当前上下文中块注释结束的字符 | | | blockCommentStart() | 返回当前上下文中块注释开始的字符 | | | camelCase(<String>) | 将字符串转换为驼峰形式 | | | capitalize(<String>) | 字符串首字母大写 | | | capitalizeAndUnderscore(<String>) | 字符串首字母大写并用下划线连接 | | | **clipboard()** | 返回系统剪贴板内容 | | | collectionElementName() | 移除_list和s结尾 | | | commentEnd() | 返回当前上下文中注释结束的字符 | | | commentStart() | 返回当前上下文中注释开始的字符 | | | complete() | 在变量的位置调用代码完成 | | | completeSmart() | 在变量的位置调用智能代码完成 | | | concat(<String>, …) | 拼接字符串 | | | date([format]) | 返回当前系统日期 | date(“Y-MM-d, E, H:m”) | | dbColumns() | | | | dbObjectName() | | | | decapitalize(<String>) | 字符串首字母小写 | | | defaultReturnValues | | | | djangoBlock | | | | djangoFilter | | | | djangoTemplateTags | | | | djangoVariable | | | | enum(<String>, …) | | | | escapeString(<String>) | 转义特殊字符 | | | expectedType() | | | | fileName() | 返回当前文件名 | | | fileNameWithoutExtension() | 返回当前文件名(不带扩展名) | | | filePath() | 返回当前文件绝对路径 | | | fileRelativePath() | 返回当前文件相对路径 | | | firstWord(<String>) | 返回字符串的第一个单词 | | | **groovyScript(<String>, [arg, …]**) | 执行Groovy脚本 | 见下文 | 例子: Template text ```python print('$var$', $cam$) ``` Edit variables 中设置 cam 的 Expression 为 `camelCase(var)` ## 带参数的装饰器模板 ```python def decorator(arg1, arg2): def wrapper(func): def deco(*args, **kwargs): $END$ func(*args, **kwargs) return deco return wrapper ``` ## 保存和加载 保存单个:右键 → Copy  动态代码模板文件存放在:`%homepath%\PyCharm目录\templates\Python.xml` 如本人的为: `C:\Users\Administrator\AppData\Roaming\JetBrains\PyCharm2020.3\templates\Python.xml` ## 定义类 Template text ```python class $ClassName$($Object$): """$Docstring$""" def __init__(self, $Arg$): $Super$ self.$Arg$ = $Arg$ $Code$ $END$ ``` Edit variables 效果(Tab 或 回车换到下一个变量) ## 定义方法 ### defm Define method ```python def $name$(self, $arg$): """$doc$""" $END$ ``` ### defc Define classmethod ```python @classmethod def $name$(cls, $arg$): """$doc$""" $END$ ``` ### defs Define staticmethod ```python @staticmethod def $name$($arg$): """$doc$""" $END$ ``` ## 批量设置参数 | Abbreviation | Description | Template text | 功能 | | -------------- | ------------------------ | --------------- | ------------------ | | bs | Batch set variable | $var$ | 批量设置self参数 | | dbs | Dot batch set variable | $a$$var$ | 批量设置.参数 | Edit variables → var 的 Expression ```js groovyScript("def result=''; _1.split(', ').each{i -> result+='self.'+i+' = '+i+System.lineSeparator()}; return result;", clipboard()); // groovyScript("def result=''; def params=\"${_1}\".split(', '); for(String i: params) {result+='self.'+i+' = '+i+'\\n';}; return result;", clipboard()) ``` ```js groovyScript("def result=''; _1.split(', ').eachWithIndex{i, index -> if(index==0){result+='.'+i+' = '+i+System.lineSeparator();} else{result+=_2+'.'+i+' = '+i+System.lineSeparator()}}; return result;", clipboard(), a); ``` 效果(需要先复制)   # 一些模板 | Abbreviation | Description | Template text | 功能 | | -------------- | -------------------------------- | ----------------------------------------------------------------------------------- | --------------------------- | | lc | list comprehension | [i for i in$END$] | 列表推导式 | | sc | Set comprehension | {i$2$ for i in $1$} | 集合推导式 | | dc | Dict comprehension | {i: i for i in$END$} | 字典推导式 | | dc1 | Dict comprehension1 | {k: v for k, v in$END$.items()} | 字典推导式1 | | pdir | Show documentation | import pdir print(pdir($END$)) | 快速显示文档 | | #! | Specify the Python interpreter | #!/usr/bin/env python | 指定Python解释器 | | u8 | Specify the Python coding | #-*- coding: utf-8 -*- | 指定Python编码 | | todo | TODO | # TODO:$END$ | 待办 | | fixme | FIXME | # FIXME:$END$ | 需要修复 | | se | Set instance variable | self.$var$ = $var$ $END$ | 设置参数 | | pr | Print formatted string | print(‘{}’.format($args$)) | 打印格式化字符串 | | sel | Peewee select | $1$.select().where($2$) | Peewee的select语句 | | selw | Peewee select with where | $1$.select().where($1$.$2$ == $2$) | Peewee的select语句带where | | qxzs | 取消注释 | # FIXME: 取消注释$END$ | 取消注释 | | meta | APIFlask的metadata | metadata={‘description’: ‘$END$’} | APIFlask的metadata | | region | PyCharm region | # region$END$ # endregion | PyCharm代码块注释 | | compds | Dict set comprehension | reduce(lambda d, i: d[i.$KEY$].add(i.$VALUE$) or d, $ITERABLE$, defaultdict(set)) | 集合字典推导式 | 最后修改:2024 年 05 月 31 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏