Python: Изменение переменной
Само слово «переменная» подсказывает, что ее можно менять. И действительно, со временем внутри программы значения переменных могут изменяться.
# greeting - переводится как приветствие greeting = 'Father!' print(greeting) # => Father! greeting = 'Mother!' print(greeting) # => Mother!
Имя осталось тем же, но внутри появились другие данные. Отметим, что переменные в Python не требуют специального объявления. Вместо этого переменная объявляется, когда ее впервые используют в программе.
Переменные — мощная и в то же время рисковая вещь. Нельзя сразу с уверенностью сказать, что внутри нее записано — сначала надо проанализировать код, который находится перед переменной. Именно этим занимаются разработчики во время отладки, когда пытаются разобраться, почему программа работает не так, как задумано.
Задание
В упражнении определена переменная, внутри которой содержится строка. Переопределите значение этой переменной и присвойте ей строку, в которой расположите символы первоначальной строки в обратном порядке.
Обратите внимание: в данном задании вам предстоит писать код между строчками с комментариями # BEGIN и # END (об этом говорилось ранее, но это первый раз, когда вы встречаетесь с таким форматом).
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
- Переменная — способ сохранить информацию и дать ей имя для последующего использования в коде.
Можно ли в python изменить переменную переданную в аргементе функции
В функцию передается не переменная, а ее значение, это не указатели. Просто верните новое значение из функции a = func(a) , в функцию добавить return a . Другой вариант, передавать в параметр функции что-нибудь сложное, типа объекта класса или контейнер (список, словарь, . )
26 авг 2021 в 8:25
Переменная a, которой присваивается значение «victor», и переменная а, которая в функции, это две совершенно разные вещи. Общего у них только имя. Любое из них можно изменить на какое угодно другое и в выполнении программы совершенно ничего не изменится. Так же, как у Бориса из Новосибирска и Бориса из Симферополя общего только имя Борис. А все остальное разное.
26 авг 2021 в 8:41
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Почему значение a не меняется?
Т.к. a — строка, то в функцию передаётся копия значения a , а не указатель на неё, соответственно, когда мы меняем значение a в функции, мы меняем значение локальной копии, а не глобальной переменной.
def func(a): a = "anton" print("внутри функции", id(a)) a = "victor" print("вне функции", id(a)) func(a) print("вне функции", id(a)) print(a)
Выведет что-то типо
вне функции 485256706736 внутри функции 485257302960 вне функции 485256706736 victor
id показывает место в памяти, где лежит значение переменной и, как видите, вне функции оно одно, а внутри — другое.
Как можно обойти?
В вашем случае вы можете использовать ключевое слово global , чтобы получить и изменить значение глобальной переменной:
def func(): global a a = "anton" print("внутри функции", id(a)) a = "victor" print("вне функции", id(a)) func() print("вне функции", id(a)) print(a)
Выведет что-то на подобии:
вне функции 542195432176 внутри функции 542200565424 вне функции 542200565424 anton
Как лучше реализовать?
Метод с использованием global — наверняка не лучший способ достичь результата, который вы хотите, и я бы посчитал бы это code smell-ом, потому я предлагаю вам сделать так:
def func(a): a = "anton" print("внутри функции", id(a)) return a a = "victor" print("вне функции", id(a)) a = func(a) print("вне функции", id(a)) print(a)
Выведет что-то такое:
вне функции 486729169712 внутри функции 486730096368 вне функции 486730096368 anton
Этот подход намного лучше первого.
Что за локальные и глобальные переменные?
Локальные переменные — те, которые «заперты» в каком-то контексте, например:
def func(arg): pass
Здесь arg — локальная переменная, она существует только в контексте функции func , и имеет влияние только на этот контекст.
Глобальные переменные — те, котоые мы объявляем в контексте программы:
foo = 5
Переменная foo — глобалья, т.к. объявлена в контексте программы (модуля, или же без отступа)
Использование глобальных переменных в функциях
Иногда возникает необходимость в использовании глобальных переменных в функциях. Глобальная переменная — это такая переменная, которая определена вне функции и может быть использована в любой части программы, включая функции.
Типичная проблема
Возьмем пример программы, которая использует функцию для изменения глобальной переменной.
x = 10 def change_x(): x = 5 change_x() print(x)
В данном случае ожидается, что переменная x изменит свое значение на 5 после вызова функции change_x() . Однако, когда программа выводит значение x с помощью print(x) , оно все еще равно 10 . Почему так происходит?
Пояснение
Проблема возникает из-за области видимости переменных в Python. Когда в функции создается переменная с тем же именем, что и глобальная переменная, Python предполагает, что это новая локальная переменная, которая существует только внутри функции.
Решение
Для того чтобы изменить глобальную переменную внутри функции, необходимо использовать ключевое слово global перед именем переменной.
x = 10 def change_x(): global x x = 5 change_x() print(x)
Теперь, когда функция change_x() вызывается, она изменяет глобальную переменную x на 5 , и print(x) выводит 5 .
Использование глобальной переменной в других функциях
Глобальные переменные также можно использовать в других функциях. Например:
x = 10 def print_x(): print(x) print_x()
В этом случае функция print_x() выводит значение глобальной переменной x , которое равно 10 .
Но стоит помнить, что чрезмерное использование глобальных переменных может усложнить отладку и поддержку программы, поскольку они могут быть изменены в любом месте программы.
Переменные¶
Хорошо. Экспериментируя в прошлом уроке, нам приходилось редактировать код в нескольких местах, чтобы изменить размеры наших геометрических фигур. Но представь, что будет, если мы захотим изменить размер квадрата не один раз, не говоря уже о прямоугольниках! Есть способ получше.
Это переменные. Можно сообщить Python’у, что отныне при обращении к переменной имеется в виду что-то другое. Это похоже на символическую математику, где можно написать: Пусть x равняется 5. Тогда. очевидно, x * 2 будет равняться 10.
С помощью Python’а сиё можно записать так:
x = 5
После этого, если ты выполнишь print(x) , будет выведено значение переменной — 5. x можно задействовать и в обращении к черепашке:
turtle.forward(x)
Переменные могут быть чем угодно, не только числами. Типичной вещью, хранящейся в переменной, является строка — строка текста. Строки можно распознать по двойным кавычкам, с которых они начинаются и которыми они заканчиваются. Позже ты узнаешь больше об этом и других типах данных, их применении, и о том, как они называются в Python.
Ты можешь использовать переменную даже для того, чтобы дать черепашке имя:
timmy = turtle
Теперь, когда ты вводишь timmy , это будет означать turtle . Но ты всё ещё можешь продолжать использовать и непосредственно turtle :
timmy.forward(50) timmy.left(90) turtle.forward(50)
Переменная, зовущаяся углом¶
Упражнение¶
Как мы можем ускорить работу с нашей программой для рисования накренившихся квадратов, имея переменную angle ?
Решение¶
angle = 20 turtle.left(angle) turtle.forward(50) turtle.left(90) turtle.forward(50) turtle.left(90) turtle.forward(50) turtle.left(90) turtle.forward(50) turtle.left(90) turtle.left(angle)
Дополнительно¶
Можешь ли ты проделать то же самое с размером квадрата?
Домик Деда Мороза¶
Упражнение¶

You can calculate the length of the diagonal line with the Pythagorean theorem. That value is a good candidate to store in a variable. To calculate the square root of a number in Python, you’ll need to import the math module and use the math.sqrt() function. The square of a number is calculated with the ** operator:
import math c = math.sqrt(a**2 + b**2)
© Авторские права 2012–2014, OpenTechSchool and contributors.
Создано с помощью Sphinx 1.3.1.
