2013-07-10 70 views
5

下面的代码:订购输出

def a 
    print "Function 'a' called\n" 
    99 
end 

print "a=", a, "\n" 

生产:

Function 'a' called 
a=99 

为什么function 'a' called显示第一?我预计首先会显示a=

回答

8

首先,您定义方法a;还没有打印。

然后,当你到了最后一行时,参数print首先是语句打印任何东西之前评估。第一个和最后一个参数是字符串文字。中间的说法是对的方法a,这回99

然后打印前一个"Function 'a' called\n"调用,print语句开始这一切终于准备,现在每个参数进行了评估打印。

11

在将参数传递给方法之前,将对它们进行评估(以便您有要传递的值)。对功能a的调用的评估具有印刷"function 'a' called的副作用。这就是它首先被打印的原因。

3

首先,该方法a被完全执行,包括print "Function 'a' called\n"。只有在方法返回99后,才能执行行print "a=", a, "\n"

认为它是这样的:需要,才可以在最后一行打印被称为的a返回值。

1

声明

print "a=", a, "\n" 

被处理为

print("a=", a(), "\n") 

因此它被称为前的各项参数调用print必须进行评估。这意味着首先拨打a

如果声明是首先输出a=,则在致电a()之前,它必须包含三个独立调用print