Python 中的文字可以被覆盖吗?

2024-06-26

找不到更好的方式来表达标题,请随时更正。

我对 Python 还很陌生,目前正在尝试该语言。我注意到所有内置类型都不能与其他成员一起扩展。例如,我想添加一个each方法到list类型,但那是不可能的。我意识到它是出于效率原因而设计的,并且大多数内置类型都是用 C 实现的。

好吧,我发现重写这种行为的原因之一是定义一个新类,它扩展了list但除此之外什么也不做。然后我可以分配变量list到那个新类,每次我想实例化一个新列表时,我都会使用list构造函数,就像它被用来创建原始的一样list type.

class MyList(list):
    def each(self, func):
       for item in self:
           func(item)
list = MyList

my_list = list((1,2,3,4))
my_list.each(lambda x: print(x))

Output:

1
2
3
4

当然,这个想法可以通过定义一个方法来概括,该方法获取内置类型并返回扩展该类型的类。更进一步的是,原来的list变量可以保存在另一个变量中以保持对其的访问。

我现在面临的唯一问题是,当你实例化一个list按其字面形式,(即[1,2,3,4]),它仍然会使用原始的列表构造函数(或者是吗?)。有没有办法覆盖这种行为?如果答案是否定的,您是否知道使用户能够扩展内置类型的其他方法? (就像 javascript 允许扩展内置原型一样)。

我发现内置函数的这种限制(无法向其中添加成员)是 Python 的缺点之一,使其与其他用户定义的类型不一致......总的来说,我真的很喜欢这门语言,而且我真的不明白为什么会这样限制确实有必要。


这是Python的良心选择。

首先,关于修补内置类型,这主要是一个设计decision其次是优化。我从 Python 邮件列表中潜伏的大量经验中了解到,对内置类型进行猴子修补虽然对小脚本来说很有趣,但在更大的脚本中没有任何好处。

其一,图书馆对类型做出某些假设。如果鼓励扩展默认类型,许多库最终会互相争斗。也会让人望而却步making新类型——双端队列是双端队列,有序集是有序集,字典是字典,应该就是这样。

文字语法是特别重要的一点。如果你不能保证[1, 2, 3]就是一个清单,你能保证什么?如果人们能够改变这些行为,就会产生全球影响,从而破坏许多代码的稳定性。这是有原因的goto不鼓励使用全局变量。


我有一个特别的技巧am不过,喜欢。当你看到r"hello",这似乎是一种扩展的文字形式。

那么为什么不呢r[1, 2, 3]?

class ListPrefixer:
    def __init__(self, typ):
        self.typ = typ

    def __getitem__(self, args):
        return self.typ(args)

class MyList(list):
    def each(self, func):
        return MyList(func(x) for x in self)

e = ListPrefixer(MyList)

e[1, 2, 3, 4].each(lambda x: x**2)
#>>> [1, 4, 9, 16]

最后,如果你真的想进行深入的 AST hack,请查看MacroPy https://github.com/lihaoyi/macropy.

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

