2013-07-10 27 views
5

poniższy kod:Zamówienie wyjścia

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

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

produkuje:

Function 'a' called 
a=99 

Dlaczego function 'a' called pokazać pierwszy? Spodziewałem się, że najpierw pojawi się a=.

Odpowiedz

8

Najpierw należy zdefiniować metodę: a; nic nie jest jeszcze wydrukowane.

Następnie, gdy dojdziesz do ostatniego wiersza, argumenty do print są najpierw sprawdzane zanim ta instrukcja wypisze cokolwiek. Pierwszy i ostatni argument to literały łańcuchowe. Bliski argument jest wywołanie metody a, która drukuje "Function 'a' called\n" przed powrotem 99.

Następnie oświadczenie print który rozpoczął to wszystko jest już gotowe do wydrukowania teraz, że każdy z jej argumentów zostało ocenione.

11

Zanim argumenty zostaną przekazane do metody, są one oceniane (tak, że masz wartości do przekazania). Ocena wywołania funkcji a ma skutek uboczny drukowania "function 'a' called. Właśnie dlatego jest drukowany jako pierwszy.

3

Po pierwsze, metoda a jest wykonywana całkowicie, łącznie z print "Function 'a' called\n". Dopiero po zwróceniu metody 99 można wykonać linię print "a=", a, "\n".

Pomyśl o tym w ten sposób: Wartość zwracana a musi być znana, zanim będzie można ją wydrukować w ostatnim wierszu.

1

Oświadczenie

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

jest przetwarzany jako

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

więc wszystkie parametry na wezwanie do print musi być oceniana zanim to się nazywa. To znaczy najpierw zadzwonić pod numer a.

Jeśli oświadczenie miało na wyjściu najpierw a=, przed wywołaniem a(), musiałoby składać się z trzech oddzielnych połączeń z numerem print.