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使用正则匹配实现抓图代码分享
Apr 02 Python
Python映射拆分操作符用法实例
May 19 Python
Django框架中render_to_response()函数的使用方法
Jul 16 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
浅谈flask中的before_request与after_request
Jan 20 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
python如何对实例属性进行类型检查
Mar 20 Python
python实现简单日期工具类
Apr 24 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
如何利用python正则表达式匹配版本信息
Dec 09 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
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php生成zip文件类实例
2015/04/07 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
班子四风对照检查材料
2014/08/21 职场文书
市场部岗位职责
2015/02/12 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电