【发布时间】:2015-07-09 18:28:30
【问题描述】:
a = 0
def f():
global a
a = 1
print(a)
print(a, f(), a)
上面代码的输出结果如下:
1
0 None 1
为什么在打印第一个参数a之前调用函数f?为什么第一个参数的值是0,即使在函数调用之后?
【问题讨论】:
标签: python python-3.x function-call
a = 0
def f():
global a
a = 1
print(a)
print(a, f(), a)
上面代码的输出结果如下:
1
0 None 1
为什么在打印第一个参数a之前调用函数f?为什么第一个参数的值是0,即使在函数调用之后?
【问题讨论】:
标签: python python-3.x function-call
你得到的输出是:
1
0 None 1
当您调用print() 时,它会首先计算要打印的元素。正如您在f() 中拥有print(a) 一样,您首先得到的是1。然后,它开始打印。在调用函数之前a 的值是0。当您打印一个不返回任何内容的函数时,您会得到None。在全局更改值时,最后会得到 1。
【讨论】:
您的函数正在打印,而不是返回,因此在调用 f() 时没有任何价值。
基本上,事情的顺序是这样的:解释器看到打印,评估a(它是零),然后看到它需要在知道要打印什么之前评估f(),调用f,这会让你得到1 打印在上面,然后再次评估 a(现在是 1)。该行被打印。
【讨论】:
函数调用之后不是0,而是之前。 第二个打印语句中的第一个 a 在调用 f 之前传入。 为什么要打印 f()?它什么都不返回(无)
【讨论】:
Python 将首先运行 a = 0 行,然后定义 - 但不运行 - 函数 f(),然后运行 print(a,f(),a) 调用。因此,第一次打印将是a,在它被定义为 0 之后,然后第二次打印将调用函数f(),它没有返回,因此将打印None。最后,您将打印f() 分配给a 的值,即1。
【讨论】: