子类 string.Formatter

2023-11-24

在此发表评论:如何定义新的字符串格式化程序,我尝试子类化string.Formatter。这是我所做的。不幸的是我似乎在这个过程中打破了它

import string
from math import floor, log10

class CustFormatter(string.Formatter):
    "Defines special formatting"
    def __init__(self):
        super(CustFormatter, self).__init__()

    def powerise10(self, x):
        if x == 0: return 0, 0
        Neg = x < 0
        if Neg: x = -x
        a = 1.0 * x / 10**(floor(log10(x)))
        b = int(floor(log10(x)))
        if Neg: a = -a
        return a, b

    def eng(self, x):
        a, b = self.powerise10(x)
        if -3 < b < 3: return "%.4g" % x
        a = a * 10**(b%3)
        b = b - b%3
        return "%.4g*10^%s" % (a, b)

    def format_field(self, value, format_string):
      # handle an invalid format
      if format_string == "i":
          return self.eng(value)
      else:
          return super(CustFormatter,self).format_field(value, format_string)

fmt = CustFormatter()
print('{}'.format(0.055412))
print(fmt.format("{0:i} ", 55654654231654))
print(fmt.format("{} ", 0.00254641))

就像在最后一行中一样,我不按位置引用变量,我得到一个KeyError。显然,它期望一个在原始类中是可选的密钥,但我不明白为什么,而且我不确定我做错了什么。


str.format 是否自动编号, while string.Formatter才不是。

修改__init__并压倒一切get_value会成功的。

def __init__(self):
    super(CustFormatter, self).__init__()
    self.last_number = 0

def get_value(self, key, args, kwargs):
    if key == '':
        key = self.last_number
        self.last_number += 1
    return super(CustFormatter, self).get_value(key, args, kwargs)

顺便说一句,上面的代码并不严格模仿str.format行为。str.format如果我们将自动编号与手动编号混合在一起,则会抱怨,但上面没有。

