Python 函数参数范围(字典与字符串)

标签 python

富=“富” 定义栏(foo): foo = "酒吧"

bar(foo)
print foo

# foo is still "foo"...

foo = {'foo':"foo"}
def bar(foo): 
    foo['foo'] = "bar"

bar(foo)
print foo['foo']

# foo['foo'] is now "bar"?

我有一个函数在传递字典时无意中覆盖了我的函数参数。有没有一种干净的方法可以将我的参数声明为常量,或者我是否一直在函数内复制字典?

谢谢!

最佳答案

在这种情况下,如果要更改字典并保留函数的局部更改,则必须复制字典。

原因是,当您将字典传递给第二个 bar 时函数,Python 只传递对字典的引用。因此,当您在函数内部修改它时,您正在修改存在于函数外部的同一个对象。在第一bar函数,另一方面,您将不同的对象分配给名称 foo当你写 foo = "bar" 时在函数内部.当你这样做时,名称 foo函数内部开始引用字符串 "bar"而不是字符串 "foo" .您已经更改了名称所指的对象。但是foo在函数内部和 foo函数外部是不同的名称,因此如果更改标有 foo 的对象在函数内部,您不会影响名称 foo在函数之外。所以它们指的是不同的对象。

关于Python 函数参数范围(字典与字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951112/

相关文章:

python - itertools 产品加速

python - 我怎样才能最好地断言一个值可以在 Python 中转换为 int?

python - 对包含带上标的表达式的字符串进行符号化

python - setup.py console_scripts 入口点无法解析导入

python - 神经网络 Octave 实现

python - 从 json 中删除\r

python - 使用pymysql将csv上传到数据库

python - Python OpenCV-增加视频fps

python - Google Cloud VM 保持 jupyter 运行

python - 如何使用unittest并行执行Selenium Python测试