2013-07-10 6 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, который печатает "Function 'a' called\n" до возвращения 99.

Затем 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.

Смежные вопросы