好吧,我不是一个很好的python程序员,但我会说答案是肯定的。

任何允许您随时创建具有任何名称的变量的动态语言都可以使用“strict”pragma。

Perl中的Strict vars(Perl中Strict的选项之一,“use Strict”一次将所有变量都打开)要求在使用之前声明所有变量。这意味着该代码:my $strict_is_good = 'foo';

$strict_iS_good .= 'COMPILE TIME FATAL ERROR';

在编译时生成致命错误。

我不知道如何让Python在编译时拒绝此代码:strict_is_good = 'foo';

strict_iS_good += 'RUN TIME FATAL ERROR';

您将得到一个运行时异常,即strict_iS_good未定义。但只有在代码被执行的时候。如果您的测试套件没有100%的覆盖率,您可以很容易地发布这个bug。

每当我在一种没有这种行为的语言(例如PHP)中工作时,我都会感到紧张。我不是一个完美的打字员。一个简单但很难发现的错误会导致代码以很难追踪的方式失败。

因此,重申一下,YESPython可以使用“strict”pragma来启用编译时检查,以检查在编译时可以检查的内容。我想不出还有什么可以添加的检查,但是一个更好的Python程序员可能会想到一些。

注意我关注Perl中stict vars的实用效果,并对一些细节进行了润色。如果你真的想知道所有的细节,请看the perldoc for strict。

更新:对一些评论的回复

Jason Baker:像pylint这样的静态检查程序很有用。但它们代表了一个额外的步骤,可以而且经常被跳过。在编译器中构建一些基本检查可以保证这些检查的执行是一致的。如果这些检查是由pragma控制的,那么甚至与检查成本有关的反对意见也就没有意义了。

popcnt:我知道python将生成运行时异常。我也这么说了。我主张尽可能进行编译时检查。请重读这篇文章。

mpeters:没有一个代码的计算机分析可以找到所有错误——这等于解决了停止问题。更糟糕的是,要在赋值中找到拼写错误,编译器需要知道您的意图并找到您的意图与代码不同的地方。这显然是不可能的。

但是,这并不意味着不应该进行检查。如果有一类问题很容易被发现,那么就有必要去捕捉它们。

我对pylint和pychecker还不够熟悉,不知道它们会捕获哪些类的错误。正如我所说,我对python非常缺乏经验。

这些静态分析程序很有用。但是,我相信除非它们复制了编译器的功能,否则编译器总是能够比任何静态检查器“了解”更多关于程序的信息。在可能的情况下,不利用这一点来减少错误似乎是浪费。

更新2:

理论上,我同意你的观点,静态分析器可以做任何编译器可以做的验证。对于Python来说,这就足够了。

但是,如果编译器足够复杂(特别是如果有很多改变编译方式的pragma,或者像Perl一样,可以在编译时运行代码),那么静态分析器必须接近编译器/解释器的复杂度才能进行分析。

嘿,所有关于复杂编译器和在编译时运行代码的讨论都显示了我的Perl背景。

我的理解是,Python没有pragmas,不能在编译时运行任意代码。所以,除非我错了或者添加了这些特性,否则静态分析器中相对简单的解析器就足够了。在每次执行时强制执行这些检查肯定会有帮助。当然,我这样做的方式是用一个pragma。

一旦将pragmas添加到组合中,就可以开始dow了在一个不稳定的斜坡上,分析器的复杂性必须与您在pragmas中提供的能力和灵活性成比例地增长。如果你不小心,你可以像Perl一样结束,然后“只有python可以解析python”,我不想看到未来。

也许命令行开关是添加强制静态分析的更好方法;)

(当我说Python不能像Perl那样使用编译时行为时,决不打算指责它的能力。我预感这是一个经过深思熟虑的设计决定,我可以从中看出其中的智慧。Perl在编译时的极端灵活性是,IMHO,这是语言的一大优势和一个可怕的弱点;我也看到了这种方法的智慧。)

python需要编译器吗_是否需要“使用严格”的Python编译器?相关推荐

  1. python具体工作内容_有没有人知道公司里用python工作的内容有什么

    2018-07-11 回答 python的特色 简单 python是一种代表简单主义思想的语言.阅读一个良好的python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!python的这种伪代 ...

  2. 经典python项目源码_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  3. python迷你停车管理系统_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  4. python的电脑推荐_推荐8款常用的Python GUI图形界面开发框架

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好的选择,欢迎在评论区留言. Python 的 UI 开发工具 ...

  5. python作者龟叔_龟叔和他的Python

    经过了漫长的旅程,终于要看到主角Python了.Python是现在非常非常流行的编程语言,在我们能看到的大部分编程语言排行榜中,Python都能在前三甲中拥有一席之地 ,并且发展势头非常之猛,可以这么 ...

  6. python主要用于系统编程_一文带你了解python是什么?能做什么?为什么(附赠40G项目实战+绝版电子书)...

    什么是 Python? Python 是一门流行的编程语言.它由 Guido van Rossum 创建,于 1991 年发布. 它用于:当然小编这里也准备一份适合你的学习资料爬虫 ,python学习 ...

  7. python最好的教程_喜大普奔~可能是最好的Python教程

    2019年,Python正式登顶世界第一编程语言,简直就是炙手可热!Python对新手极其友好.对于初学者来说,Python极其容易.它被认为是最简单方便的语言之一,简化的人性化语法是一方面,快速编写 ...

  8. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

    前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...

  9. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢

    很多时候我们都会有一个麻烦事,就是打开pycharm或者VScode等的时候,都有可能因为自己电脑上面安装的第三方模块过多,导致电脑很卡,风扇转速不停地增加,这时候我们就会想去卸载一些不太用得着的第三 ...

最新文章

  1. hic染色体构想_了解微服务:从构想到起点
  2. 德国艺术家用99部手机成功在Google地图上制造交通阻塞
  3. module 'matplotlib' has no attribute 'verbose'
  4. 2017.0322.数字电路与系统-触发器
  5. 【工具篇】抓包中的王牌工具—Fiddler (1-环境搭建)
  6. matlab中rsa,matlab - Matlab中的RSA代码 - 堆栈内存溢出
  7. C++中重写与覆写(虚函数virtual)的区别
  8. 《复联》里的黑科技距离现实有多近?
  9. python字符串函数split_Python常见字符串操作函数小结【split()、join()、strip()】
  10. android 敏感词过滤器,android 过滤敏感词主要类
  11. hibernate中持久化类的编写规则和主键生成策略
  12. Qt --- 基础知识
  13. mkdir 创建目录命令
  14. 女人假正经的十三种表现
  15. 什么是做空? 什么是做空和做多离岸人民币?
  16. 回溯法求解图着色问题
  17. html中切角文本框,HTML/CSS实现切角矩形效果
  18. TypeScript看完就会了
  19. 五笔字型输入规则-温故而知新
  20. 福布斯发布2019年度全球亿万富豪榜:贝佐斯蝉联首富 马化腾马云上榜

热门文章

  1. wxWidgets:wxFileType类用法
  2. boost::process::async_pipe相关的测试程序
  3. boost::fibers::buffered_channel的测试程序
  4. boost::asio::ip::tcp实现阻塞tcp echo客户端的程序
  5. boost::date_time模块测试时间分辨率特征
  6. ITK:使用地标将图像注册到另一个图像
  7. VTK:图片之ImageNonMaximumSuppression
  8. OpenCV Laplace point/edge detection拉普拉斯点/边缘检测的实例(附完整代码)
  9. Qmake变量variable
  10. C++将数字A转换为数字B所需的翻转次数算法实现(附完整源码)