编译时间检查以及主脚本字节码存储在Python中的哪个位置?

时间:2017-07-18 05:25:47

标签: python compilation

我是Python的新手,并且需要学习多个在线教程。其中之一是Google for Education

Google's tutorial中有一个部分:

  

运行时检查代码

     

Python在编译时很少检查,几乎全部推迟   类型,名称等检查每一行,直到该行运行。假设   在main()之上调用repeat(),如下所示:

def main():
if name == 'Guido':
    print repeeeet(name) + '!!!'
else:
    print repeat(name)
     

if语句包含一个明显的错误,其中repeat()函数被意外输入为repeeeet()。   Python中有趣的事情......这段代码编译并运行得很好   因为运行时的名称不是'Guido'。只有在跑步实际尝试时   执行repeeeet()会注意到没有这样的   功能并引发错误。这只是意味着当你第一次运行时   Python程序,你看到的一些首要错误将是简单的拼写错误   像这样。这是一个具有更详细类型的语言的区域   像Java这样的系统有一个优势......他们可以捕获这样的错误   编译时间(但当然你必须保持所有类型   信息......这是一种权衡。)

在该部分中有一个很好的运行时检查示例,但没有编译时检查示例。

我很想知道在编译时检查

我在互联网上找不到关于该行的任何内容。每个可能的搜索都会返回有关编译python脚本和模块的信息,例如thisthisthis

修改

编译

python myscript.py(否则我们不会得到错误),然后解释为执行。然后编译过程肯定会产生一个代码(它可能是字节码)。该代码是否存储在内存中而不是将其作为.pyc存储在文件系统中?

编辑2:

有关主脚本字节代码存储在内存中的原因以及编译模块的原因,请参见here

1 个答案:

答案 0 :(得分:1)

  1. 不确定python中的确切编译器过程。但是这里的“小检查”意味着在运行python文件时它将检查所有使用/导入的模块是否存在并且有引用但是它不会检查变量或它的类型。因为在python中我们不使用类型来声明变量。因此,所有这些类型错误在编译时都会被忽略,并且仅在执行期间遇到

  2. 为导入的模块创建一个pyc文件,它们放在包含py文件的同一目录中。但是...没有为您的程序的主脚本创建pyc文件。换句话说......如果你在命令行上调用“python myscript.py”,myscript.py就没有.pyc文件。由于它是主脚本,编译的pyc不会重复使用..但如果它是一个模块(没有main),那么只要导入它就可以重复使用相同的pyc。

  3. 希望它有用!