如何检查函数/方法采用哪些参数? [复制]

2024-01-11

为了保持我用 Python 构建的几个模块的一致性,我想做一些自动代码检查。为此,我想检查模块的函数以及函数所采用的参数。我可以使用 hasattr() 来检查模块是否确实包含预期的功能。到目前为止,一切都很好。

我现在想看看函数采用哪些参数。只需查看变量名称就足够了。但我不知道我该如何做到这一点。有谁知道我如何获取函数所采用的参数的名称?


您可以使用inspect.getargspec() https://docs.python.org/2/library/inspect.html#inspect.getargspec查看接受哪些参数以及关键字参数的默认值。

Demo:

>>> def foo(bar, baz, spam='eggs', **kw): pass
... 
>>> import inspect
>>> inspect.getargspec(foo)
ArgSpec(args=['bar', 'baz', 'spam'], varargs=None, keywords='kw', defaults=('eggs',))
>>> inspect.getargspec(foo).args
['bar', 'baz', 'spam']

在Python 3中,你想使用inspect.getfullargspec() https://docs.python.org/3/library/inspect.html#inspect.getfullargspec因为此方法支持新的 Python 3 函数参数功能:

>>> def foo(bar: str, baz: list, spam: str = 'eggs', *, monty: str = 'python', **kw) -> None: pass
... 
>>> import inspect
>>> inspect.getfullargspec(foo)
FullArgSpec(args=['bar', 'baz', 'spam'], varargs=None, varkw='kw', defaults=('eggs',), kwonlyargs=['monty'], kwonlydefaults={'monty': 'python'}, annotations={'baz': <class 'list'>, 'return': None, 'spam': <class 'str'>, 'monty': <class 'str'>, 'bar': <class 'str'>})

inspect.getargspec()在 Python 3 中应该被视为已弃用。

Python 3.4 添加了inspect.Signature() object https://docs.python.org/3/library/inspect.html#introspecting-callables-with-the-signature-object:

>>> inspect.signature(foo)
<inspect.Signature object at 0x100bda588>
>>> str(inspect.signature(foo))
"(bar:str, baz:list, spam:str='eggs', *, monty:str='python', **kw) -> None"
>>> inspect.signature(foo).parameters
mappingproxy(OrderedDict([('bar', <Parameter at 0x100bd67c8 'bar'>), ('baz', <Parameter at 0x100bd6ea8 'baz'>), ('spam', <Parameter at 0x100bd69f8 'spam'>), ('monty', <Parameter at 0x100bd6c28 'monty'>), ('kw', <Parameter at 0x100bd6548 'kw'>)]))

以及更多有趣的签名选项。

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

如何检查函数/方法采用哪些参数? [复制] 的相关文章

