【问题标题】:workarounds for (pseudo-)decorating a for loop in python?在python中(伪)装饰for循环的解决方法?
【发布时间】:2017-10-12 09:25:18
【问题描述】:

当然我知道这不像在 Python 中那样直接可行,如阅读中所述

Statement decorators

但我仍然想找到一种以编程方式打开(打开和关闭)循环的方法:

for i in range(L[:]):
    # do stuff

进入

for i in range(L[0:N])):
    # estimate how much time it
    # took to run the loop over a subset N element of the list
for i in range(L):
    # do stuff on the full list

有没有pythonic方法可以做到这一点?

【问题讨论】:

  • 您希望如何“打开和关闭”此功能?在我看来,最简单的事情就是让N 成为一个可选参数,默认为None
  • 什么是 L?在您的一个示例中它似乎是整数,而在另一个示例中它似乎是一些可迭代的类型。而当L[0:N] 是一个序列时,range(L[0:N]) 没有意义。
  • 为什么不把 for 循环放在一个函数中,而不是把它用作装饰器呢?需要装饰器吗?
  • @allo 已更正
  • 我仍然怀疑您的第一行是否有效。你确定不应该是for i in L[:]

标签: python performance for-loop decorator python-decorators


【解决方案1】:

假设L 是一个列表

import time

def timed_loop(L,subset,timeout):
    start = time.time()
    for i in L[0:subset]:
        do_something()
    stop = time.time()
    if stop-start < timeout:
        for i in L:
            do_something_else()

【讨论】:

  • 不错。如果 L 也是一个通用的可迭代对象,那会起作用吗?
  • 只要能索引L,我就这么说。
  • 让它更快:不要重做 L[0:subset] 而是继续 L[subset:]
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多