首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算结果为True n次的python表达式

计算结果为True n次的python表达式
EN

Stack Overflow用户
提问于 2013-05-24 05:57:58
回答 6查看 201关注 0票数 1

我有一个函数

代码语言:javascript
运行
复制
 def f():
      while True:
           blah

我想以这样一种方式修改f,即调用者可以控制f中while循环运行的次数,而不会更改f中的大部分代码(特别是不在f中添加计数器)。就像这样

代码语言:javascript
运行
复制
 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默认参数

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-24 06:05:54

虽然我同意其他人的观点,这是一个糟糕的想法,但它完全(而且很容易)是可能的:

代码语言:javascript
运行
复制
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五次,然后退出。

这是一个坏主意的主要原因是,这意味着检查对象的状态会修改它,这是人们不会预料到的奇怪行为。我想不出这有什么好的用例。

票数 3
EN

Stack Overflow用户

发布于 2013-05-24 06:01:59

不需要while循环。使用for循环:

代码语言:javascript
运行
复制
>>> def f(n):
...     for _ in range(n):
...         dostuff()

_在for循环中用作变量名,通常用作占位符。这个循环循环n次。所以f(5)会循环五次。

票数 5
EN

Stack Overflow用户

发布于 2013-05-24 06:07:06

你不能完全按照你所描述的去做。在python中传递的不是表达式,而是一个值。一个对象。不可变对象通常求值为TrueFalse。它在循环期间不会改变。可变对象可以改变它的真值,但是你不能在一个通用的循环中改变任意的对象(它不会以任何方式接触到它)。一般来说,正如这里所说的,你确实需要使用for语句,或者传入一个可调用的对象(比如一个函数):

代码语言:javascript
运行
复制
def f(is_true = lambda x : True):
    while is_true():
        blah()

注意,可调用的解决方案是可接受的,而“隐藏在布尔值中”的@Lattyware则不是,原因是这里的附加连接是显式的- ()告诉读者,这里几乎可以发生任何事情,这取决于传递的对象,并且您不需要知道此对象中的__bool__方法是静默调用的,并且预期会有副作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16724607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档