你能列出函数接收的关键字参数吗?

2023-11-27

我有一个字典,我需要将键/值作为关键字参数传递..例如..

d_args = {'kw1': 'value1', 'kw2': 'value2'}
example(**d_args)

这工作正常,but如果 d_args 字典中存在不被接受的值example函数,它显然死了..比如说,如果示例函数定义为def example(kw2):

这是一个问题,因为我无法控制d_args, 或者examplefunction..它们都来自外部模块,并且example只接受字典中的一些关键字参数。

理想情况下我会这样做

parsed_kwargs = feedparser.parse(the_url)
valid_kwargs = get_valid_kwargs(parsed_kwargs, valid_for = PyRSS2Gen.RSS2)
PyRSS2Gen.RSS2(**valid_kwargs)

我可能只会从有效关键字参数列表中过滤字典,但我想知道:有没有一种方法可以以编程方式列出特定函数采用的关键字参数?


比直接检查代码对象并计算变量更好一点的是使用检查模块。

>>> import inspect
>>> def func(a,b,c=42, *args, **kwargs): pass
>>> inspect.getargspec(func)
(['a', 'b', 'c'], 'args', 'kwargs', (42,))

如果您想知道它是否可以使用一组特定的参数进行调用,则需要未指定默认值的参数。这些可以通过以下方式获得:

def get_required_args(func):
    args, varargs, varkw, defaults = inspect.getargspec(func)
    if defaults:
        args = args[:-len(defaults)]
    return args   # *args and **kwargs are not required, so ignore them.

然后,告诉您特定字典中缺少什么的函数是:

def missing_args(func, argdict):
    return set(get_required_args(func)).difference(argdict)

同样,要检查无效参数,请使用:

def invalid_args(func, argdict):
    args, varargs, varkw, defaults = inspect.getargspec(func)
    if varkw: return set()  # All accepted
    return set(argdict) - set(args)

因此,如果它是可调用的,完整的测试是:

def is_callable_with_args(func, argdict):
    return not missing_args(func, argdict) and not invalid_args(func, argdict)

(这仅就 python 的 arg 解析而言是好的。任何运行时都会检查中的无效值kwargs显然无法检测到。)

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

你能列出函数接收的关键字参数吗? 的相关文章

