有没有一种公认的方法让函数从参数中弹出一个值?

2024-09-29 07:35:20 发布

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

基本上,我想知道,如果可能的话,我是否应该在功能上尽量避免副作用,或者副作用在某些情况下是否可以接受。我想要一个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

Tags: tokey函数inptreturn字典def
2条回答

不需要返回参数,因为您在调用站点已经有了对它的引用

如果您选择将pop_nearest实现为dict子类中的一个方法,那么有时返回self是一个好主意(取决于您尝试实现的内容),这样您就可以链接调用

class MyDict(dict):
   ...
   def pop_nearest(self, pt):
     ...
     return self

...
x = mydict.pop_nearest(1).pop_nearest(2) 

您不需要返回修改过的词典。它是在函数中修改的,就像您所想的那样,因为它是指向实际对象的引用/指针,而不是深度副本,在调用pop之后,它将以修改后的形式存在于调用函数中。归还钥匙应该是足够的,并按你想要的方式工作

相关问题 更多 >