基本上,我想知道,如果可能的话,我是否应该在功能上尽量避免副作用,或者副作用在某些情况下是否可以接受。我想要一个pop
的函数,它从字典返回一个键,我很好奇这个函数是否应该只返回键:
def popkey(d):
k, v = d.popitem()
return k
mykey = popkey(d)
或者如果还应返回修改后的词典:
def popkey(d):
k, v = d.popitem()
return k, d
mykey, d = popkey(d)
更具体地说,我有下面这样的东西,我需要继续查找字典,所以我想pop
键,因为它们与列表中的元素配对
def pop_nearest(d, pt):
"""Pops the key in `d` which is nearest to pt."""
to_pop = min(d.iterkeys(), key=lambda a: abs(a - pt))
d.pop(to_pop)
pts = [1,3,5,7,9]
for pt in pts:
nearest_pt = pop_nearest(d, pt)
# do some other stuff
不需要返回参数,因为您在调用站点已经有了对它的引用
如果您选择将
pop_nearest
实现为dict
子类中的一个方法,那么有时返回self
是一个好主意(取决于您尝试实现的内容),这样您就可以链接调用您不需要返回修改过的词典。它是在函数中修改的,就像您所想的那样,因为它是指向实际对象的引用/指针,而不是深度副本,在调用pop之后,它将以修改后的形式存在于调用函数中。归还钥匙应该是足够的,并按你想要的方式工作
相关问题 更多 >
编程相关推荐