Python 中的文字可以被覆盖吗? 的相关文章

  • X 轴刻度标签按年份,X 轴网格线按财政季度

    我试图将 x 轴刻度标签设置为年份 但将网格线设置为财政季度 数据很简单 只是一个groupby date count 见下文 每个日期都有一个计数 我将其绘制为线图 rc rc form Bakken rc tgt oil groupby
  • 如何获取 Pandas df.merge() 不匹配的列名称

    给出以下数据 data df pd DataFrame Reference A A A B C C D E Value1 U U U V W W X Y Value2 u u u v w w x y index 1 2 3 4 5 6 7
  • 从networkx中的文件中读取具有pos属性的节点

    我是 Networkx 的新手 我有一个包含以下格式的节点位置的文件 0 23 23 12 23 where 0是一个节点 23 23 and 12 23分别是X和Y坐标 有谁知道如何读取节点pos属性 使用类似的函数read edgeli
  • pandas 读取列中带有额外逗号的 csv

    我正在阅读一个基本的 csv 文件 其中各列用逗号分隔 列名称如下 userid username body 但是 正文列是一个可能包含逗号的字符串 显然这会导致一个问题 pandas 会抛出一个错误 CParserError Error
  • Python Flask 删除请求

    我正在开发一个 Python 应用程序并使用 Flask 这是我的 DELETE 函数 app route DeleteMessage methods DELETE def DeleteMessage messages Message qu
  • 如何在redis中使用python删除排序集中的项目

    如何使用 python 删除排序集中大于某个值的项目 key foo pipe redis master conn pipeline pipe zadd key 1 a pipe zadd key 2 b pipe zadd key 3 c
  • 搜索/替换 xml 内容

    我已经成功地使用 xml etree ElementTree 解析 xml 搜索内容 然后将其写入不同的 xml 然而 我只是处理单个标签内的文本 import os sys glob xml etree ElementTree as ET
  • 为什么Flask后台线程获取错误的数据库信息?

    为了将实时数据库信息推送到客户端 我在服务器端使用flask socketio 通过使用websocket将所有实时数据库信息推送到客户端 我的视图文件有一个片段 from models import Host from flask soc
  • 如果每个元组中的第二项重复,如何从元组列表中删除元素?

    如果每个元组中的第二项重复 如何从元组列表中删除元素 例如 我有一个按第一个元素排序的列表 如下所示 alist 0 7897897 this is a foo bar sentence 0 653234 this is a foo bar
  • 在 Python 中解压存档时出现错误

    我使用 Python 下载 bz2 文件 然后我想使用以下方法解压存档 def unpack file dir file cwd os getcwd os chdir dir print Unpacking file s file cmd
  • 如何在 Google App Engine (Python) 中定义配置变量/常量?

    我是 python GAE 的新手 想知道如何快速定义和使用全局设置变量 所以说你 git 克隆我的 GAE 应用程序 然后打开config yaml 添加更改设置 应用程序就全部连接起来 如下所示 config yaml or whate
  • dask分布式内存错误

    在分布式作业上运行 Dask 时 我在调度程序上遇到以下错误 distributed core ERROR Traceback most recent call last File usr local lib python3 4 dist
  • 使用 SQLAlchemy 查询 Pandas DataFrame 时重命名列

    当您将数据查询到 pandas 数据帧时 有没有办法保留 SqlAlchemy 属性名称 这是我的数据库的简单映射 对于 school 表 我将数据库名称 SchoolDistrict 重命名为较短的 district 我从 DBA 中删除
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • Python - 从一定范围内随机采样,同时避免某些值

    我一直在阅读有关random sample 函数在random模块 但没有看到任何可以解决我的问题的东西 我知道使用random sample range 1 100 5 会给我来自 人群 的 5 个独特样本 我想得到一个随机数range
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • 为什么变量 1 += 变量 2 比变量 1 = 变量 1 + 变量 2 快得多?

    我继承了一些 Python 代码 用于创建巨大的表 最多 19 列宽 5000 行 花了九秒用于在屏幕上绘制表格 我注意到每一行都是使用以下代码添加的 sTable sTable n GetRow where sTable是一个字符串 我将
  • VSCode IntelliSense 认为 Python 'function()' 类存在

    VSCode IntelliSense 正在完成一个名为的 Python 类function 这似乎不存在 例如 这似乎是有效的代码 def foo value return function value foo 0 But functio
  • 如何限制单元测试的最大运行时间?

    我目前正在运行一些单元测试 这些测试可能需要很长时间才能失败或无限期地运行 在成功的测试运行中 它们总是会在一定的时间内完成 是否可以创建一个 pytest 单元测试 如果在一定时间内未完成 该测试就会失败 您可以安装 pytest tim

