Как поменять глобальные переменные с помощью функции

#python #variables #swap

#python #переменные #поменять местами

Вопрос:

Я хочу создать функцию, в которой, если я дам 2 переменные, она поменяет их значения ГЛОБАЛЬНО. например, a = 1, b = 2. Я хочу, чтобы это выглядело как a = 2, b = 1. Вот код

     def swap(n,n2):
        n,n2 = n2,n
        print(n,n2)
  

Я также пробовал этот код:

     def swap(n,n2):
     temp = n
     n = n2
     n2 = temp
     global x
     global x2
     x = n
     x2 = n2
     print(x,x2)
  

Я попробовал это, но это не поменяло переменные глобально. Помогите, пожалуйста.

Комментарии:

1. Нет. Не так работают переменные Python.

2. Совет, который вы не хотите слышать, заключается в том, чтобы не использовать глобальные переменные, и, более того, изменение глобальных переменных внутри случайной функции не выглядит хорошей практикой, которая может укусить вас позже. Каков ваш вариант использования?

3. a, b = b, a Недостаточно для вашего?

4. global доступ к глобальной области видимости

Ответ №1:

Вам просто нужно ссылаться на глобальные переменные внутри функции.
Смотрите приведенный ниже код.

 n=1
n2=2

def swap():
    global n,n2
    n,n2 = n2,n
    
print(n,n2)
swap()
print(n,n2)
  

Вывод

 1 2
2 1
  

Ответ №2:

Ну, я верю, что вы можете сделать что-то вроде этого:

 a = 1
b = 2

def swap(var1, var2):
    var1, var2 = var2, var1
    return var1, var2

a, b = swap(a, b)
  

Ответ №3:

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

Используйте globals() для доступа к словарю глобальной области видимости:

 global sabich1
global sabich2

sabich1, sabich2 = 1, 2

def swap(n,n2):
    globals()[n], globals()[n2] = globals()[n2], globals()[n]

swap('sabich1', 'sabich2')

# 2 1
print(sabich1, sabich2)
  

Ответ №4:

Поскольку Python передается по значению, а не по ссылке. Таким образом, будет сформирована новая копия параметров, и они были заменены не оригинальными.