python-3.x 问题20.下面程序中各行的执行顺序是什么?[duplicate]

sqxo8psd  于 2022-12-14  发布在  Python
关注(0)|答案(2)|浏览(98)

此问题在此处已有答案

What is a debugger and how can it help me diagnose problems?(2个答案)
8小时前关门了。
以下程序中各行的执行顺序是什么?

def f1(x): #1
 temp = x + 1 #2
 return temp #3
def f2(y): #4
 t = y -1 #5
 v = f1(t) #6
 return v #7
 #8
print(f2(5)) #9

字符串
答案(选择一项):
a)1-2-3-4-5-6-7-9
B)1-4-9-4-5-6-1-2-3-6-7-9
c)1-2-3-4-5-6-7-9-4-5-6-7
d)1-4-9-4-5-6-1-2-3-6
e)以上都不是
这里他们说答案是e(以上都不是),但是我不确定python执行这些行的正确顺序是什么。我怎么知道每个不同的函数?

t9eec4r0

t9eec4r01#

在您的代码中有2 functions,这些2 functions在调用时运行,因此首先执行调用f2函数的第9行,它将运行到#6行,然后f2函数调用另一个函数f1,现在f1函数将开始执行,直到结束,然后到达f2初始化v,然后执行返回的7th行,最后将打印语句..!

w8f9ii69

w8f9ii692#

您可以通过定义一个带有故意引入的错误的函数来解决这里的关键点。例如,

def f(x):
    return squirt

假设squirt未在全局范围内定义(在函数定义之外),则调用此函数将导致错误

NameError: name 'squirt' is not defined

但是,请注意,使用def f(x)define 函数是完全可以接受的,这意味着在执行 * define * 函数(def f(x))的行时,函数的行不会以任何方式执行。
只有当函数被 * 调用 * 时,才会执行函数的行(不重新执行定义)。
另外一点,询问何时执行行,何时行包含对另一个函数的调用,似乎有点模棱两可(例如,第6行)。然而,第6行中包含的赋值实际上不能发生,直到赋值表达式右侧的值被求值。因此,您可以说第6行-赋值-是在第2行和第3行执行 * 之后 * 执行的。同样,在解析对f2的调用之前,无法执行line#9。
将这些要点结合起来,并结合Python代码是从上到下读取的这一事实,答案将是

1-4-5-2-3-6-7-9

相关问题