随机推荐

  • 为什么 Chrome 不断在控制台中显示“无法安装网站:该页面不是从安全来源提供的”?

    每当我查看 Chrome 的控制台时 我都会看到以下错误消息 无法安装网站 该页面不是从安全来源提供的 这种情况是在几天前才开始发生的 而 Chrome 在此期间还没有更新 2019 年 12 月更新 这个答案已经过时了 其中提到的两个标志
  • 为什么需要 HTML 字符实体?

    为什么需要 HTML 字符实体 他们有什么好处 我不明白有什么意义 主要有两件事 它们允许您使用当前字符集中未定义的字符 例如 您可以合法地使用 ASCII 作为字符集 并且仍然通过实体包含任意 Unicode 字符 正如 Simon 所指
  • 使用 Perl 的 HTTP 多部分响应

    是否可以像多部分请求一样提供 HTTP 多部分响应 场景是这样的 我想提供一个 URL 它采用 EmployeeID 参数 作为回报 响应应包含员工的照片 最新的工资单以及姓名 年龄和地址等信息 接收端不是浏览器 而是一个获取此响应并稍后处
  • bash:将某些内容回显到窗口右端(右对齐)

    我正在寻找生成在 bash 中右对齐的成功 失败消息 一个例子是 apache2 执行时产生的结果 sudo etc init d apache2 reload etc 在上面的例子中 apache2 产生的结果非常漂亮和简洁 OK or
  • C++ 正则表达式字符串捕获

    尝试让 C 正则表达式字符串捕获工作 我已经尝试了 Windows 与 Linux Boost 与本机 C 0x11 的所有四种组合 示例代码是 include
  • 如何在 SQL Server 2008 中创建序列

    我正在使用以下代码在 SQL Server 中创建序列 但它显示错误为未知对象类型 请给出解决方案 这是我的代码 create sequence seqval start with 100 increment by 1 minvalue 0
  • SqlAlchemy 在查询表对象时不返回所有行,但在查询表对象列时返回所有行

    更新 下面的解决方案 我对 SqlAlchemy 非常陌生 所以如果这是一个明显的问题 请原谅 当我查询 Table 对象时 我只得到一个结果 数据库中的第一个结果 我的过滤器有 600 多个结果 当我按表上的列查询时 它会返回我期望的所有
  • 我应该在单例上实现 IDisposable 吗?

    我有一个 Windows 服务 其中包含一个单例 该单例又使用一些记录器 消息队列侦听器等 这些类实现了IDisposable 我应该实施IDisposable在单例本身中还是做其他事情来确保服务停止 崩溃后 本机资源一切正常 单例是这样实
  • 使用 ElasticSearch JDBC River 从表中获取更改

    我正在为 ElasticSearch 配置 JDBC River 但找不到任何好的配置示例 我已阅读全部pages on 弹性搜索河jdbc GitHub 我有一个 SQL 查询 需要每 X 秒从所有表列中获取更改 我如何告诉 JDBC R
  • symfony2 获取实体上的所有验证约束(yml、xml、注释)

    我试图获取实体上的所有验证约束并将这些约束转换为 Jquery 验证规则 现在我能够获取注释定义的约束 感谢 Symfony2 获取实体的验证约束 但我在获取 xml 和 yml 时遇到一些问题 xml file loader new Xm
  • 无法使用 Spring Security 创建 CSRF 令牌

    我在 Spring MVC 应用程序中使用 Spring Security 3 2 3 并得到一些意外的行为 根据文档在这里 应该可以使用 csrf token 在我的 html 的元标记中 我使用 JQuery 从中提取 内容 的值 并使
  • 故事板不包含标识符为“MainWindow”的控制器

    我正在尝试实例化一个NSWindowController来自我的 OS X 应用程序中的故事板 NSWindowController mainWindowController NSStoryboard storyboardWithName
  • 如何允许用户从他的相机胶卷或照片库中选取照片?

    我正在制作一个小照片编辑应用程序来娱乐 用户必须从相机胶卷中选择一张照片 然后将其导入进行修改 这通常是如何运作的 我见过许多应用程序允许使用看起来总是相同的标准控制器 是否也可以直接访问该库或自定义该控制器的外观 我应该从哪里开始寻找 最
  • 如何删除输入文本元素上的边框突出显示

    当 HTML 元素被 聚焦 当前被选中 被选项卡插入 时 许多浏览器 至少 Safari 和 Chrome 会在其周围放置蓝色边框 对于我正在处理的布局 这会分散注意力并且看起来不正确
  • C# 像 C++ 一样将所有内容设为公共/私有? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我最近开始学习 C 但我有一些 C 背景 我想知道我会怎么做类似的事情 class em
  • 需要一个简单的正则表达式来查找单个单词中的数字

    我有以下 url 路由 我想确保该路由的一部分只接受数字 因此 我可以提供一些检查单词的正则表达式 页 当前页 那么 有人能给我一个正则表达式 当单词是大于 0 的数字 任何 int 时 即 1 int max 它会匹配 1 9 0 9 其
  • 如何在 AVAudioPlayer 中静音?

    我创造了AVAudioPlayer 现在我想在用户单击按钮时将其静音 这是我尝试过的 player volume 1 0 when first time i initiate my player IBAction speakerOnOff
  • 如何一次只显示一个对话框?

    我的 Android 应用程序在单击按钮时显示一个 AlertDialog 当我多次单击该按钮时 会创建多个对话框 我怎样才能解决这个问题 这是我的代码 button setOnClickListener new OnClickListen
  • Firemonkey 中的动画 GIF

    我正在尝试使用 TImage 以 Firemonkey HD 形式显示动画 GIF 但我没有看到任何动画方法 使用 Vcl Imaging gifImg 不是一个选项 因为类型不同 有人可以建议一种方法来解决这个问题 或者可能是在 Fire
  • 你能列出函数接收的关键字参数吗?

    我有一个字典 我需要将键 值作为关键字参数传递 例如 d args kw1 value1 kw2 value2 example d args 这工作正常 but如果 d args 字典中存在不被接受的值example函数 它显然死了 比如说