首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解Python“编译”或“解释”函数对象的方式

理解Python“编译”或“解释”函数对象的方式
EN

Stack Overflow用户
提问于 2014-02-24 04:31:17
回答 1查看 198关注 0票数 0

我读过下面的文章,但我仍然不确定。

  1. Python Compilation/Interpretation Process
  2. Why python compile the source to bytecode before interpreting?

如果我有一个myfunctions.py文件,其中包含以下代码。

代码语言:javascript
运行
复制
x  = 3
def f():
    print x
    x = 2

然后,说$ python myfunctions.py运行得非常好。但是现在对上面的文件做一个小小的更改。新文件如下所示。

代码语言:javascript
运行
复制
x  = 3
def f():
    print x
    x = 2
f() # there is a function call now

这一次,代码会发出一个错误。现在,我试着理解这种行为。到目前为止,这些都是我的结论。

  • Python为x=3创建字节码
  • 它创建函数对象f,快速扫描并有字节码,该字节码讨论f范围内的局部变量,但请注意,Python中所有语句的字节码都不太可能被构造。
  • 现在,Python遇到一个函数调用,它知道这个函数调用是合法的,因为讨论函数对象f及其局部变量的最小字节码是存在的。
  • 现在,解释器负责执行字节码,但是从最初的内存占用来看,它知道x是一个局部变量,并在这里说:“为什么要在分配之前打印呢?”

有人能对此发表意见吗?提前谢谢。如果这件事之前已经被处理过了,我很抱歉。

EN

回答 1

Stack Overflow用户

发布于 2014-02-24 04:39:56

姆吉尔森得到一半的答案。

另一半是Python不会在函数(或函数对象)中寻找语法错误以外的错误,它不会执行。因此,在第一种情况下,由于f()没有被调用,所以不检查操作顺序错误。

在这方面,它不像C和C++,它们要求所有的东西都要预先声明。这有点像C++模板,在这些模板代码中的错误可能在代码实例化之前才会被发现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21978925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档