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类的多重继承问题深入分析
Nov 09 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
django反向解析和正向解析的方式
Jun 05 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
django 模型字段设置默认值代码
Jul 15 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
Python必备技巧之函数的使用详解
Apr 04 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Python异常的检测和处理方法
2018/10/26 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
橄榄树药房:OLIVEDA
2019/09/01 全球购物
生产部主管岗位职责
2014/01/06 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
超市重阳节活动方案
2014/02/10 职场文书
员工拓展培训方案
2014/02/15 职场文书
单位绩效考核方案
2014/05/11 职场文书
新兵入伍决心书
2015/09/22 职场文书