[英]Python revise global variables inside function
假設我有 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)
出去:
['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)
引發錯誤:
語法錯誤:名稱“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
出去:
(['b', 'a'], [3, 2, 1])
您仍然必須將值作為參數傳遞。 進入函數后,您需要對每個列表進行就地切片分配。 不需要涉及全局名稱。
def fun2(a,b):
a[:], b[:] = b[::-1], a[::-1]
x = [1,2,3]
y = ['a', 'b']
fun2(x, y)
assert x == ['b', 'a']
assert y == [3, 2, 1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.