3种适用于Python的疯狂秘密武器及原因解析
作者:闻数起舞 发布时间:2023-02-08 09:10:30
我不知道没有他们我该如何生活
我编写Python已有5年以上了,我的工具集通常变得越来越小,而不是越来越大。 许多工具不是必需的或无用的,而其中的一些只是简单地增加了。
这是我坚持了很长时间的三个,与其他人不同,我只是越来越多地使用它们。
秘密武器#1:使用Kite可以更快地编写代码,减少Google编写时间
大多数代码编辑器具有自动完成功能,看起来像这样:
…使用语言(有时是库)文档来建议函数名称和参数之类的内容。
当然可以,但是如果您的编辑器可以浏览GitHub数据多年并自动完成,不仅是函数名,还可以是整行代码。
这只是使用Kite的三个理由中的第一个。
原因1:代码行完成
风筝会检查您的代码库和变量,在线使用的常用参数名称,文档,然后提出如下超级上下文建议:
上面的示例展示了Kite如何预测您将在通用名称(如b)或通用名称(如x或y)中使用的变量。
…我们已经花费了大约50年的工程师工作时间,在Github上对所有代码进行语义索引,建立统计类型推断,以及丰富的统计模型,这些模型可以非常深入地使用此语义信息。 — Kite创始人/首席执行官Adam Smith
这是一个实时演示视频,或者,如果您愿意,可以在沙盒中播放。
原因2:副驾驶进行文档编制
如果您从未听说过" 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"。 它通常在不运行代码的情况下查看代码,并尝试猜测可能出了什么问题。 这称为静态代码分析。
动态代码分析实际上会尝试运行/编译部分代码以查看其是否正常运行,但会在后台自动执行。 实际上,它无需猜测,而是知道它是否可以工作以及确切的错误是什么。
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编辑器插件更快地发现错误并编写更简单的函数
希望这些工具对您有好处,我本人也非常喜欢它们。 我敢肯定,尽管我错过了其他一些不可思议的资源,所以请务必分享您在评论中没有的生活。
来源:http://developer.51cto.com/art/202004/615582.htm
猜你喜欢
- 前言嗨喽!大家好呀,这里是魔王~雪球,聪明的投资者都在这里 - 4300万投资者都在用的投资社区,沪深港美全球市场实时行情,股票基金债券免费
- 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解。那么我们来分析下两位大神 次碳酸钴 和
- 1、保存整个网络结构信息和模型参数信息:torch.save(model_object, './model.pth')直接加
- set 是一个无序的元素集合,支持并、交、差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引、分片等类序列的操作。初始化
- 计算Python Numpy向量之间的欧氏距离,已知vec1和vec2是两个Numpy向量,欧氏距离计算如下:import numpydis
- 这篇文章主要介绍了简单了解django三种文件下载方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 学习前言我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。Py
- 微信这个东西估计宅男没几个不熟悉的吧,微信经过这么两年多的发展终于向开放平台跨出了友好的一步。蛋疼的以为微信会出一个详细的api等接口,兴奋
- 这些对文本的操作经常用到, 那我就总结一下。 陆续补充。。。操作:strip_html(cls, text) 去除html标签separat
- 本文实例为大家分享了python实现图书借阅系统的具体代码,供大家参考,具体内容如下部分代码:from flask import Flask
- 这一段CSS代码相当简单,目的就是想用CSS来控制某段文字的显示与隐藏。起初我采用了下面的代码,令人不可思议的是,它们在我的IE6.0上居然
- ASP中查询数据库记录写入XML文件示例,把下面代码保存为Asp_XML.asp运行即可: &
- PHP 中文工具类,支持汉字转拼音、拼音分词、简繁互转。PHP Chinese Tool class, support Chinese pi
- 什么是字符串格式化,为什么需要这样做?我们有时候刷抖音/B站看到封面很好看,但是进入直播发现,不过如此!想必主播通过某种方式把输出转换为读者
- 前言最近突然对爬虫有了一点兴趣,所以打算学一下爬虫,但是在安装使用一些库时,遇到了一些不小的麻烦,对于我来说,最麻烦的就是配置环境了,老是有
- 前言Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便。wifi跟我们的生活
- 1. 为什么要使用正则表达式?首先,大家来看一个例子。一个文本文件里面存储了一些市场职位信息,格式如下所示:Python3 高级开发工程师
- 本文实例讲述了python回溯法实现数组全排列输出的方法。分享给大家供大家参考。具体分析如下:全排列解释:从n个不同元素中任取m(m≤n)个
- 使用程序难免会有出错的时候,如何从大篇代码中找出错误,不仅考验能力,还要考验小伙们的耐心。辛辛苦苦敲出的代码运行不出结果,非常着急是可以理解
- 目录主页分析代码:修改视图函数返回值修改 URL 规则修改视图函数名总结追溯到最初,Flask 诞生于 Armin Ronacher 在 2