У меня проблемы с выяснением, как эти вложенные функции получают значения.Может кто-нибудь, пожалуйста, объясните мне.код работает между прочим - PullRequest
0 голосов
/ 16 сентября 2018

У меня проблемы с выяснением, как это работает. Может кто-нибудь, пожалуйста, объясните мне. код работает между прочим.

def foo (x, y):

def goo(x, y):

    x = 2*x

    y = 3*y

    z = x+y

    print('x =', x, '; y =', y, '; z =', z)

    return z


def hoo(x, y):

    x = x//2

    y = y//3

    z = x+y

    print('x =', x, '; y =', y, '; z =', z)

    return z


z = hoo(x,y) + goo(y,x)

print('x =', x, '; y =', y, '; z =', z)

return z


x = 10

y = 20

z = 30

print('x =', x, '; y =', y, '; z =', z)

z = foo(x,y)

print('x =', x, '; y =', y, '; z =', z)

1 Ответ

0 голосов
/ 16 сентября 2018

Чтобы понять, как работает код, просто следуйте функциям.

foo называется. Поскольку integer типы неизменны ( Википедия ) в foo(x,y) x и y являются копиями x и y, которые вы указали в качестве параметров.

В выражении python, следовательно, вычисляются слева направо.

Первая функция hoo вызывается (то же самое замечание относительно параметров), значения x и y изменяются, и вычисляется z, вы получаете ('x =', 5, '; y =', 6, '; z =', 11) и возвращается значение z (11) ,

Находясь снаружи hoo, функции x и y на этом уровне равны соответственно 10 и 20, потому что они не были изменены (неизменная вещь… см. Выше). Затем вызывается функция goo. (то же самое замечание относительно параметров) ( предупреждение вы вводите y для параметра x из goo и x для параметра y из goo) значение x и y изменяются и вычисляется z, вы получаете ('x =', 40, '; y =', 30, '; z =', 70), и возвращается значение z (70).

Находясь снаружи goo, функции x и y на этом уровне равны соответственно 10 и 20, потому что они не были изменены (неизменная вещь ... см. Выше).

Функция суммирования между двумя значениями, возвращаемыми hoo и goo, выполнена. z = 11 + 70. Вы получаете ('x =', 10, '; y =', 20, '; z =', 81) и возвращается z.

Затем вне функции foo. x и y на этом уровне соответственно 10 и 20, потому что они не были изменены (неизменяемая вещь ... см. Выше). z дается значение возвращаемой функции foo, поэтому z = 81

И вы получите ('x =', 10, '; y =', 20, '; z =', 81)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...