是否有 shorthand 用于使用为函数中的参数分配的相同变量?

Is there a shorthand for using the same variable being assigned for the argument in a function?

有没有更快的写法:

def foo():
    # What happens in here is irrelevant.
    return new_value

dict['i_dont_want_to_type_this_twice'] = foo(dict['i_dont_want_to_type_this_twice'])

就像你使用 x += 1

你可以通过在字典上使用 update 来做这样的事情。

d.update(a=foo(d.get('a', 0)))

完整演示:

d = {'a': 5}

def foo(val):
    val += 100
    return val

d.update(a=foo(d.get('a', 0)))

print(d) # outputs {'a': 105}

来自词典update方法的描述:

  • D.update([E, ]**F) -> None。从 dict/iterable E 和 F.
  • 更新 D
  • 如果 E 存在并且有 .keys() 方法,则执行: for k in E: D[k] = E[k]
  • 如果 E 存在并且缺少 .keys() 方法,则执行: for k, v in E: D[k] = v
  • 在任何一种情况下,后面都是:for k in F: D[k] = F[k]

因此,如果密钥存在,它将更新它,如果不存在,它将创建它。

这个单行作业怎么样?

dict.update({key: foo(dict[key]) for key in ['i_dont_want_to_type_this_twice']})

或者,更新整个字典:

dict = {k: foo(v) for k, v in dict.items()}

我认为对此没有任何内置或标准库功能。最惯用的做法可能是定义你自己的包装函数,比如

def transform(d, k, f):
    d[k] = f(d[k])

然后像这样使用它(请注意,我已将您的 dict 重命名为 mydict 以避免掩盖内置):

transform(mydict, 'i_dont_want_to_type_this_twice', foo)

(我认为 apply() 会为此起一个不错的名字,但如果你使用 Python 2,它是一个内置的。虽然它自 2.3 以来已被弃用,所以不会'它不会有太大的伤害。)