from __future__ import ... 能否保证 Python 2 和 3 的兼容性?

2024-01-23

我对热身“Python 2 还是 Python 3?”不感兴趣。问题(尽管最近的一个 https://stackoverflow.com/q/5478518/321973我发现已经一岁多了),但我偶然发现:

如果您的文件开始,您可以在 Python 2 下编写 Python 3 代码 与行:

from __future__ import absolute_import, division, generators, unicode_literals, print_function, nested_scopes, with_statement

完成该行后,您的代码将适用于 Python 2 或 Python 3。可能在极少数情况下它不起作用,但我有 没有找到任何,

这是真的?这一行是否足以确保您编写的代码可以在 Python 2.x(我假设 >=2.5)和 3.x(假设导入的模块在两者中都可用)上运行?


我会说不,这是胡说八道。即使有了这些导入,Python 2 和 3 之间仍然存在显着差异:例如,input()在Python 3中就像raw_input()在Python 2中;range()在Python 3中就像xrange()在 Python 2 中。xrange()你可能可以逃脱使用range()在 Python 2 中,只要范围很小,但如果范围很大,您的程序在 Python 2 和 Python 3 下的内存使用情况可能会非常不同。

您可以在代码中添加如下内容:

try:
    range = xrange
    input = raw_input
except NameError:
    pass

但接下来你必须找到所有这些边缘情况并修复它们。例如,有keys() and values()的方法dict在 Python 3 中返回迭代器,但在 Python 2 中返回列表,因此您需要编写一个dict“修复”这个问题的子类(然后永远不要在代码中使用字典文字而不包装它们,因为否则它们将是内置的dict type).

我想,通过使用__future__以及各种修复,并且通过限制自己在由此创建的可在 2.x 和 3.x 下运行的 Python 子集中编写代码,就有可能编写在两个版本中运行的代码。不过,看起来工作量很大。有一个理由有一个2to3公用事业...

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

from __future__ import ... 能否保证 Python 2 和 3 的兼容性? 的相关文章

  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 实体框架返回旧数据

    我遇到了 EF 无法在 3 层 WPF 应用程序中返回最新数据的问题 我怀疑这与我处理上下文生命周期的方式有关 这是场景 UnitOfWork 内包含多个存储库 还有一项服务 MyService 它使用 UnitOfWork 此 UnitO
  • 使用朴素贝叶斯分类器对推文进行分类:一些问题

    除了其他来源之外 我还使用 Stackoverflow 上的各种帖子 尝试实现自己的 PHP 分类器 将推文分为正面 中性和负面类别 在编码之前 我需要理清流程 我的思路和例子如下 p class p words class Bayes t
  • Nemerle 和 F# 在 .Net 上的功能比较

    社区维基问题 根据这个问题 在 Net 中使用 Scala 有什么好处 https stackoverflow com questions 3587499 what are the benefits of using scala in ne
  • ios7中光标可见性问题

    只需创建一个UITextField in ios7 SDK但是当我输入一些内容时 会显示文本UItextField但光标不是 关于可能出现什么问题的任何线索吗 使用光标更改 UITextField 的tintColor mobileText
  • Java 中的重定向 stdin 和 stdout

    我正在尝试重定向 java 中子进程的标准输入和标准输出 最终我会将输出转到 JTextArea 或其他东西 这是我当前的代码 Process cmd Runtime getRuntime exec cmd exe cmd getOutpu
  • C# 映射两个复杂对象

    我有四门课 public class Customer public string FirstName get set public string LastName get set public List
  • 获取从 firebase firestore 返回的文档中的特定字段

    所以 我有一个可能非常容易解决的问题 我只是不太明白 本质上 此时我正在尝试将特定文档的字段存储到 2 个变量中 以便我可以在其他地方使用它们 这是我的 firestore 层次结构 这是我到目前为止的代码 我认为我走在正确的轨道上 但我不
  • 如果类“包含”或正则表达式,美丽的汤?

    如果我的班级名称不断不同 例如 listing col line 3 11 dpt 41 listing col block 1 22 dpt 41 listing col line 4 13 CWK 12 通常我可以这样做 for Eac
  • Mercurial:获取有关存储库的信息而不克隆它们

    几天前 我开始尝试 Mercurial 一切都很顺利 直到我决定尝试编写一个小程序 该程序从远程服务器获取存储库列表和每个存储库的变更集 ID 列表 允许用户选择存储库并变更集 克隆它并更新到所选的修订版 这引发了两个问题 有没有办法从服务
  • 尝试将字符串文字作为模板参数传递[重复]

    这个问题在这里已经有答案了 我正在尝试找到一种舒适的方法来将字符串文字作为模板参数传递 我不关心支持尽可能多的编译器 我正在使用最新版本的 g std c 0x 我尝试了很多可能的解决方案 但都令我失望 我有点放弃了 但首先我想知道why其
  • 在Python中评估布尔环境变量

    在Python中如何评估环境变量是否为布尔值True 使用是否正确 if os environ ENV VAR is True Option 1 我认为这很有效 my env os getenv ENV VAR False lower in
  • XNA 查看矩阵 - 寻求解释

    我在理解 XNA 中的视图矩阵时遇到了一些严重的问题 我已经在所有其他部分方面取得了很大的进展 并且由于我刚刚学会了所需的数学知识 因此我不想在不首先了解内置矩阵函数的作用的情况下使用它们 现在我了解了旋转 投影和平移的基础知识 但我一生都
  • 在 .NET 中跨 AppDomain 移动对象

    有没有办法在 AppDomain 之间高效共享或移动 NET 对象 我意识到 AppDomains 的目的是提供隔离 但是我有一个情况 我需要移动一组相对较大的缓存不可变对象 这些对象的计算和创建成本很高 目前 我有一种有效的序列化方法 但
  • 如何从纬度和经度获取完整的地址?

    我想从 android 中的纬度和经度获取以下值 街道地址 市 州 Zip 完整地址 如何实现这一目标 Geocoder geocoder List
  • 在非角度页面上使用量角器测试登录

    我正在尝试使用量角器进行 e2e 测试 但首先我需要登录非角度页面 我尝试按照指示直接使用 webDriverhere http ng learn org 2014 02 Protractor Testing With Angular An
  • Xamarin Forms 在模拟器和设备上项目空白谷歌地图

    I have created a cross platform App using Xamarin forms On Mac Book Pro el Capitan I need to use maps in it thus using X
  • 错误:“在清单中找不到版本代码。”

    我正在尝试构建签名的应用程序包 以便发布 我所做的只是更新操作系统版本和一些图形 该应用程序在 ADK 上运行得很好 当构建签名的 apk 时 我收到以下错误消息 在清单中找不到版本代码 这是错误日志 由以下原因引起 com android
  • 英特尔编译器值得吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 非常简单 是英特尔编译器 http software intel com en us intel compilers 值得入手吗 我主要从事系统
  • Ubuntu 中的 PostgreSQL pg_dump 语法错误

    在 ubuntu 16 04 中 当我想运行 pg dump 时 它不起作用 我收到此错误语法错误 怎么了 postgres pg dump db name gt db name1 sql postgres postgres ERROR s
  • from __future__ import ... 能否保证 Python 2 和 3 的兼容性?

    我对热身 Python 2 还是 Python 3 不感兴趣 问题 尽管最近的一个 https stackoverflow com q 5478518 321973我发现已经一岁多了 但我偶然发现 如果您的文件开始 您可以在 Python