簡體   English   中英

Python修改函數內部的全局變量

[英]Python revise global variables inside function

背景

假設我有 2 個全局變量a = [1,2,3]b = ['a','b'] ,如果我必須在函數內部交換ab ,我可以使用以下代碼:

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]

但是,如果ab是我的函數的參數,我們該怎么做?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM