我有一个像这样的合法情况,我需要实现一个方法来改变传入的对象本身(将列表转换为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有许多内省功能,甚至让你检查调用堆栈,以及调用帧中的全局变量和本地变量。但我强烈建议不要这样做。
我知道你说你不想让人们质疑这个问题的必要性,但我不禁想到有更好的方法可以解决这个问题。
我不认为这是可能的,因为您可以在传递它时修改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允许您修改可变变量的全局范围,但不能更改引用本身。