gpt4 book ai didi

python - 为什么我不能在函数内使用 kwargs 更改变量?

转载 作者:太空宇宙 更新时间:2023-11-04 01:11:03 26 4
gpt4 key购买 nike

<分区>

Python初学者的问题。我正在尝试更改函数内某些变量的值,但我不明白为什么有时它有效而有时却无效。所以我想知道幕后发生了什么。如果我写:

def assign(self, **kwargs):

kwargs['test'] = 3
kwargs['steps'] += [1]

t = 1
s = []

assign(test=t, steps=s)

print(t)
print(s)

这仍然打印

1
[]

现在,如果我更改分配给的函数

def assign(self, **kwargs):

kwargs['test'] += 3
kwargs['steps'] += [1, 2, 3]

它改变了列表而不是整数。所以我想这与整数是不可变的而列表是可变的事实有关。所以我想改用字典,以确保我的变量被更改。那么:

dict = {'test':1, 'steps': []}
assign(**dict)
print(dict)

静止打印

{'test': 1, 'steps': [1, 2, 3]}

具有完全相同的行为,所以现在我真的很困惑。似乎在解包字典时,我不再传递对字典变量的引用,以便按值复制这些 unpacked 变量?实现我想要做的事情的最佳方式是什么?

更新

感谢与@6502 的讨论,因为

In Python there is no way to change a parameter that has been passed to a function because you cannot have "pointers" or "references".

The most pythonic way is not doing it. A function receive parameters and provide results. If the parameter is a mutable it can mutate its state but changing the call parameter itself was considered not needed.

然后我决定返回一个包含结果的字典:

def assign(self, **kwargs):

kwargs['test'] += 3
kwargs['steps'] += [1, 2, 3]
return kwargs

dict = {'test':1, 'steps': []}
dict = assign(**dict)
print(dict)

这当然有效,但我想知道对大数据的影响,因为在我看来(来自 C++ 世界),有很多复制。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com