向我解释尾部调用优化的重要意义是什么以及为什么 Python 需要它

2024-01-12

显然,对于 Python 是否需要尾部调用优化 (TCO) 一直存在很大争议。当有人向 Guido 发送了一份 SICP 副本 http://drj11.wordpress.com/2009/04/30/python-tail-call-optimisation/,因为他没有“明白”。我和我在同一条船上Guido https://en.wikipedia.org/wiki/Guido_van_Rossum。我理解尾调用优化的概念。我只是想不出Python真的有什么理由needs it.

为了让我更容易理解,使用 TCO 可以大大简化的代码片段是什么?


就我个人而言,我非常重视尾调用优化;但主要是因为它使递归与迭代一样高效(或者使迭代成为递归的子集)。在简约语言中,您可以在不牺牲性能的情况下获得巨大的表达能力。

在“实用”语言(如 Python)中,OTOH,您通常对几乎所有可以想象的情况都有很多其他结构,因此它不太重要。当然,考虑到不可预见的情况,拥有它总是一件好事。

就我个人而言,我非常重视尾调用优化;但主要是因为它使递归与迭代一样高效(或者使迭代成为递归的子集)。在简约语言中,您可以在不牺牲性能的情况下获得巨大的表达能力。

在“实用”语言(如 Python)中,OTOH,您通常对几乎所有可以想象的情况都有很多其他结构,因此它不太重要。当然,考虑到不可预见的情况,拥有它总是一件好事。

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

向我解释尾部调用优化的重要意义是什么以及为什么 Python 需要它 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • Java表达式语言如何解析布尔属性? (在 JSF 1.2 中)

    所以我们都知道 someBean value 将尝试获取某些属性的内容someBean called value 它会寻找getValue 但是 如果这个属性是boolean 它会寻找isValue 它不会寻找的是hasValue 这让我思
  • BitmapImage 缺少 BeginInit() 和 EndInit() 函数?

    据我发现 我似乎无法访问上述功能 我正在导入 BitmapImage 类 using System Windows Media Imaging 但是在下面的代码中 public static void loadCardImage Card
  • 无法使用 Virtualenv 通过 pip 安装

    以下是我运行时遇到的错误pip serkan rm r mysite serkan pwd Users serkan Desktop Python Folder serkan virtualenv mysite New python exe
  • 传统 Web 应用程序和 API 中的身份验证、授权和会话管理

    如果我错了 请纠正我 在传统的 Web 应用程序中 浏览器会自动将会话信息附加到向服务器发出的请求中 以便服务器可以知道该请求来自谁 实际上到底附加了什么 但是 在基于 API 的应用程序中 此信息不会自动发送 因此在开发 API 时 我必
  • 运行 Android Studio gradle 构建时如何使用所有 CPU 核心/线程?

    我正在 Android Studio 中寻找参数或配置 Gradle 它可以设置构建 以便在构建期间使用我的所有 CPU 核心 即 如果我有一个四核 CPU 并且每个核心运行 8 个线程 我如何优化构建 以便它将使用它可以获得的所有资源 当
  • Matlab M 脚本可以通过脚本中的语句停止吗?

    一个非常简单且可能显而易见的问题 如何使用脚本中的语句中止 Matlab M 脚本的执行 这类似于调用return在函数中间立即结束它 If return http www mathworks com help matlab ref ret
  • 性能监控Openerp

    我们正在尝试实施新的遗物 http www newrelic com http www newrelic com 在开发服务器上测试 openerp 的性能 newrelic的以下安装步骤要求我们修改WSGI应用程序文件 我是 opener
  • TDD:单元测试异步调用

    guys 我正在开发一个应用程序 并通过单元测试来构建它 但是 我现在处于需要测试异步调用的情况 例如 void testUserInfoBecomesValidWhenUserIsBuiltSuccessfully if userBuil
  • go build 工作正常但 go run 失败

    我在主包的一个目录下有几个文件 主程序 配置文件 服务器 go 当我这样做时 去构建 程序构建完美并且运行良好 当我这样做时 go run main go 失败了 Output command line arguments main go
  • 如何让自托管 signalR 服务器作为 NetCore 控制台应用程序运行

    我想使用 NetCore 在控制台应用程序中创建 SignalR 自托管服务器 我对 Web 开发和 Net Core 完全陌生 但想使用 SignalR 作为基于 Web 的实时协议 不需要网页 所以我想要一个控制台应用程序 我已经成功测
  • 出售苹果股票(一进一出)

    任何人都可以帮我解决我的代码吗 我在卖苹果时遇到问题 它减去我的所有股票 有时当我的输入超过股票时 数字会变成负数 int main void int choice 0 int days 1 i buyApple int stocks 99
  • IntelliJ 中的远程结对编程

    结对编程时有没有办法使用 IntelliJ 如果有 v7 和 v8 的选项就好了 但如果需要的话我会升级到 v9 这个问题有点像this https stackoverflow com questions 926349 remote pai
  • gradle 测试执行时间过长

    我有一个 Spring boot 应用程序 可以在 10 秒内启动 然而 在一个简单的空集成测试中 我的执行时间很糟糕 60 70 秒 使用 IntelliJ 或时也是如此gradle test spring上下文的初始化比手动运行服务花费
  • Elixir + Ecto:不在 [array] 中怎么办?

    我正在尝试寻找所有Users 中没有特定的字符串元素match history场地 我对此进行了猜测 matched user User gt where u device id not in u match history gt limi
  • 如何从 Checkbox.checked 上的 Gridview 获取 Id?

    我有 GridView 和一个按钮 如下所示 然后我将 gridview 与数据库中的数据绑定 GridView 有两个隐藏字段 Id 和 ClassIndex 当我选择一个复选框并单击按钮时 我想获取相应的 ID 和文件名
  • 如何解决 JDK 的这个限制?

    我正在从 Java Collection Framework 中寻找一个不允许 null 元素的类 你认识一个吗 Use Constraints import com google common collect Constraints Co
  • 聊天机器人 - 使用 Facebook 登录为不属于您的页面生成页面令牌

    有谁知道如何在您不拥有的页面上安装 Facebook 聊天机器人 我已经创建了一个聊天机器人并希望允许其他FB页面安装我的聊天机器人应用程序 我可以为我管理的FB页面生成page access token 但是如何获取我不是管理员的FB页面
  • 如何在生产模式下运行 GWT

    我正在尝试按照以下说明在生产模式下运行 GWT 项目https developers google com web toolkit usingeclipse https developers google com web toolkit u
  • 自定义视图组中的视图未显示

    我最近深入研究创建自定义 ViewGroups 并遇到了一个我无法解决的问题 我有 2 个 ViewGroups ViewManager 和 Article ViewManager 只是在上一篇文章下方布置一篇文章 即像垂直 LinearL
  • 向我解释尾部调用优化的重要意义是什么以及为什么 Python 需要它

    显然 对于 Python 是否需要尾部调用优化 TCO 一直存在很大争议 当有人向 Guido 发送了一份 SICP 副本 http drj11 wordpress com 2009 04 30 python tail call optim