繁体   English   中英

python,如何编写迭代 function

[英]python, how to write an iterative function

我正在查询数据库中的一些参数,这些参数依赖于一个名为count的属性! 如果第一个查询不返回任何内容, count可以增加。 这是一个示例代码

sls = {(213.243, 55.556): {}, (217.193, 55.793): {}, (213.403, 55.369): {}}

for key in sls.keys:
  if not sls[key]:
     ra, dec = key[0], key[1]
     search_from_sourcelist(sl, ra,dec)

count = 1
def search_from_sourcelist(sl, ra,dec):
  dist = count/3600.0
  sls[(ra,dec)] = sl.sources.area_search(Area=(ra,dec,dist))
  return

如果我运行方法search_from_sourcelist ,它没有返回任何东西,我想增加count ,然后再次进行查询。 这是对 sls 字典中的所有键执行的,直到所有键都有值!

这里是最基本的递归 function

def countdown(n):
    if n == 0:
        return "Blastoff"
    else:
        print "T minus %s" % n
        return countdown(n-1)

你会注意到倒计时返回一个修改过的参数,在本例中是 n 但 -1,所以如果你真的一直遵循这个,你会得到(-> 表示调用)

countdown(5) -> countdown(4) -> countdown(3) -> countdown(2) -> countdown(1) -> countdown(0) #stop

所以现在您了解递归 function 看起来像您意识到您从未真正返回您自己的 function 的调用,因此您的代码不是递归的

我们使用递归是因为我们想将任务简化为最简单的形式,然后从那里开始工作,因此mcnuggets问题就是一个很好的例子。 所以你需要告诉我们你想要实现什么,以及如何将它变成一个更小的问题(或更重要的是为什么)。你确定你不能迭代地做到这一点吗? 请记住,您不想破坏堆栈深度,因为 python 不是标准的尾递归

当您找到一种方法将初始问题简化为“自身的较小版本”时,递归很有用。

标准示例是阶乘 function

def fac(n):
    return n * fac(n-1) if n > 1 else 1

在这里,您将计算n的阶乘问题简化为计算n-1的阶乘。

在您的代码中没有这样的“减少”。 您只需增加一个值并重新开始相同的问题。 因此,我建议您迭代地解决它。

我不确定您是否需要为此使用递归算法。

Incase i run the method search_from_sourcelist, and it doesnt return anything, i would like to increment count, and do the query again 这可以通过 while 循环来完成,如下所示:

for key, value in sls.iteritems():
    if not value:
        ra, dec = key[0], key[1]
        count = 1
        while not search_from_sourcelist(sls, ra, dec):
            count += 1

但是如果你真的想递归地这样做,你可以这样做,发表评论,我会写下来。

此外,您应该查看您的search_from_sourcelist function,因为它总是返回None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM