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中的CURL PycURL使用例子
Jun 01 Python
Python的randrange()方法使用教程
May 15 Python
详解在Python中处理异常的教程
May 24 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
python读写json文件的简单实现
Apr 11 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
Python遍历字典方式就实例详解
Dec 28 Python
Python tcp传输代码实例解析
Mar 18 Python
django在开发中取消外键约束的实现
May 20 Python
Python如何读取、写入CSV数据
Jul 28 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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抽象类 介绍
2012/06/13 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
JS实现手风琴特效
2020/11/08 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python元组常见操作示例
2019/02/19 Python
django的ORM模型的实现原理
2019/03/04 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
opencv实现图像几何变换
2021/03/24 Python
质量在我心中演讲稿
2014/09/02 职场文书
导游词之无锡唐城
2019/12/12 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Python预测分词的实现
2021/06/18 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android