我是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脚本和模块的信息,例如this,this和this。
修改
编译 python myscript.py
(否则我们不会得到错误),然后解释为执行。然后编译过程肯定会产生一个代码(它可能是字节码)。该代码是否存储在内存中而不是将其作为.pyc
存储在文件系统中?
编辑2:
有关主脚本字节代码存储在内存中的原因以及编译模块的原因,请参见here。
答案 0 :(得分:1)
不确定python中的确切编译器过程。但是这里的“小检查”意味着在运行python文件时它将检查所有使用/导入的模块是否存在并且有引用但是它不会检查变量或它的类型。因为在python中我们不使用类型来声明变量。因此,所有这些类型错误在编译时都会被忽略,并且仅在执行期间遇到
为导入的模块创建一个pyc文件,它们放在包含py文件的同一目录中。但是...没有为您的程序的主脚本创建pyc文件。换句话说......如果你在命令行上调用“python myscript.py”,myscript.py就没有.pyc文件。由于它是主脚本,编译的pyc不会重复使用..但如果它是一个模块(没有main),那么只要导入它就可以重复使用相同的pyc。
希望它有用!