Python函数参数的原地更新?

2024-04-23 07:46:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数来更新现有的参数(主要是出于好奇):

def inplaceUpdate(f, inputs):
    for i in inputs:
        i = f(i)

我有三个输入:

x = 1
y = 2
z = 3

函数f

f = lambda i: i**2

我想运行以下代码:

inplaceUpdate(f, [x, y, z])

然后我想让xyz的值原地改变。这可能吗?你知道吗

x = 1
y = 4
z = 9

Tags: lambda函数代码infor参数definputs
3条回答

在Python中,整数是不可变的。有个主题问题here。你知道吗

其思想是不能更改引用xyz的值。这意味着如果你这样做:

x = 2
y = 3
z = 4
some_func([x, y, z])

不可能some_func改变变量xyz的值。你知道吗

但是,列表是可变的,您可以执行以下操作:

def some_func(l):
    l[:] = [i*2 for i in l]

l = [2, 3, 4]
some_func(l)

print l  # the array has changed

这确实会改变名单。这是因为操作l[:]=...分配给列表的包含,而不是重新分配引用,即l=...。你知道吗

您还可以使用列表理解来实现这一点。它比地图更像Python,但本质上是一样的。你知道吗

input = [1, 2, 3]
ls = [x**2 for x in input]

看来,你要做的是绘制一个列表。有一个漂亮的内置函数map

# Declare lambda somewhere
f = lambda i: i**2

# Map your inputs
input = [1, 2, 3]
result = map(f, input)

相关问题 更多 >