Member 14897676 Ответов: 2

Может ли кто-нибудь объяснить мне этот код и желаемый результат?


x=90
def harry():
    x=20
    def rohan():
        global x
        x=88

     print("before calling rohan",x)
     rohan()
     print("after calling rohan", x)

harry()
print(x)


Что я уже пробовал:

почему это печатает 90 вместо 88?

2 Ответов

Рейтинг:
12

Sandeep Mewara

Выход из вышеперечисленного:

('before calling rohan', 20)
('after calling rohan', 20)
88

Последовательность выполнения:
1. Гарри() позвонил
2. print("перед вызовом rohan",x) => x=локальное значение x, которое пока не изменено => 20
3. Рохан() называется =&ГТ; обновления глобального значения X до 88
4. print("после вызова rohan", x) => локальное значение x остается таким же, как и было - не изменено => 20
5. print(x) called => проверяется глобальное значение x, которое было установлено на 88 с помощью rohan() => 88


Member 14897676

спасибо, сэр!

Sandeep Mewara

Добро пожаловать

Рейтинг:
0

OriginalGriff

Потому что ваш отступ не совпадает:

def harry():
    x=20
    def rohan():
        global x
        ...

     print("before calling rohan",x)
     ...
У вас есть дополнительные пробелы перед инструкцией "печать".
В результате, оно не будет выполняться.
Удалите их из трех строк, и он напечатает "88"

Не смешивайте вкладки и пробелы: установите свой редактор так, чтобы он всегда заменял вкладки, так как это избавит вас от многих неприятностей позже. Отступы Python очень важны, а табуляция - это не то же самое, что пробел-если вы не "просто используете пробелы", то то, что выглядит идентичным, оказывается не таким, как в Python.