Фон
Предположим, у меня есть 2 глобальные переменные a = [1,2,3]
и b = ['a','b']
. Если я должен обменять a
и b
внутри функции, я могу сделать следующий код:
a = [1,2,3]
b = ['a','b']
def fun1():
global a,b
temp = a[::-1]
a = b[::-1]
b = temp
fun1()
print(a,b)
Out:
['b', 'a'] [3, 2, 1]
Однако, если a
и b
являются параметрами моей функции, как нам это сделать?
a = [1,2,3]
b = ['a','b']
def fun2(a,b):
global a,b
temp = a[::-1]
a = b[::-1]
b = temp
fun2(a,b)
print(a,b)
Ошибка повышения:
SyntaxError: имя 'a' является параметром и глобальным
Моя попытка
Я пытался сделать с exec
, он работает на Python 3.7, Однако он не работает на Codewars 3.6 env. Я не знаю причина, может быть, я просто нахожу неправильный метод.
a = [1,2,3]
b = ['a','b']
def exchange_with(a, b):
temp = a[::-1].copy()
exec('a = b[::-1]',globals())
exec('b = temp',locals(),globals())
exchange_with(a, b)
a,b
Out:
(['b', 'a'], [3, 2, 1])