使用计数器和条件结束循环

2024-03-12

在Python中,我可以实现一个带有步数计数器和停止条件的循环作为经典案例for loop :

for i in range(50):
    result = fun(i)
    print(i, result)
    if result == 0: 
        break

where fun(x)是从整数到整数的任意函数。

我总是怀疑这是否是最好的编码方式(Python地,并就可读性 and 效率)还是最好将其作为while 循环:

i = 0
result = 1
while result != 0 and i < 50:
    result = fun(i)
    print(i, result)
    i += 1

哪种方法更好?特别是 - 我担心的使用break感觉不对的声明。


The for循环的性能比while因为range()是用C实现的 https://stackoverflow.com/a/869295/6260170,同时+=操作被解释并且需要更多操作 https://stackoverflow.com/a/869347/6260170和对象创建/销毁。您可以使用以下方式说明性能差异timeit module https://docs.python.org/3/library/timeit.html, 例如:

from timeit import timeit

def for_func():
    for i in range(10000):
        result = int(i)
        if result == -1: 
            break

def while_func():
    i = 0
    result = 1
    while result != -1 and i < 10000:
        result = int(i)
        i += 1


print(timeit(lambda: for_func(), number = 1000))
# 1.03937101364
print(timeit(lambda: while_func(), number = 1000))
# 1.21670079231 

The for循环可以说是在绝大多数情况下,当您希望迭代可迭代对象时,更具Python风格 https://stackoverflow.com/a/920692/6260170。此外,引用Python 维基 https://wiki.python.org/moin/WhileLoop:“由于 Python 中的 for 循环非常强大,因此很少使用 while,除非需要用户输入的情况”。使用 a 并没有什么不符合 Python 风格的break陈述per se.

可读性主要是主观的,我想说for循环也更具可读性,但这可能取决于您以前的编程背景和经验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用计数器和条件结束循环 的相关文章

随机推荐

  • Kibana:在表格可视化中连接两个文档

    我有一个数据表可视化 显示具有电子邮件地址和 ID 的文档中的字段 timestamp email field id Feb 5th email protected cdn cgi l email protection xyz123 这些字
  • WPF负载控制问题

    我正在 WPF 中做一些事情 我有一个ComboBox与许多Types 选择具体类型后 我希望能够加载特定的用户控件 有许多文本框等 尊重我的 WPF 窗口上定义区域的类型 怎么做 有没有类似的东西LoadControl 并将其加载到Pla
  • 如何使用 iText 添加 PAdES-LTV

    我正在尝试在没有 LTV 格式的已签名 PDF 文档中启用 LTV 我在链接中描述的所有情况下都找到了相同的示例如何为时间戳签名启用 LTV https developers itextpdf com question how enable
  • Hibernate删除一条记录,但该记录并没有消失?

    编辑 哎呀 我想如果我发布删除代码会有帮助 对不起 delete from permanent store and local list int index get record to delete if entityList getEnt
  • 找不到与 net.tcp 方案匹配的基地址

    我已将文件传输服务从 basicHttpBinding 移至 netTcpBinding 因为我正在尝试设置双工模式通道 我也开始了我的net tcp 端口共享服务 我目前正在开发中 并且在 xp 盒子上自行托管 直到我们移动 应用程序到开
  • 使用 Brave 浏览器的 Puppeteer?

    我想知道是否可以使用 Brave 浏览器而不是基本版本的 chromium 来执行 puppeteer 脚本 我知道 Brave 是从 chromium 开发的 因此您可以使用 Brave 启动 selenium 脚本 但您知道 puppe
  • 查找数组中两个最相似的值 (Java)

    我有一个整数数组 我想找到两个最相似的值 差异最小 例子 如果数组中的值是80 100 500 600 501 505 两个最相似的值是500 and 501 我怎样才能做到这一点 这似乎是个小任务 我们可以这样解决这个问题 1 应用任何有
  • tomcat在关闭之前是否等待应用程序线程完成?

    当我们使用 shutdown sh 脚本关闭 tomcat 时 它是等待应用程序线程完成还是杀死它们并关闭 tomcat Tomcat 尝试终止应用程序线程 但如果失败 则日志中可能会显示如下错误消息 严重 Web 应用程序似乎已启动一个线
  • WordPress:在子主题中覆盖父主题类功能

    我想重写子主题中的函数 该函数在父主题的类中定义 这是示例代码 class A extends B function construct this gt add ajax sync post data need to override ot
  • Git Clone:权限被拒绝(公钥)。致命:无法从远程存储库读取

    我正在使用 bitbucket 并尝试使用以下命令克隆存储库 sudo git clone email protected cdn cgi l email protection KassaK mbf git 我收到此错误 Permissio
  • 在gwt中添加外部js

    我在 GWT 中编写并检查了我的 js 代码 为了检查 我在 projectName html 文件中添加了我的 js 代码并且它有效 但是当我尝试添加外部 js 文件时 出现错误 WARN 404 GET
  • 调整图像大小时添加细白线

    当我们调整图像大小时 下载之后并将其存储到文档目录之前 通过以下代码 UIImage resizeImage UIImage image withSize CGSize newSize float actualHeight image si
  • 删除bash中每行的最后一个单词

    我正在尝试浏览一个文件 并删除每行中的最后一个单词 目前 我正在使用命令 sed s n old txt gt new txt 但结果显示 old txt 与 new txt 相同 感谢您的帮助 如果我能澄清这个问题 请告诉我 另外 为了定
  • 使用 JXL 将图像插入 Excel 文件而不拉伸它

    我可以使用 jxl 将图像插入到我的 excel 文件中sheet addImage WritableImage obj 我的问题是 它根据以下参数进行延伸WritableImage 我想知道是否有一种方法可以使我插入的图像不会像插入 20
  • SendGrid SMTP API:嵌入图像:错误请求

    我正在使用 sendgrid SMTP APIhttps github com sendgrid sendgrid csharp https github com sendgrid sendgrid csharp发送电子邮件 但我不知道如何
  • 在Python中,为什么负数的偶次方仍然是负数? [复制]

    这个问题在这里已经有答案了 在Python中 gt gt gt i 3 gt gt gt i 4 81 Why is i 4不评价为 i 4 但作为 i 4 我想有人可能会争辩说 求幂优先于 隐式 乘法i减一 即你应该阅读 1 i 4 但我
  • 如何在gdb中调用汇编?

    在 gdb 中我可以使用call运行函数 但是如果我想运行一些额外的程序集怎么办 Prior to GCC 5 1 I don t know of a way to run arbitrary machine code unless you
  • character_set_connection 的目的是什么?

    刚刚读过 Stefan Gehrig 的精彩回答是否需要 设置字符集utf8 https stackoverflow com questions 1566602 is set character set utf8 necessary 它比
  • 此错误是什么意思“NATURAL join 中使用的列不能有限定符”

    执行下面的代码后 我收到 ORA 25155 错误 SELECT p prod id prod name prod list price quantity sold cust last name FROM products p NATURA
  • 使用计数器和条件结束循环

    在Python中 我可以实现一个带有步数计数器和停止条件的循环作为经典案例for loop for i in range 50 result fun i print i result if result 0 break where fun