如何创建 Python 命名空间(argparse.parse_args 值)?

2024-01-13

为了以交互方式测试我的 python 脚本,我想创建一个Namespace对象,类似于返回的内容argparse.parse_args()。 显而易见的方式,

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a

Process Python exited abnormally with code 2

可能会导致 Python repl 因愚蠢错误而退出(如上所述)。

So, 创建具有给定属性集的 Python 命名空间的最简单方法是什么?

例如,我可以创建一个dict飞行中(dict([("a",1),("b","c")]))但我不能用它作为Namespace:

AttributeError: 'dict' object has no attribute 'a'

附言。新的exit_on_error https://docs.python.org/3/library/argparse.html#exit-on-error选项看起来像是创建一个有前途的替代方案Namespace对象,但它是严重破损 https://github.com/python/cpython/issues/85427,显然是设计使然。


您可以创建一个简单的类:

class Namespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

它的工作方式与argparse Namespaceclass 涉及到属性时:

>>> args = Namespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'

或者,只需导入类;它可以从argparse module:

from argparse import Namespace

args = Namespace(a=1, b='c')

从 Python 3.3 开始,还有types.SimpleNamespace https://docs.python.org/3/library/types.html#types.SimpleNamespace,它本质上做了同样的事情:

>>> from types import SimpleNamespace
>>> args = SimpleNamespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'

这两种类型是不同的;SimpleNamespace主要用于sys.implementation属性和返回值time.get_clock_info().

进一步比较:

  • 两个类都支持相等性测试;对于同一类的两个实例,instance_a == instance_b如果它们具有相同的属性和相同的值,则为 true。
  • 两个课程都有帮助__repr__来显示他们有什么属性。
  • Namespace()对象支持遏制测试;'attrname' in instance如果命名空间实例具有属性 namend,则为 trueattrname. SimpleNamespace才不是。
  • Namespace()对象有一个未记录的._get_kwargs()返回排序列表的方法(name, value)该实例的属性。您可以使用以下命令为任一类获得相同的结果sorted(vars(instance).items()).
  • While SimpleNamespace()是用C实现的并且Namespace()是用Python实现的,属性访问并不更快,因为两者使用相同的__dict__属性的存储。相等性测试和生成表示的速度要快一些SimpleNamespace()实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建 Python 命名空间(argparse.parse_args 值)? 的相关文章

  • 透视包含字符串的 Pandas Dataframe - “没有要聚合的数字类型”错误

    关于此错误有很多问题 但环顾四周后 我仍然无法找到 解决解决方案 我正在尝试用字符串旋转数据框 以使一些行数据变成列 但到目前为止还没有成功 我的 df 的形状
  • 无法在 Python 2.4 中解码 unicode 字符串

    这是Python 2 4 中的 这是我的情况 我从数据库中提取一个字符串 它包含一个变音的 o xf6 此时 如果我运行 type value 它会返回 str 然后我尝试运行 decode utf 8 但收到错误 utf8 编解码器无法解
  • 给定日期时间列的熊猫按周分组

    假设我有以下数据样本 df pd DataFrame date 2011 01 01 2011 01 02 2011 01 03 2011 01 04 2011 01 05 2011 01 06 2011 01 07 2011 01 08
  • 如何在Python中导入caffe模块?

    我在 Windows 发布版 x64 上构建了 caffe cpp 的 dll 我将扩展名 dll 更改为 pyd 并尝试将其导入到 python 中 import caffe File caffe master python caffe
  • Python 如何使用 ExcelWriter 写入现有工作表

    我正在尝试使用 ExcelWriter 将一些信息写入 添加到包含多个工作表的工作簿中 当我第一次使用该功能时 我正在使用一些数据创建工作簿 在第二次通话中 我想将一些信息添加到工作簿中不同位置的所有工作表中 def Out Excel f
  • 这个 cProfile 结果告诉我需要修复什么?

    我想提高Python脚本的性能并且一直在使用cProfile生成性能报告 python m cProfile o chrX prof bgchr py args 我打开这个chrX prof使用 Python 的文件pstats并打印出统计
  • pyspark 中的 Pandas UDF

    我正在尝试在 Spark 数据帧上填充一系列观察结果 基本上我有一个日期列表 我应该为每个组创建缺失的日期 在熊猫中有reindex函数 这是 pyspark 中不可用的 我尝试实现 pandas UDF pandas udf schema
  • 使用 ctypes 映射共享库中的全局变量

    我想映射一个 int 值pbs errno在库中声明为全局libtorque so使用ctypes 目前我可以像这样加载库 from ctypes import libtorque CDLL libtorque so 并成功映射了一堆功能
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 如何找到由完全相对的字母组成的单词? (蟒蛇)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我尝试了很
  • 卸载我安装的所有 Python 包及其依赖项,而不用破坏我的 Mac

    有很多问题 但正确的方法似乎是手动卸载不需要的所有内容 pip 在卸载时不会卸载包的依赖项 https stackoverflow com questions 7915998 does uninstalling a package with
  • scipy.special.binom 和 scipy.misc.comb 之间有什么区别?

    scipy special binom 和 scipy misc comb 之间有什么区别 在 ipython 中我可以看到它们返回不同的类型并且也有不同的精度 scipy special binom 4 3 4 0 scipy misc
  • Python Pandas 删除重复单元格 - 保留行

    我试图根据单列删除特定列的重复值 同时保留行的其余部分 df pd DataFrame A 1 2 3 4 B 5 5 6 7 C a a b c D c d e f 我想根据 C 列中的重复项删除 A 列和 B 列中的值 但保留 D 列的
  • 我把 IPython 配置文件放在哪里?

    我已经尝试将 edit 编辑器设置为 Emacs 一段时间了 但进展非常缓慢 IPython 0 13 文档不清楚如何实际配置它 它告诉我通过添加将 EDITOR 设置为所需的编辑器 在我的例子中为 emacsclient c get co
  • 关于二进制文件的一般问题

    我是初学者 在掌握二进制文件方面遇到困难 当我以二进制模式 在 python 中 写入文件时 我只写入普通文本 它没有任何二元性 我知道我计算机上的每个文件都是二进制文件 但我无法区分我以二进制模式编写的文件和音频 视频等文件 如果我在文本
  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统

随机推荐