我有一个函数
 def f():
      while True:
           blah我想以这样一种方式修改f,即调用者可以控制f中while循环运行的次数,而不会更改f中的大部分代码(特别是不在f中添加计数器)。就像这样
 def f(num_executions = True):
      while num_executions:
           blah()f()将运行一个无限循环,但f(an_expression_that_evaluates_to_true_n_times)将运行while循环n次。这样的表达可能是什么呢?
更新:我知道,有很多方法可以控制循环运行多少次,但真正的问题是-
python中的表达式可以在可配置的次数内求值为True吗?
一些我正在玩弄的想法
列表外的表达式= -making:-1
函数内函数的-modifying默认参数
发布于 2013-05-24 06:05:54
虽然我同意其他人的观点,这是一个糟糕的想法,但它完全(而且很容易)是可能的:
class BoolChange:
    def __init__(self):
        self.count = 0
    def __bool__(self):
        self.count += 1
        return self.count <= 5
x = BoolChange()
while x:
    print("Running")这将输出Running五次,然后退出。
这是一个坏主意的主要原因是,这意味着检查对象的状态会修改它,这是人们不会预料到的奇怪行为。我想不出这有什么好的用例。
发布于 2013-05-24 06:01:59
不需要while循环。使用for循环:
>>> def f(n):
...     for _ in range(n):
...         dostuff()_在for循环中用作变量名,通常用作占位符。这个循环循环n次。所以f(5)会循环五次。
发布于 2013-05-24 06:07:06
你不能完全按照你所描述的去做。在python中传递的不是表达式,而是一个值。一个对象。不可变对象通常求值为True或False。它在循环期间不会改变。可变对象可以改变它的真值,但是你不能在一个通用的循环中改变任意的对象(它不会以任何方式接触到它)。一般来说,正如这里所说的,你确实需要使用for语句,或者传入一个可调用的对象(比如一个函数):
def f(is_true = lambda x : True):
    while is_true():
        blah()注意,可调用的解决方案是可接受的,而“隐藏在布尔值中”的@Lattyware则不是,原因是这里的附加连接是显式的- ()告诉读者,这里几乎可以发生任何事情,这取决于传递的对象,并且您不需要知道此对象中的__bool__方法是静默调用的,并且预期会有副作用。
https://stackoverflow.com/questions/16724607
复制相似问题