通过引用变换python传入对象

问题描述 投票:1回答:2

我有一个像这样的合法情况,我需要实现一个方法来改变传入的对象本身(将列表转换为dict)

def f(l): # f is a function that receives a list as input
    pass # Implement this


x = ['Hello', 'World']
f(x)
print(x) # x is now a dict {'hello':'world'}

你将如何实施上述f()

关键是在调用f()时,传入的对象本身必须变异为不同的类型。

注意:正版答案欢迎而不是质疑情况。

python python-3.x pass-by-reference
2个回答
2
投票

Python没有办法做你想做的事。您无法在函数内更改调用上下文中变量的绑定。

当然,“不能”必须是合格的:Python有许多内省功能,甚至让你检查调用堆栈,以及调用帧中的全局变量和本地变量。但我强烈建议不要这样做。

我知道你说你不想让人们质疑这个问题的必要性,但我不禁想到有更好的方法可以解决这个问题。


0
投票

我不认为这是可能的,因为您可以在传递它时修改mutable并使其反映全局范围中的更改但您无法更改它引用的内容。

def f(x):

    z = dict()
    for i in range(0,len(x),2):
        z[x[i]] = x[i+1]

    # x = z
    x.append(1)
    return x


x=[1,2]
z=f(x)
print(z) #[1, 2, 1]
print(x) #[1, 2, 1]

def f(x):

    z = dict()
    for i in range(0,len(x),2):
        z[x[i]] = x[i+1]

    x = z
    return x


x=[1,2]
z=f(x)
print(z) #{1: 2}
print(x) #[1, 2]

Python允许您修改可变变量的全局范围,但不能更改引用本身。

© www.soinside.com 2019 - 2024. All rights reserved.