【问题标题】:Python: How to dynamically put a loop around a function call?Python:如何在函数调用周围动态放置循环?
【发布时间】:2019-07-22 20:15:39
【问题描述】:

我的意思是:

if condition:
    for variable in list:
        function_to_call(variable)
else:
    variable = "some value"
    function_to_call(variable)

如果我的函数中没有一些 break 和 continue 语句,这可能会很好地工作...
结果,我收到以下错误:SyntaxError: 'continue' not properly in loop 因为虽然实际上函数周围有一个循环(我正在检查一些变量 - 所以当没有循环时 continue 不会被执行功能)。它仍然不起作用。
我还尝试将 continue 和 break 语句作为字符串放在 exec() 中,但无济于事(同样的错误)。

我该如何解决这个问题?

提前致谢!

【问题讨论】:

  • 你能告诉我们function_to_call的样子吗?
  • 您是否尝试在函数中使用break?因为你做不到。
  • function_to_call(list if condition else ["some value"]),然后修复function_to_call,使其总是采用值列表。
  • 或者,for variable in (list if condition else ["some value"]): function_to_call(variable)
  • 一个函数没有在你调用它的地方内联,所以它不能修改你调用它的循环的控制流。相反,您可能希望根据函数的结果返回不同的值。然后,调用者可以检查返回值并使用它来控制循环。

标签: python function loops if-statement continue


【解决方案1】:

cmets 中尚未提及的另一个解决方案是让函数返回 False 而不是 breaking。这样,您可以在方便时忽略返回值,否则使用它。

然后你可以修改你的代码看起来像这样:

if condition:
    for variable in list:
        if not function_to_call(variable):
            break
else:
    variable = "some value"
    function_to_call(variable)

但是,这可能会导致效率下降,因为您在循环的每次迭代中都检查结果。

【讨论】:

  • 这在您可以编写表示特定条件的函数的情况下特别有用,例如在处理命令列表的程序中的is_quit_command。此外,根据特定的用例,函数引发调用者可以捕获的异常可能更有意义。
  • @jirassimok 引发异常实际上是最有效的,因为,如果我没记错的话,捕获异常没有任何开销。
  • 只要不引发异常,使用try/except 就没有任何开销,因此没有理由在异常情况下使用它们,但它们并不适合以下情况预计将采用这两个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多