当前位置: 首页 > 面试题库 >

您可以列出函数接收的关键字参数吗?

戚鸿
2023-03-14
问题内容

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

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

这可以正常工作, 但是 如果d_args字典中有一些example函数不接受的值,则它显然会消失。.说,如果将示例函数定义def example(kw2):

这是一个问题,因为我无法控制d_argsexample函数的生成。它们都来自外部模块,并且example仅接受dict中的某些关键字参数。

理想情况下,我会做

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

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


问题答案:

比起直接检查代码对象并计算变量要好一些,那就是使用inspect模块。

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

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

def getRequiredArgs(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 missingArgs(func, argdict):
    return set(getRequiredArgs(func)).difference(argdict)

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

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

因此,是否可以调用的完整测试是:

def isCallableWithArgs(func, argdict):
    return not missingArgs(func, argdict) and not invalidArgs(func, argdict)

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



 类似资料:
  • 问题 你希望函数的某些参数强制使用关键字参数传递 解决方案 将强制关键字参数放到某个*参数或者单个*后面就能达到这种效果。比如: def recv(maxsize, *, block): 'Receives a message' pass recv(1024, True) # TypeError recv(1024, block=True) # Ok 利用这种技术,我们还能在接受

  • 本文向大家介绍python函数参数(必须参数、可变参数、关键字参数),包括了python函数参数(必须参数、可变参数、关键字参数)的使用技巧和注意事项,需要的朋友参考一下 ps:下面给大家介绍下python中函数、方法、关键字的区别 一、关键字 二、函 数   函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。可以自己定义一个函数。   --函数-封装了独立功能,可以直接调用   

  • 如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。 这样做有两个 优势 ——一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。 使用关键参数 例7.6 使用关键参数 #!/usr/bin

  • 问题内容: 在Python中,将 不是 Python标识符的关键字参数赋予函数是否安全?这是一个例子: 我之所以这样问,是因为使用包含破折号的名称对我来说更方便格式化(因为这些值对应于命令行参数中带破折号的名称)。但是这种行为是否可靠(即在不同的Python版本之间是否可以变化)? 我不确定是否正式支持使用非标识符作为关键字参数:实际上,文档内容如下: 如果语法** expression出现在函数

  • 问题内容: 以python内置函数为例。 但是我如何将xs提高到2的幂? 要得到 我知道列表理解会更容易。 问题答案: 根据文档, 不能 这样做(强调我自己): __ 部分参数 在 最左边的 将被前置到位置参数位置参数 您总是可以“修复”以使用关键字args:

  • 目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。而本节将介绍的关键字参数,则可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便。 关键字参数 是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。 因此,Python 函数的参数名应该具有更好的语义,这样程序可以立刻明