小编hel*_*ach的帖子

如何在 Stackless Python 中进行无限(或真正深)递归?

我知道标准 CPython 对递归深度有限制,我认为小于 1000,所以下面的示例代码将失败并出现“超出最大递归深度”错误。

def rec_add(x):
    if x == 0:
        return x
    else:
        return x + add(x - 1)

print(rec_add(1000))
Run Code Online (Sandbox Code Playgroud)

听说 Stackless Python 支持无限递归深度,但是如果我用 Stackless Python 运行上面的代码,它仍然报告“超出最大递归深度”错误。我想也许我需要以某种方式修改代码以使其能够使用 Stackless Python 的无限递归深度功能?

知道如何在 Stackless Python 中进行无限递归吗?谢谢。

注意:我知道如何将标准 CPython 的递归深度限制增加到 1000 以上,并且我知道如何将上面的代码转换为简单的迭代,或者简单地使用高斯公式计算总和,这些不是我要找的,而上面的代码纯粹是作为例子。

编辑:就像我在上面的“注释”部分已经说过的那样(我猜没有人真正阅读过),我知道如何增加 CPython 的递归限制,并且我知道如何将示例代码转换为迭代或只是一个高斯和公式n * (n + 1) / 2,我只是在这里问,因为我听说 Stackless Python 的一大特色是它支持无限递归,我不知道如何为示例代码启用它。

EDIT2:我不确定我是否理解“Stackless Python 支持无限递归”的想法是错误的,但这里有一些来源说(或暗示)Stackless Python 支持无限递归:

Stackless Python 的缺点是什么?

https://bitbucket.org/stackless-dev/stackless/issues/96

https://stackless.readthedocs.io/en/3.6-slp/whatsnew/stackless.html

python recursion python-stackless

5
推荐指数
1
解决办法
168
查看次数

applicationWillTerminate 与 applicationWillResignActive 与 applicationDidEnterBackground?它们到底什么时候被触发?

我知道存在类似的问题,但我认为这个问题更为笼统,并且没有回答我试图找出的具体细节。

我已经阅读了苹果文档,但我仍然对这些方法何时被触发感到有点困惑。从 Apple 文档来看,iOS 应用程序似乎可以进行以下状态转换:

  1. 应用程序在前台终止(例如双击主页按钮并向上滑动应用程序):applicationWillTerminate在这种情况下肯定会触发,实际上这是我不太困惑的唯一情况。

  2. 应用程序切换到后台,同时仍在后台运行(对于“支持后台执行的应用程序”引用苹果文档):applicationDidEnterBackground被触发?applicationWillResignActive是否触发?

  3. 后台运行的应用程序被终止:applicationWillTerminate根据Apple文档可能(?)被触发...所以它有时可能会或可能不会被触发?

  4. App切换到后台立即暂停:applicationDidEnterBackgroundapplicationWillResignActive都被触发?

  5. 后台运行的应用程序被暂停:applicationWillResignActive是否被触发?或者什么都没有触发?

  6. “不支持后台执行”的App切换到后台:applicationWillTerminate根据Apple文档触发?但这到底讲的是什么呢?

  7. 应用程序在前台崩溃:我想在这种情况下不会触发任何内容?

  8. 后台运行的应用程序崩溃:在这种情况下也不会触发任何内容,对吗?

  9. 后台挂起的应用程序被终止:我想又没有触发任何内容?

我认为苹果文档在解释这些方法时要么有些模糊,要么完全令人困惑。有时他们谈论“支持后台执行的应用程序”与“不支持后台执行的应用程序”,有时他们谈论“在后台运行”与“暂停”,有时他们只是说“用户退出”应用程序,它开始过渡到后台状态“或”来电或短信“,这是现实世界的用例而不是技术概念。

因此,任何人都可以帮助用更一致的技术术语解释这些方法在特定情况下到底何时触发?

编辑:不知道为什么这个问题被认为不“集中”,因为我正在尝试使用这些应用程序委托方法,但经过一些个人测试和阅读官方文档后,我仍然不知所措,这些方法到底何时会出现被触发以及我如何可靠地使用它们。

也许我可以借用 PGDev 答案中的一些内容来详细说明,所以如果我理解正确的话,iOS 应用程序可以处于 5 种状态:

  1. 未运行
  2. 不活跃
  3. 积极的
  4. 暂停
  5. 背景

并且当应用程序改变状态时,可能会触发一些委托方法,但从苹果官方文档来看,在哪些状态转换期间会触发哪些方法似乎非常混乱。

例如,我不确定当应用程序从状态 5 进入状态 4 时,当应用程序从状态 5 进入状态 1 时,以及当应用程序从状态 4 进入状态 1 时,会触发什么或是否会触发任何方法。苹果官方文档似乎说,applicationWillTerminate如果“不支持后台执行的应用程序”切换到后台,就会触发该功能,但是我无法applicationWillTerminate通过按主页按钮来触发任何类型的应用程序。

就目前而言,我不确定我是否可以可靠地利用这些方法来做任何事情,这就是为什么我希望有人能够更清楚地了解这些方法何时被触发(而不是触发),除了那些模糊的描述之外苹果官方文档。

objective-c ios swift

2
推荐指数
1
解决办法
1278
查看次数

标签 统计

ios ×1

objective-c ×1

python ×1

python-stackless ×1

recursion ×1

swift ×1