随机推荐

  • 为什么我的 PHP 字符串比较失败?

    我有以下代码片段 if summary CFD funding Interest Paid summary Commissions summary Closing trades print summary date reference de
  • 正则表达式表示 hh:mm am/pm 格式的时间

    我需要对学校项目的输入进行严格验证 时间格式为 HH MM am pm 到目前为止 我已经得到了这个正则表达式 01 0 9 0 5 0 9 AaPp Mm 这是一个工作演示 http regexr com 3c9b5 http regex
  • 渲染 StackedInline 字段时如何重写 str 方法?

    我有多对多关系 class GroupeCategoriesCategorie models Model groupe categories models ForeignKey GroupeCategories related name g
  • MS Access:将组合框中选定的条目插入表中

    这是我使用 MS Access 所做的一个示例 我有一个包含人名的表格和两个用于添加电话号码的文本字段 我创建了一个包含名称的列表框 我设法将列表框中选定的姓名和文本字段 Tel1 和 Tel2 中的电话号码插入表 ContactTable
  • 将 SVG 中的文本修剪为给定的像素宽度

    我正在 SVG 中绘制文本标签 我有一个可用的固定宽度 比如 200px 当文字太长时 如何修剪 理想的解决方案还会在文本被剪切的地方添加省略号 但没有它我也可以生活 使用 d3 库 溢出文本的包装函数 function wrap var
  • JMenuItem:如何设置具有3个键的加速器?

    请看下面的代码 import java awt import java awt event import javax swing public class MenuActions extends JFrame private JMenuBa
  • 类型“Queryable”上的通用方法“OrderBy”与提供的类型参数不兼容

    我正在编写一些代码来修改表达式 以便其中包含的子查询得到排序 我发现了一段类似的代码这里就这样 https stackoverflow com a 1379693 509464 但这对我不起作用 我也尝试看看this https stack
  • 如何在 Amserial 图表中添加图例

    我在 AngularJS 应用程序中使用 Amcharts 创建一个简单的条形图 以下是我在控制器中的代码 let empChart let empBarGraph let empLine const writeemp data gt co
  • WP7模拟器的独立存储位于PC上的哪里?

    当我们使用模拟器并将文件存储在隔离存储中时 文件实际存储在计算机上的哪里 我的意思是路径 如果 模拟器 指的是模拟器 那么该数据不会存储在主机 PC 上的 真实 文件夹中 模拟器 为了论证 是一个虚拟机 因此它的整个文件夹结构是单独存储的
  • 在 Qt 5.12 的 OpenCV dll 上找不到入口点

    TLDR 将 OpenCV 与 QT MingW 链接会使应用程序在调试时崩溃 但不会在发布时崩溃 我正在尝试在基于 Qt 的大型多操作系统项目中使用 OpenCV 我已经轻松地为 Mac 和 Linux 构建了 OpenCV 但在 Win
  • PowerMockito 与 Jacoco 代码覆盖率

    Powermockito 和 jacoco 的代码覆盖率 在我的项目中 我们使用 powermockito 来覆盖 jacoco api 的代码 看来我们使用 preparefortest xyzimpl class abcd class
  • 为什么我的 HTML 文件无法在浏览器中显示?

    我正在学习如何使用文本编辑器 并且刚刚用它创建了我的第一个文件 它预览了正确的输出 但是当我在浏览器中运行它时 它给了我一个空白页面 正如您所看到的 doctype 和 html 标签以及 head 和 body 都已就位 我使用 Visu
  • OCaml:设置模块

    我想使用 OCaml 生成数据集并在它们之间进行比较 我看过模块类型的文档 例如Set OrderType Set Make等等 但我不知道如何初始化一组或以其他方式使用它们 集合是使用函数接口定义的 对于任何给定的类型 您必须创建一个Se
  • 当托管在 IIS 中时,如何通过代码配置 WCF 服务?

    我的 WCF 服务公开 https 和 http 端点 除了 SSL 之外 它们是相同的 它们映射到相同的代码 最终目的是外部用户通过https连接 内部用户使用http 在开发中这给我带来了一个问题 Cassini VS 中打包的开发 W
  • BOOST_FUSION_ADAPT_TPL_STRUCT 和模板数组大小

    我正在尝试迭代 C 模板结构 这要归功于BOOST FUSION ADAPT TPL STRUCT http www boost org doc libs 1 53 0 libs fusion doc html fusion adapted
  • “窃取工作”与“耸肩工作”?

    为什么我可以找到很多关于 工作窃取 的信息 而没有找到关于 工作耸肩 作为动态负载平衡策略的信息 我所说的 工作耸肩 是指pushing将多余的工作从繁忙的处理器转移到负载较少的邻居上 而不是让处理器闲置pulling从忙碌的邻居那里获取工
  • 变量可以存储在图像或 div 标签中吗?

    我已经成功地创建了一个巨大的div其中包含许多小divs 附加到它上面 所以它创建了一个网格 我的目标是能够在每个较小的变量中存储两个变量divs 瓷砖 目前 我可以通过更改较小的图块来存储一个值innerHTML 但是 我希望能够存储的不
  • 未捕获(承诺中)DOMException:注册失败 - 清单为空或丢失

    我正在尝试使用 Polymer 实现推送通知 我跟着这个链接 https developers google com web fundamentals getting started push notifications 并能够让服务人员注
  • 现有 UIPopoverController 中的 UIImagePickerController

    有没有办法将 UIImagePickerController 推送到现有 UIPopoverController 的导航控制器中 我所知道的是 您必须创建一个新的弹出窗口并在其中添加 UIImagePickerController 但我有一
  • Python 中的文字可以被覆盖吗?

    找不到更好的方式来表达标题 请随时更正 我对 Python 还很陌生 目前正在尝试该语言 我注意到所有内置类型都不能与其他成员一起扩展 例如 我想添加一个each方法到list类型 但那是不可能的 我意识到它是出于效率原因而设计的 并且大多