随机推荐

  • require.js +backbone.js:如何构建具有初始化功能的模块?

    我有一个包含三个页面的应用程序 它们是单页界面 这些页面具有相似但不相同的功能 所以我想要有提供通用功能的 javascript 模块 然后每个页面可以定制 覆盖部分通用功能 我使用的是backbone js 所以我要做的是 加载包含常见模
  • 使用Python登录Google帐户进入网站[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个网站 该网站制作分组中人数的图表 来自 www codecamy com 为了实现这一目标 我制定了一个计划 我将有一个服务
  • HTTP 状态代码 200,但页面未加载 Node.js Socket.io -- Node.js Socket.io 教程、Daniel Nill、fs.readFile()、socket.html

    了解 node js 和 socket io 并进行操作Daniel Nill 的本教程 http www danielnill com blog nodejs tutorial with socketio 服务器启动没有问题 但是 当我导
  • 如何从codeigniter中的视图调用控制器函数?

    使用 codeigniter 我有一个控制器 如下所示
  • Android AccessibilityNodeInfo刷新()和回收()

    我已经阅读了 android 文档https developer android com reference android view accessibility AccessibilityNodeInfo html https devel
  • 当我在 OnChange 事件中调用 Delete 时,为什么会出现 RichEdit 行插入错误?

    我已经用谷歌搜索并检查了很多地方来寻找解决方案 但我发现的所有情况都不同或涉及比简单地添加或删除行更高级的东西 基本上 我想进行一种滚动丰富的编辑 替代方法是将插入符号移动到底部 我已经找到了解决方案 我正在向其中添加行并检查Lines C
  • 如何将变量/参数写入标准输出?

    我正在尝试调试我的第一个Bicep https learn microsoft com en us azure azure resource manager bicep overview模板 如何将变量或参数值写入标准输出 就像是 var
  • Spark 将每个操作执行两次

    我创建了一个简单的 Java 应用程序 它使用 Apache Spark 从 Cassandra 检索数据 对其进行一些转换并将其保存在另一个 Cassandra 表中 我正在使用 Apache Spark 1 4 1 它配置为独立集群模式
  • 将 ATL 项目从 vs2010 升级到 vs2013 时出现编译错误 [重复]

    这个问题在这里已经有答案了 当在 Visual Studio 2013 构建中包含来自 Microsoft ATL 库的 atlwin h 时 可能会导致出现大量有关未定义元素的编译器错误 HMONITOR is not defined 使
  • Xcode Instruments 在设备上运行时无法拍摄泄漏快照

    最近 在设备上运行应用程序时 我无法使用 Instruments 测试泄漏 仪器将尝试拍摄快照 但状态将冻结在 正在分析过程 起初我以为只是需要时间 但我等了20多分钟却没有运气 但它在模拟器上仍然运行良好 到目前为止我已经尝试过 使用具有
  • 收到构建或发布失败的通知

    我已经将 Azure 管道与团队松弛通道集成在一起 这很好 它告诉我们构建何时完成并发布部署 但真正糟糕的是 它不会报告构建或发布失败的时间 这可以说是更重要的信息 我进入设置尝试查看是否有任何事件 但似乎答案是否定的 我还想看看是否可以用
  • cygwin下使用GCC生成的可执行文件

    我正在使用 Cygwin 并已将 GCC 版本 4 3 4 20090804 release 1 安装为 Cygwin 软件包 当我在 Cygwin shell 下使用 GCC 构建 C 代码时 生成的可执行输出文件是类型为可执行文件 PE
  • 在运行时更改 spring-cloud-stream 实例索引/计数

    在 spring cloud stream 中 有没有一种方法可以在不重新启动应用程序的情况下更改应用程序的实例计数和实例索引 另外 是否有任何推荐的方法来自动填充这些值 在微服务世界中 这似乎非常困难 因为服务一直在启动和停止 在 spr
  • 在 python 中调试 argparse

    我可以知道调试 argpars 函数的最佳实践是什么 假设我有一个 py 文件 test file py 其中包含以下几行 Script start import argparse import os parser argparse Arg
  • Vue.js 单击时切换类

    如何在 vue js 中切换类 我有以下内容 th class initial span class wkday M span th new Vue el my container data methods myFilter functio
  • Grails:获取控制器内资产的本地存储路径

    我需要提取资产文件夹物理路径 以便从控制器写入文件 有什么简单的方法可以从控制器实现文件持久性吗 完整示例 class ExampleService def assetResourceLocator def someMethod Resou
  • UISwitch,Mac 上有类似的东西吗?

    我相信你们大多数人都熟悉UISwitch on iOS 他们是否有任何现有项目试图实施类似的东西UISwitch适用于 macOS 和 AppKit 如果没有 从哪里开始制作呢 我经常看到它们并且能想到很多用途 我认为你应该使用NSChec
  • 如何在颤振中显示带有顶部和底部渐变阴影的图像?

    我正在研究颤振以显示具有顶部和底部渐变叠加的图像 图像顶部和底部的某些部分应显示阴影 就像被其他颜色 如灰色 覆盖一样 请找到我画的附图供参考 我已将 Container 与 CachedNetworkImage 一起使用 并尝试使用 Bo
  • 如何在摇动设备时刷新应用程序?

    我需要添加一个摇动功能来刷新我的 Android 应用程序 我找到的所有文档都涉及实施SensorListener 但 Eclipse 告诉我它已被弃用并建议SensorEventListener 任何人都可以指导我如何创建这个shake
  • 如何检查函数/方法采用哪些参数? [复制]

    这个问题在这里已经有答案了 为了保持我用 Python 构建的几个模块的一致性 我想做一些自动代码检查 为此 我想检查模块的函数以及函数所采用的参数 我可以使用 hasattr 来检查模块是否确实包含预期的功能 到目前为止 一切都很好 我现