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

时间:2016-02-22 01:41:19

标签: python shorthand

有更快的方式来写这个:

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

时相同

3 个答案:

答案 0 :(得分: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) - >没有。从dict / iterable E和F。
  • 更新D.
  • 如果E存在并且有.keys()方法,那么:对于E中的k:D [k] = E [k]
  • 如果E存在且缺少.keys()方法,那么:对于k,v在E中:D [k] = v
  • 在任何一种情况下,接下来是:对于F中的k:D [k] = F [k]

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

答案 1 :(得分:1)

这对单班任务怎么样?

Entity

或者,更新整个字典:

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

答案 2 :(得分:1)

我认为没有任何内置或标准库功能。最惯用的事情可能是定义自己的包装函数,例如

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以来已被弃用,所以它不会造成很大的伤害。)