3种适用于Python的疯狂秘密武器及原因解析


Posted in Python onApril 29, 2020

我不知道没有他们我该如何生活

我编写Python已有5年以上了,我的工具集通常变得越来越小,而不是越来越大。 许多工具不是必需的或无用的,而其中的一些只是简单地增加了。

这是我坚持了很长时间的三个,与其他人不同,我只是越来越多地使用它们。

3种适用于Python的疯狂秘密武器及原因解析

秘密武器#1:使用Kite可以更快地编写代码,减少Google编写时间

大多数代码编辑器具有自动完成功能,看起来像这样:

3种适用于Python的疯狂秘密武器及原因解析

…使用语言(有时是库)文档来建议函数名称和参数之类的内容。

当然可以,但是如果您的编辑器可以浏览GitHub数据多年并自动完成,不仅是函数名,还可以是整行代码。

这只是使用Kite的三个理由中的第一个。

原因1:代码行完成

风筝会检查您的代码库和变量,在线使用的常用参数名称,文档,然后提出如下超级上下文建议:

3种适用于Python的疯狂秘密武器及原因解析

上面的示例展示了Kite如何预测您将在通用名称(如b)或通用名称(如x或y)中使用的变量。

…我们已经花费了大约50年的工程师工作时间,在Github上对所有代码进行语义索引,建立统计类型推断,以及丰富的统计模型,这些模型可以非常深入地使用此语义信息。 — Kite创始人/首席执行官Adam Smith

这是一个实时演示视频,或者,如果您愿意,可以在沙盒中播放。

原因2:副驾驶进行文档编制

3种适用于Python的疯狂秘密武器及原因解析

如果您从未听说过" RTFM",那么您可能还没有犯过我的错误。

无论如何,在给高级开发人员打电话或什至查看Stack Overflow答案之前,都应始终阅读文档。

Kite Copilot使文档愚蠢容易。 它与您的编辑器一起运行,并实时显示您用光标突出显示的任何对象/功能/等的文档。

亲爱的高级开发人员,我的第一份工作:对不起。 现在,我真的没有借口不首先在文档中寻找答案。

原因3:在本地私人运行

它是在本地运行的所有基础之上,因此您可以获得令人难以置信的快速建议,它可以脱机工作,并且您的代码永远不会发送到云中。

对于互联网连接较差的人和在封闭源代码库中工作的人们来说,这是非常重要的。

结果

我使用风筝已有多年了,而且一直在不断进步。 凭借超过1700万美元的投资,这家公司无处不在,而且由于某些愚蠢的原因,该工具是完全免费的。

