【问题标题】:What's the Pythonic way to "repeat this until condition met -or- maximum achieved"?“重复此操作直到条件满足 - 或 - 达到最大”的 Pythonic 方式是什么?
【发布时间】:2014-12-04 01:08:20
【问题描述】:

我还在学习 Python,我想知道以下是否有“更 Pythonic”的方式:

MAX_ATTEMPTS = 5
for i in range(MAX_ATTEMPTS):
    response = do_something()
    do_something_based_on(response)
    do_another_thing_based_on(response)
    if response == 0:
        do_something_if_success()
        break

编辑:抱歉,我可能过于简化了这个案例。我需要在最终检查之前使用response,所以我必须将它捕获到一个变量中。

【问题讨论】:

    标签: python conditional-statements


    【解决方案1】:

    我认为这种方式会比你节省更多的内存:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    MAX_ATTEMPTS = 5
    for i in xrange(MAX_ATTEMPTS):
        if 0 == do_something():
            do_something_if_success()
            break
    

    编辑:

    根据最新问题更新。

    MAX_ATTEMPTS = 5
    for i in xrange(MAX_ATTEMPTS):
        response = do_something()
        do_something_based_on(response)
        do_another_thing_based_on(response)
        if 0 == response:
            do_something_if_success()
            break
    

    【讨论】:

    • 啊哈哈哈,有道理。我可能过于简化了这种情况...... response 变量实际上是在 if 语句之前使用的。我会编辑我的帖子。
    • @pepoluan 然后我认为只需将 'range' 替换为 'xrange' 就足够了。在 '==' 之前写 0 是一种避免误写为 '=' 的推荐方法。顺便说一句,我认为 PEP8 会回答你的很多问题。
    • @pepoluan 哦,你也可以if not response:
    【解决方案2】:

    这似乎是实现您想要的完全有效的方式。

    可能有可能以各种更类似于函数的方式执行此操作,包括使用双递归生成器的方式,但我怀疑没有一个比这更简单。

    【讨论】:

    • 听起来...复杂 :D 是的,我想有时我想太多想成为 Pythonic :)
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2015-07-28
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多