python如何解析和评估这些程序?

python如何解析和评估这些程序?,python,Python,在我们开始执行程序逻辑之前,我有点困惑地看到所有符号都没有被解释器检查过 例如,在此列表中: def func_twice(f, x): f(f(x)) def square(x): return x * x result = func_twice(square,2) 结果在全局帧中仍然不可见,直到在运行时对其求值 在这方面: def f(x, y): return g(x) def g(a): return a + y f(1, 2) y在得到评估之前未

在我们开始执行程序逻辑之前,我有点困惑地看到所有符号都没有被解释器检查过

例如,在此列表中:

def func_twice(f, x):
     f(f(x))

def square(x):
   return x * x

result = func_twice(square,2)
结果在全局帧中仍然不可见,直到在运行时对其求值

在这方面:

def f(x, y):
   return g(x)

def g(a):
   return a + y

f(1, 2)
y在得到评估之前未进行语法检查


如果有人说,这是由于解释语言的性质,这就是用python编写企业应用程序的方式,程序员可能会引入许多此类错误,并且在测试之前无法恢复?

这是因为python没有变量声明。在此代码中,当我们声明函数
g
时,我们不知道是否存在
y

def f(x, y):
   return g(x)

def g(a):
   return a + y

y = 3
f(1, 2)

只有在调用
g
时才会对其进行检查,因为在此之前,无法知道它两次
func\u
都不会返回
f(f(x))
;它在没有显式返回语句的情况下返回
None
。你想要

def func_twice(f, x):
    return f(f(x))

您需要自动化的单元测试。这对于动态语言来说是正常的。符号被“审查”到行语法正确的程度,但变量仅在第一次赋值时添加到名称空间。在a+y的情况下,当函数最终被调用时,y可能位于全局命名空间中。如果这对您来说不是企业应用程序,那么还有很多其他语言。“y在得到评估之前没有进行语法检查。”这不是语法检查,而是全局变量查找。语法是正确的,并且在启动时进行了检查。@eric:正如您所说的是glabal变量查找,但我应该在运行python时得到一个提示,y是孤立的,而不是在输入函数git后意识到git是编写return的错别字,我认为有人编辑了我的问题。正如您所说的,这是未知的,对于编写大型应用程序来说,这样的错误可能很多,这是一个不利条件吗?