您所要做的就是为您的编辑器下载Kite插件,或者下载副驾驶,它可以为您安装插件。 去实现它(梦想);去得到它(东西!

秘密武器2:使用Mypy稳定您的代码

Python是动态类型的,一个过分简化的解释是您可以随时将任何变量设为任何数据类型(字符串,整数等)。

# These two variable types are declared the exact same way 
# Python figures out the data type on it's own, dynamically 
# string 
var_name = "string here" 
# integer 
var_name = 1234

相反的是静态类型化的语言,其中变量必须具有一种特定的数据类型,并且必须始终遵循该数据类型。

# Many languages require the data type to be declared too 
# string 
str var_name = "string here" 
# integer 
int var_name = 1234

动态类型的优点/缺点

动态键入的优点是您在编写时可以很懒惰,并且可以减少代码混乱。

缺点很多,但也很大:

  • 在开发周期的后期,您通常会遇到错误
  • 由于Python不断找出类型,因此代码的执行效果更差
  • 函数不稳定,因为其输入和输出可以更改数据类型而不会发出警告
  • 交出代码会更加不稳定,因为其他人可能不知道您的变量是或可能成为哪种数据类型

Python中的静态类型

输入Mypy。 一个免费的Python模块,可让您在Python内部使用静态类型。

点安装mypy之后,下面仅是一个使用示例:

# Declaring a function using normal dynamic typing, without mypy 
def iter_primes(): 
# code here 
# Declaring the same function with mypy static typing 
 from typing import Iterator 
 def iter_primes() -> Iterator[int]: # code here

在mypy示例中,我们指定该函数返回一个整数迭代器。 通过执行一致的输出,此简单的更改使该功能更适应未来的需求。

其他开发人员只需查看声明即可查看输出将是哪种数据类型,并且与仅使用文档不同,如果不遵守该声明,您的代码将出错。

这是一个非常简单的示例,摘自此处的示例,如果仍然没有意义,请检查一下它们。

结果

很难列出静态键入可以减轻您将来痛苦的所有方式,但是mypy文档具有很好的常见问题解答,但有更多的利弊。

如果您在稳定至关重要的生产代码库中工作,请绝对尝试一下mypy。

秘密武器#3:使用Sonarlint更快地发现错误并编写更简单的函数

如今,每个编辑器都有某种类型的错误检查或内置的" lint"。 它通常在不运行代码的情况下查看代码,并尝试猜测可能出了什么问题。 这称为静态代码分析。

3种适用于Python的疯狂秘密武器及原因解析

动态代码分析实际上会尝试运行/编译部分代码以查看其是否正常运行,但会在后台自动执行。 实际上,它无需猜测,而是知道它是否可以工作以及确切的错误是什么。

SonarLint处于最佳状态,是动态代码分析领域的佼佼者。 这些功能是我喜欢它的原因:

注释或未调用的代码

我对在整个代码库中留下打印语句,注释掉的代码以及未使用的函数感到内gui。 这将警告我,使其难以忘记,并告诉我它在哪里,易于查找。

安全风险

实时将庞大的,不断更新的安全风险数据库扔到您的代码库中,警告您可能面临的任何已知漏洞。

安全风险非常小众,无法记住,因此每个人都应该使用某种方法来跟踪这些风险。 SonarLint是一个不错的起点。

永远不会执行的代码

与未调用的代码略有不同,如果我创建的评估结果无法达到,这将警告我。 这些问题很难发现,可能会导致数小时的调试,因此这是我最喜欢的警告之一。

这是一个例子:

a = None 
if a == None or not a or a: 
 this_will_always_get_called() 
else: # sonarlint will warn you about this line never being executed 
 this_will_never_get_called()

认知复杂性

我可以写一个完整的帖子,这是一个非常有趣的话题,实际上,上面有一个完整的白皮书。

简单的解释是,他们创建了一个数学公式,可以对代码的阅读/理解难度进行评分。

它不仅非常有用,而且易于遵循。 每当SonarLint要求我"降低认知复杂性"时,它都会附带一个关于我违反的规则的简单说明,例如"太多嵌套的if语句"。

结果

我发现这比基本的阻止和掉毛实践有用,而且我相信这使我编写了对人类友好的代码。 顺便说一句,这是Pythonic!

SonarLint是免费的,因此没有理由不立即获取它并将其附加到您的编辑器中。

结论

如果您在此处跳过,则只是一个快速警告,除非您对这些功能有基本的了解,否则可能无法正确使用它们。

以下是这三种秘密武器的概述:

  • 使用Kite Copilot和编辑器插件更快地编写Google内容
  • 使用Mypy Python模块稳定代码
  • 使用SonarLint编辑器插件更快地发现错误并编写更简单的函数

希望这些工具对您有好处,我本人也非常喜欢它们。 我敢肯定,尽管我错过了其他一些不可思议的资源,所以请务必分享您在评论中没有的生活。

到此这篇关于3种适用于Python的疯狂秘密武器的文章就介绍到这了,更多相关Python的疯狂秘密武器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
跟老齐学Python之集合的关系
Sep 24 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
Python实现的桶排序算法示例
Nov 29 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
python 读取文件并替换字段的实例
Jul 12 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Pytorch十九种损失函数的使用详解
Apr 29 #Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 #Python
Python爬虫工具requests-html使用解析
Apr 29 #Python
Python基于Hypothesis测试库生成测试数据
Apr 29 #Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 #Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 #Python
Django分组聚合查询实例分享
Apr 29 #Python
You might like
javascript 小型动画组件与实现代码
2010/06/02 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
关于php开启错误提示的总结
2019/09/24 PHP
jQuery的一些注意
2006/12/06 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
微信小程序 标签传入数据
2017/05/08 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
python分割列表(list)的方法示例
2017/05/07 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
浅析python内置模块collections
2019/11/15 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
缓刑人员的思想汇报
2014/01/11 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
英文自荐信范文
2015/03/25 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
旅行社计调工作总结
2015/08/12 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL