为 Python 函数参数提供额外装饰/元数据的好方法是什么?

2023-12-31

我们正在考虑使用 Python(IronPython,但我认为这不相关)为另一个控制设备的应用程序提供某种“宏”支持。

我们想用 Python 编写相当简单的函数,它需要一些参数——比如时间、温度和位置。不同的函数将采用不同的参数,主应用程序将包含用户界面(类似于属性网格),允许用户为 Python 函数参数提供值。

因此,例如,函数 1 可能需要时间和温度,而函数 2 可能需要位置和几次。

我们希望能够从 Python 代码动态构建用户界面。容易做的事情是在模块中查找函数列表,并(使用inspect.getargspec)获取每个函数的参数列表。

然而,仅仅参数名称列表还不够 - 理想情况下,我们希望能够包含有关每个参数的更多信息 - 例如,它是“类型”(高级类型 - 时间、温度等,而不是语言级别类型),也许还有“友好名称”或描述。

所以,问题是,将此类信息添加到函数中的良好“Pythonic”方法是什么。

我想到的两种可能性是:

  • 对参数使用严格的命名约定,然后从它们的名称中推断出有关它们的内容(使用 getargspec 获取)

  • 发明我们自己的文档字符串元语言(可能比 CSV 稍大一些)并将文档字符串用于我们的元数据。

因为 Python 在将脚本构建到大型应用程序中似乎非常流行,所以我想这是一些常见约定的已解决问题,但我还没有找到它们。


装饰器是向函数添加元数据的好方法。添加一个将类型列表附加到 .params 属性或其他内容的列表:

def takes(*args):
    def _takes(fcn):
        fcn.params = args
        return fcn
    return _takes

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

为 Python 函数参数提供额外装饰/元数据的好方法是什么? 的相关文章

随机推荐

  • 未报告的异常 java.sql.SQLException;必须被抓住还是被宣告被抛出? [复制]

    这个问题在这里已经有答案了 我在尝试编译以下代码时遇到此错误 我想知道我做错了什么 unreported exception java sql SQLException must be caught or declared to be th
  • 如何在Android中正确实现feed(类似于Facebook/Instagram)?

    我对 Android 很陌生 我正在尝试创建一个包含大量图像和一些元数据的社交应用程序 它有一个类似于 Facebook 上的信息流的屏幕 我想让这个屏幕尽可能的平滑和标准 以下是我正在使用的库 OkHttp Picasso Retrofi
  • Xcode 如何找到隐式目标依赖项?

    Xcode 有时会自动查找依赖项 我认为当我是定义关系的人并且当我变得懒惰时 这是可以的 但我经常发现自己面临着一个具有多个目标的现有 中型到大型 项目 由于该项目是由其他人制作的 因此我发现很难理解哪些目标取决于什么并非所有关系都是明确的
  • 如何使用 WCF 连接 Apple 的 GSX NewGeneration Web 服务?

    从 2015 年 8 月 15 日开始 Apple 的 GSX Web 服务将升级到更安全的版本 每个请求都需要客户端 SSL 证书 我需要采取哪些步骤才能使用 WCF 框架和 C NET 连接到这个新一代 Web 服务 Apple 的文档
  • Selenium (Python) - 单击按钮元素但不将页面重定向到目标链接

    我正在 Python 中使用 Selenium 测试 Web UI 我遇到了一个测试用例 其中按钮单击后应重定向到另一个页面 但是 每次代码执行时都没有任何异常 但页面仍然没有被重定向 我确信按钮被正确单击 因为按钮动画和鼠标光标发生变化
  • Excel:使用工作表作为函数?

    我有一个 Excel 工作表 它接受两个输入并生成一个输出 我当前可以打开工作表 将两者键入单元格 A1 和 A2 结果显示在 A3 中 有没有办法可以将其变成函数或子例程 以便我可以在另一个工作表中使用它来填写值表 数据表 http of
  • Code Golf:验证数独网格

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 介绍 有效的数独网格由数字 1 到 9 填充 并且数字在 9 行或列的每个子块中出现的次数不会
  • Grails jQuery Mobile 应用程序中的 Spring Security 刷新错误

    我有一个 Grails 2 0 1 jQuery Mobile 应用程序 这是我第一次使用 Spring Security 我遵循了 Peter Ledbrook 的出色指示post http blog springsource org 2
  • 如何将 pg_dump 与连接 uri / url 一起使用?

    我可以调用psql像这样 psql postgres 我该如何使用pg dump带有以下格式的连接字符串postgres 比将 URI 分解为主机 帖子 用户名 密码更方便 有这方面的语法吗 pg dump postgres usernam
  • MySQL 无法在 AMPPS OS X 上启动

    我在使用 AMPPS 启动 mysql 时遇到问题 我正在使用 OS X Mavericks 和最新版本的 Ampps 在小系统崩溃并重新启动后 我无法启动 mysql mysql 错误 2014 01 22 18 12 41 398 No
  • C# 获取机器IP地址的方法

    如何在 C 中获取机器的 IP 地址 IPAddress localIPs Dns GetHostAddresses Dns GetHostName 您的计算机没有单个 IP 地址 并且某些返回的地址可能是 IPv6 MSDN 链接 Dns
  • 获取视频上传的确切时间

    我正在使用Youtube API http gdata python client googlecode com svn trunk pydocs gdata html使用关键字查询进行搜索 import gdata youtube imp
  • ASP.NET MVC3 - “对象引用未设置到对象的实例”错误

    我对 NET 和 MVC3 比较陌生 尝试添加对象的实例时 我遇到了上述错误消息的问题 下面是我的代码 关键日期类 public class KeyDate Key public int KeyID get set StringLength
  • 如何将我的解决方案纳入 Windows 问题报告和解决方案

    Windows Vista 添加了问题报告和解决方案功能 用于记录软件问题 将其报告给 Microsoft 然后表示他们会收集这些问题的解决方案并提供给用户 因此 当我的程序遇到错误并崩溃时 用户会收到异常报告 source beholdg
  • 单击时不要隐藏 OverlayPanel

    我想做 PrimeFaces覆盖面板 http www primefaces org showcase labs ui overlayPanel jsf即使用户单击工具提示之外的区域也保持可见 关闭工具提示的唯一方法是使用其上的 关闭 按钮
  • Apiary:将 API 导出为 JSON,以生成客户端代码

    我们都知道养蜂场很强大 或者不是 我认为确实如此 我想知道如何才能更进一步允许用户导出 API 的 JSON 描述 因此开发人员可以编写客户端代码生成脚本 这应该有帮助 http ttezel github io blog 2013 02
  • c中的序列点

    命令式编程中的序列点定义了计算机程序执行中的任何点 在该点处保证先前评估的所有副作用都已执行 并且尚未执行后续评估的任何副作用 这是什么意思 有人可以用简单的话解释一下吗 当序列点发生时 基本上意味着您可以保证之前的所有操作都已完成 在没有
  • 启动投射设备的投射会话

    我有这个用例 检测播放设备并保存其 ID 名称和信息 以自动方式连接到预定义设备并开始投射会话 有一些内容 我研究了 Google Cast API v3 看起来真的很难 在 v2 中 这是可能的 因为发送者应用程序控制了 90 的进程 即
  • 用于压缩连续正整数的 C 库

    我有一个非常常见的问题 即为磁盘中的字符串数组创建索引 简而言之 我需要将每个字符串的位置存储在磁盘内表示中 例如 一个非常简单的解决方案是索引数组 如下所示 uint64 idx 0 20 500 1024 103434 这表示第一个字符
  • 为 Python 函数参数提供额外装饰/元数据的好方法是什么?

    我们正在考虑使用 Python IronPython 但我认为这不相关 为另一个控制设备的应用程序提供某种 宏 支持 我们想用 Python 编写相当简单的函数 它需要一些参数 比如时间 温度和位置 不同的函数将采用不同的参数 主应用程序将