>>> '{} {1}'.format(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot switch from automatic field numbering to manual field specification
>>> '{0} {}'.format(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot switch from manual field specification to automatic field numbering
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子类 string.Formatter 的相关文章

  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • XSL字符串多重替换功能

    如何让这个函数进行多重替换 经验 替换aaa with 111并替换bbb with 222 etc
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 64 位 Win 上缺少 dll

    我有一个 net 应用程序 它使用一些 vc 编译的 Win32 dll 它在 32 位 Win 上运行良好 但在 64 位上存在问题 无法加载 DLL xyz 找不到指定的模块 HRESULT 异常 0x8007007E 使用depend
  • 在 Python 中的函数中使用嵌套函数内的全局变量

    我想知道为什么我的代码不起作用 我预计它会返回 11 但它创建了一个异常 def f counter 1 def f1 global counter counter 1 while True f1 if counter gt 10 retu
  • Delphi Win32 的最佳共享软件锁 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 与我上一个问题相同的介绍 我正在重写和 或合并一堆我的 应用程序框架 类 基本主窗体 关于框 锁定例程和购买链接 自动更新 数据模块初始化程序等 基
  • 在哪里可以获得 groovy-all-4.0.0.jar?

    我在哪里可以获取 下载 groovy all 4 0 0 jar 其中包含一个文件中所有重要的 Groovy 4 0 模块 类 到目前为止我只找到了一个pom文件 但我无法使用Maven https repo1 maven org mave
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:在 mysql 中

    您好 我已经创建了 jdbc 程序 数据库是 MySQL 5 1 我所有的朋友也使用相同的数据库进行连接 我们所有人的联系总数变成了150个 所以当我想连接更多时我收到以下错误 com mysql jdbc exceptions jdbc4
  • WPF 根元素对于导航无效

    我正在将 WPF XBAP 应用程序转换为 WPF 桌面应用程序 我让它在桌面上运行 但现在尝试将页面引用更改为窗口引用 MyApp StartForm root element is not valid for navigation 我尝
  • 如何更改导航抽屉标题中 TextView 的文本?

    我想更改导航抽屉标题内 TextView 的文本 但我收到这个错误 java lang NullPointerException 尝试调用虚拟方法 void android widget TextView setText java lang
  • ASP.NET / C#:服务器控件中的 DropDownList SelectedIndexChanged 未触发

    我正在创建一个服务器控件 它基本上绑定两个下拉列表 一个用于国家 地区 一个用于州 并更新国家 地区的 selectedindexchanged 事件的州下拉列表 但是 它不会回发 有什么想法吗 将它们包装在 UpdatePanel 中的奖
  • strtotime() 被认为有害吗?

    似乎很多人都在为 PHP 中的日期 时间问题而苦苦挣扎 不可避免地 许多接受的答案往往是 Use strtotime这样 这真的是指导人们处理约会问题的最佳方式吗 我开始觉得strtotime是一种巧妙的技巧 不一定依赖于重要的日期 时间计
  • 实时 PL/SQL 输出

    是否可以实时获得 PL SQL 的输出 我有一个相当大的包裹 运行了一个多小时 我想看看该包裹在特定时间在哪里 无论如何 我目前使用一个日志表来执行此操作 每次运行该表都会填充数百个日志描述 我只是好奇这是否可能 Thanks 这就是我使用
  • 在大括号和管道中对命令进行分组不会保留变量

    说我有一个文件myfile在我当前的工作目录中 如果命令正常执行 我想设置一个变量 但也使用它的结果 ls myfile v 3 myfile echo v 3 但现在我也想通过管道传输结果 所以我使用 list 对命令进行分组的语法 un
  • 响应式设计:不同屏幕尺寸显示不同图像

    我们的客户希望在小屏幕上与大屏幕上有不同的横幅图像 不仅仅是收缩 拉伸以适应 而且实际上替换了不同的图像 全尺寸图像相当复杂 几个人 两个徽标和一些装饰文本 因此对于较小的图像 他们想要裁剪掉一些人 删除徽标等 所以他们想要最大的 最复杂的
  • 为什么带有两个常量的三元运算符比带有变量的三元运算符更快?

    在Java中 我有两个不同的语句 通过使用三元运算符来实现相同的结果 如下所示 num lt 0 0 num num num lt 0 0 1 看来第二条语句不必要地复杂 并且比第一条语句花费的时间更长 但是当我使用以下代码记录每个语句所花
  • Pandas 分割并选择第二个元素

    我有一个像这样的数据框 item id 26 23 24 65 12 24 54 24 66 23 当我说 df item id df item id map lambda x x split 0 I get item id 26 24 1
  • 在活动之间导航时重置运动布局

    我在我的主要活动中使用运动布局 它工作正常 但是 当我移至其他活动并导航回主活动时 有时活动会重置并且布局处于起始状态 如何防止这种情况发生 除此之外 我还有另一个关于运动布局的问题here 我所做的是添加一个字段 具体来说是一个布尔字段
  • 设置十六进制和十进制颜色的行为不同

    我试图通过以下方式设置橙色 WorkSheet Range A1 A5 Interior color 49407 and WorkSheet Range A1 A5 Interior color HC0FF Hex value of 494
  • 如何将 SelectManyCheckbox 与两个 ArrayList 一起使用? - Primefaces

    我正在尝试实现一个
  • PyMC 3 中的生存分析

    我尝试移植简单的生存模型从这里 介绍中的第一个 从 PyMC 2 到 PyMC 3 但是 我没有找到任何与 观察到的 装饰器等效的东西 并且我尝试编写新发行版失败了 有人可以提供一个例子 这是如何在 PyMC 3 中完成的吗 这是一个棘手的
  • 从 NSFetchedResultsController 设置 UITableView 标头

    我有一个NSFetchedResultsController这是从 a 中获取对象NSManagedObjectContext 我正在使用结果来填充 UITableView 我正在用这两个排序描述符进行过滤 NSSortDescriptor
  • 子类 string.Formatter

    在此发表评论 如何定义新的字符串格式化程序 我尝试子类化string Formatter 这是我所做的 不幸的是我似乎在这个过程中打破了它 import string from math import floor log10 class C