捕获字符串格式中的 **vars() 模式

2023-12-29

我经常发现自己使用以下模式进行字符串格式化。

a = 3
b = 'foo'
c = dict(mykey='myval')

#prints a is 3, b is foo, mykey is myval
print('a is {a}, b is {b}, mykey is {c[mykey]}'.format(**vars()))

也就是说,我经常需要在本地名称空间中打印值,通过调用 vars() 来表示。然而,当我查看我的代码时,不断重复这些似乎非常不Pythonic.format(**vars())图案。

我想创建一个函数来捕获这种模式。它会像下面这样。

# doesn't work
def lfmt(s):
    """
    lfmt (local format) will format the string using variables
    in the caller's local namespace.
    """
    return s.format(**vars())

除了当我在lfmt命名空间,vars() 不再是我想要的。

如何编写 lfmt 以便它在调用者的命名空间中执行 vars() ,以便以下代码可以像上面的示例一样工作?

print(lfmt('a is {a}, b is {b}, mykey is {c[mykey]}'))

Edit: 为了lfmt要从不同的命名空间调用时工作,您需要inspect模块。注意,如文档警告 http://docs.python.org/library/inspect.html#inspect.currentframe, the inspect模块可能不适合生产代码,因为它可能不适用于 Python 的所有实现

import inspect
def lfmt(s):
    caller = inspect.currentframe().f_back
    return s.format(**caller.f_locals)

a = 3
b = 'foo'
c = dict(mykey='myval')

print(lfmt('a is {a}, b is {b}, mykey is {c[mykey]}'))
# a is 3, b is foo, mykey is myval
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获字符串格式中的 **vars() 模式 的相关文章

随机推荐

  • AVAudioPlayerNode.scheduleFile() 的completionHandler 调用得太早

    我正在尝试在 iOS 8 中使用新的 AVAudioEngine 看起来player scheduleFile 的completionHandler被调用before声音文件已播放完毕 我正在使用长度为 5 秒的声音文件 并且println
  • 删除Kafka 0.8.1.1中的主题

    我需要删除主题test在 Apache Kafka 0 8 1 1 中 正如表中所表达的文档在这里 https kafka apache org documentation html basic ops modify topic 我已经执行
  • Android smack 库订阅(不显示入站或出站通知)

    我正在开发一个 Android 聊天应用程序 其中我使用 smack 库进行即时消息传递 一切工作正常 但最大的问题在于订阅 如何向其他用户发送订阅通知 这是我发送订阅请求的代码 public void run runOnUiThread
  • Lotus Domino Designer 中的源代码控制

    多年来 我们一直在一个大型项目中使用 Domino 但没有任何真正的源代码控制 除了服务器备份 因此 当我注意到最新的 Designer 8 5 3 具有与 SVN 集成的潜力时 我感到非常高兴 我无法仅通过以下方式让 SVN 工作原始说明
  • $watch'ing Angular 指令中的数据更改

    我怎样才能触发 watch当操作内部数据 例如 插入或删除数据 时 在 Angular 指令中使用变量 但不为该变量分配新对象 我当前正在从 JSON 文件加载一个简单的数据集 我的 Angular 控制器执行此操作 并定义了一些函数 Ap
  • 将记录从android中的hashmap保存到数据库中

    我只是想寻求帮助 我在列表视图中填充了一个哈希图 下面的代码是我的哈希图的代码 mylist new ArrayList
  • 使用Shapeless通过HList将Future的tuple转换为tuple的Future

    有没有一种简单的方法将 Future A Future B Future C Future N 类型的元组转换为 Future A B C N 这假设元组中元素的数量未定义 我尝试将元组转换为 HList 并尝试了类似的 FoldLeft
  • 这些图中的箭头图例(MVC - MVP - MVVM)是什么?

    我尝试理解 MVC MVP 和 MVVM 模式之间的主要区别 我找到了这 3 个图表 但我不确定是否理解它们 你能帮我解释一下虚线和实线的图例是什么吗 MVC 来自维基百科的定义 来自 Microsoft MSDN 网站的 MVP 来自微软
  • Python tkinter treeview获取/返回所选项目的父名称

    我试图在选择事件时返回 tkinter 树视图选择的父项 因此 如果选择更改为 子项 我希望它打印 父项 下面的工作示例 当前它打印选择项 而不是父项选择 try import tkinter as tk import tkinter tt
  • UML 序列图中的构造函数

    下面的序列图和构造函数 表示为创建对象 的含义是什么 消息的名称 Class B 是错误的 它应该是 create 这就是让你困惑的地方吗
  • 通过“/”在多行中一次拆分数千列,对新行中的值进行排序并添加“NA”值

    我想分割一个包含数千列的数据框 数据框如下所示 sample data of four columns sample lt read table stdin header TRUE sep POS v1 v2 v3 v4 152 0 0 1
  • 如何访问 .URL 文件中的 URL 和书签标题?

    我正在使用 NET 2 0 Visual Studio 2005 C 下面的代码从包含书签的 url 文件的目录中获取 IE 收藏夹 书签 的文件名 Example 用户 收藏夹 blah url 但我真正想要的是该文件内的书签 URL 当
  • 使文档可通过 java/servlet 下载

    我需要知道java servlet中是否有一种方法可以使存储在数据库中的文档 doc pdf 可供用户按请求的方式下载 请参见下文 例如 有一个网页和其中文档的链接 现在是这样完成的 如果用户单击该链接 则会打开一个新的空白窗口 并显示下载
  • MVC 最佳实践

    我是 MVC 新手 我正在使用 codeigniter 想知道应该在哪里放置 cut description 函数 我的模型检索事件列表 包括其描述 如果描述太长 我需要在前 n 个单词之后将其剪掉 并添加一个 阅读更多 链接 这样视图就不
  • 如何在 lldb 中打印 Vec

    我想使用 ascii 格式逐字节打印 vec let slice1 b abcdefg 我可以像这样打印结构 lldb p slice1 u8 slice1 data ptr 0x00007ff9abe00020 length 7 当我尝试
  • Java 线程等待锁定未(明显)锁定的对象

    通常 当我要求进行线程转储时 很容易解释性能不佳的系统的症状 即通常情况下 我可以看到许多线程显然正在等待已被另一个线程获取但未释放的监视器 在本例中 我有很多线程在等待监视器 0x965ad100 但似乎没有一个线程首先拥有该监视器 可以
  • 如何对数据库中的商品进行折扣建模?

    我正在建立一个电子商务网站 并希望在有限的时间内为某些商品提供折扣 我的产品表 MySQL 如下所示 Product productId Name Weight Price price as on the cover of the item
  • 使用 QAction 而不添加到菜单(或工具栏)

    我正在尝试开发一个具有非常模块化的命令方法的应用程序 并且认为这会很好 因为我正在使用 pyqt 使用 QAction 将快捷方式绑定到命令 但是 似乎操作快捷方式仅在操作在菜单或工具栏中可见时才起作用 有谁知道如何在不可见的情况下让此操作
  • Swift 和 CoreData 使用自定义类作为可转换对象

    我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象 我一直在浪费时间试图弄清楚但无法解决 我不断收到两个错误 无法将属性标记为 NSManaged 因为它的类型无法在 Objective C 中表示 并且属性无法
  • 捕获字符串格式中的 **vars() 模式

    我经常发现自己使用以下模式进行字符串格式化 a 3 b foo c dict mykey myval prints a is 3 b is foo mykey is myval print a is a b is b mykey is c