我对Python中的map
函数有个疑问。Python映射函数,通过引用/值传递?
据我所知,该功能不发生变异它是在操作列表,而是创建一个新的,并将其返回。它是否正确 ?
此外,我有以下一段代码
def reflect(p,dir):
if(dir == 'X'):
func = lambda (a,b) : (a * -1, b)
else:
func = lambda (a,b) : (a, b * -1)
p = map(func,p)
print 'got', p
points
是元组,例如数组:[(1, 1), (-1, 1), (-1, -1), (1, -1)]
如果我调用上述函数以这样的方式:
print points
reflect(points,'X')
print points
列表points
不变。在函数内部,打印功能正确地打印我想要的东西。
可能有人可能指向我的一些方向在那里我可以学到这一切路过值/参考等如何蟒蛇工作,我怎么能解决上面?或者,也许我过于卖力模仿哈斯克尔在蟒蛇...
感谢
编辑:
说的,而不是p = map(func,p)
我
for i in range(len(p)):
p[i] = func(p[i])
列表的价值在函数之外更新,就像通过引用工作一样。唉,希望这是明确的:S
你能否更清楚地解释一下你的问题是什么?对Haskel程序员的参考对于Haskel程序员不是很有帮助。 – Achim
嘿。是的,对不起,可能只是忽略了haskell的评论。我只是感到惊讶,即使我做了'p = map(func,p)',列表p在函数之外没有改变。如果我用列表迭代替换'p = map(func,p)',它似乎可行。 – rafalio
Python既不是通过值传递也不是通过引用,python是通过对象。 –