如何内省 Cython C 扩展模块中定义的函数

2023-11-24

蟒蛇的inspectmodule 似乎无法检查“内置”函数的签名,其中包括 C 扩展模块中定义的函数,例如 Cython 定义的函数。有什么方法可以获取您在此类模块中定义的 Python 函数的签名,特别是在 Cython 中?我希望能够找到可用的关键字参数。

MWE:

# mwe.pyx
def example(a, b=None):                                                                                                                                                       
    pass       

and

import pyximport; pyximport.install()                                                                                                                                         
import mwe                                                                                                                                                                    
import inspect                                                                                                                                                                

inspect.signature(mwe.example)   

yields:

Traceback (most recent call last):                                                                                                                                           
  File "mwe_py.py", line 5, in <module>                                                                                                                                      
    inspect.signature(mwe.example)                                                                                                                                           
  File "/nix/store/134l79vxb91w8mhxxkj6kb5llf7dmwpm-python3-3.4.5/lib/python3.4/inspect.py", line 2063, in signature                                                         
    return _signature_internal(obj)                                                                                                                                          
  File "/nix/store/134l79vxb91w8mhxxkj6kb5llf7dmwpm-python3-3.4.5/lib/python3.4/inspect.py", line 1965, in _signature_internal                                               
    skip_bound_arg=skip_bound_arg)                                                                                                                                           
  File "/nix/store/134l79vxb91w8mhxxkj6kb5llf7dmwpm-python3-3.4.5/lib/python3.4/inspect.py", line 1890, in _signature_from_builtin                                           
    raise ValueError("no signature found for builtin {!r}".format(func))                                                                                                     
ValueError: no signature found for builtin <built-in function example>    

在 Python 3.4.5 和 Cython 0.24.1 中


经过进一步调查,我已经撤回了我的重复建议(说这是不可能的......)。它似乎可以很好地与最新版本的 Cython (v0.23.4) 和 Python 3.4.4 配合使用。

import cython
import inspect
scope = cython.inline("""def f(a,*args,b=False): pass """)
print(inspect.getfullargspec(scope['f']))

给出输出

FullArgSpec(args=['a'], varargs='args', varkw=None, defaults=None, kwonlyargs=['b'], kwonlydefaults={'b': False}, annotations={})


中也提到文档是编译选项“binding"这显然使这个细节更容易理解(尽管我不需要它)。


我有一种感觉,这可能取决于以下方面的改进inspect相对最近制作的(可能this fix)所以如果您使用的是 Python 2,您可能会不走运。


Edit:如果您使用的话,您的示例就有效binding编译选项:

import cython
@cython.binding(True)
def example(a, b=None):                                                                                                                                                       
    pass

我怀疑inline自动添加它(但要做的代码inline足够复杂,我无法找到任何证据)。您还可以将其设置为文件级选项。

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

如何内省 Cython C 扩展模块中定义的函数 的相关文章

  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • 使用 pandas.date_range() 生成多个日期时间,每周两个日期

    我在用着pd date range start date end date freq W MON 每周一生成每周频率日期时间start date 2017 01 01 and end date 2017 12 31 这意味着每月大约生成 4
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 将 C++ 指针作为参数传递给 Cython 函数

    cdef extern from Foo h cdef cppclass Bar pass cdef class PyClass cdef Bar bar def cinit self Bar b bar b 这总是会给我类似的东西 Can
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • 检查 Objective-C 块类型?

    这主要是出于好奇 我不太确定它的实际用途是什么 但就这样吧 由于块也是 Objective C 对象 是否可以检查它们的类型 也就是说 它是否响应isKindOfClass 消息以及如何使用该消息来处理块 我天真的以为事情大概是这样的 vo
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 确定分割形状几何体的“左”侧和“右”侧

    我的问题是 我怎样才能确定哪一个Aside and Bside的侧面已经分割的旋转矩形几何体 http nbviewer jupyter org urls dl dropbox com s ll3mchnx0jwzjnf determine
  • PyInstaller“ValueError:源代码字符串不能包含空字节”

    我得到了一个ValueError source code string cannot contain null bytes执行命令时pyinstaller main py在具有和不具有管理员权限的cmd中 Traceback most re
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐

  • PHP 修改文本文件中的单行

    我尝试并寻找解决方案 但找不到任何明确的解决方案 基本上 我有一个列出用户名和密码的 txt 文件 我希望能够更改某个用户的密码 users txt 文件的内容 user1 pass1 user2 pass2 user3 pass3 我尝试
  • Python 中的嵌套 for 循环

    我想做类似的事情 for a in 0 1 for b in 0 1 for c in 0 1 do something 但是 我可能有 15 个不同的变量 有没有更简单的方法 比如 for a b c in 0 1 do somethin
  • 如何在CKEditor中自动为img标签添加类或属性?

    我使用的是 CKEditor 版本 3 6 我想自动添加class newsleft 到通过所见即所得添加的任何图像标签 我看过一些提到 dataProcessor 的帖子 但不知道应该添加哪个文件或如何添加 有人可以告诉我在哪里放置以下代
  • 使用 Firebase Auth UI 时出现 Android API 31 FLAG_IMMUTABLE 错误

    我在 Firebase Auth UI 库期间在 API 31 设备中收到以下错误 仅电话号码凭据 Fatal Exception java lang IllegalArgumentException com sstech racemana
  • 下拉复选框输入闪亮

    Shiny 中是否可以有一个下拉列表 您可以在其中选择多个值 我知道selectInput有选项可以设置multiple T但我不喜欢所有选定的选项都在屏幕上可见 特别是因为我有超过 40 个选项 这同样适用checkboxGroupInp
  • QueryException SQLSTATE[HY000] [1045] 用户“homestead”@“localhost”的访问被拒绝(使用密码:YES)

    为什么会出现以下错误 QueryException SQLSTATE HY000 1045 用户访问被拒绝 homestead localhost 使用密码 YES My env文件如下 APP NAME Laravel APP ENV l
  • 什么控制 Ember 加载路线的显示位置?

    我本以为LoadingRoute将在中显示其模板 outlet 主 AppView 的 但似乎并非如此 是什么决定了它去往何处 这是一个JS Bin我的问题 加载消息没有出现在我期望的地方 事实上 它看起来是插入到带有 class 的标签的
  • Lisp 数据安全/验证

    目前这对我来说实际上只是一个概念性问题 在 Lisp 中 程序就是数据 数据就是程序 REPL 正是这样做的 读取然后评估 那么如何以一种安全的方式获取用户的输入呢 显然这是可能的 我的意思是 viaweb 现在 Yahoo Stores
  • PHP 中的 UTF-8 编码 xml

    我正在尝试使用 PHP 输出 XML 当我在 Firefox 中查看页面源时 一切似乎都很好 但是 页面本身无法正常显示 在 Firefox 中 当显示格式正确的 XML 时 它通常会在页面顶部显示以下内容 This XML file do
  • 有没有办法获取 Signalr hub 组中的连接数?

    这是我的问题 我想跟踪用户是否在线或离线并通知其他客户 我正在使用集线器并实现了 IConnected 和 IDisconnect 接口 我的想法是当集线器检测到连接或断开连接时向所有客户端发送通知 默认情况下 当用户刷新页面时 他将获得新
  • 如何向函数添加一次性点击事件?

    我想向函数添加一个单击事件侦听器 但只希望它发生一次 我怎么能这样做呢 如果可能的话 我也想远离 JQuery EDITED 由于我得到的答案完全满足了我的需求 我想我可以通过上下文使它更清楚一些 我正在编写一个绘制矩形的函数 首先单击按钮
  • 从构造函数创建委托

    使用反射 我尝试从无参数构造函数创建委托 如下所示 Delegate del GetMethodInfo gt System Activator CreateInstance type CreateDelegate delType stat
  • py2exe:减少库存档的大小

    我刚刚创建了第一个 py2exe 可执行文件 并注意到该 EXE 中创建了一个大小约为 1 4 MB 的 ZIP 文件 我的问题是 我可以减小它的大小吗 或者预计使用 py2exe 生成的 EXE 的典型大小约为 4 MB 这意味着所有文件
  • Rails 对象#空白?与 String#empty 相比?困惑

    Rails 文档有此信息用于Object blank 如果对象为 false 空或空白字符串 则该对象为空 例如 nil 和 为空白 但该方法的来源是这样的 File activesupport lib active support cor
  • 如何为编码视频设置标头元数据?

    我正在将一些图像编码为 mp4 容器内的 h264 视频 我本质上使用的是 ffmpeg 示例 muxing c 问题是我正在尝试在 mp4 容器中设置一些元数据 例如艺术家 标题等 我认为使用以下内容会起作用 但事实并非如此 AVDict
  • 第一项为“ID”的 CSV 文件在 Excel 中已损坏

    我正在尝试使用 java 将数据写入 csv 文件 但是当我尝试使用 excel 打开生成的文件时 出现错误 指出文件已损坏 在记事本中打开文件后 它看起来格式正确 所以我不确定问题是什么 我正在使用 FileWriter 类将数据输出到文
  • 获取目录大小的更有效方法

    我已经构建了一个递归函数来获取文件夹路径的目录大小 它可以工作 但是随着我必须搜索的目录数量不断增加 以及每个文件夹中的文件数量 这是一种非常缓慢 低效的方法 static string GetDirectorySize string pa
  • WPF:GroupBox动态高度

    我在 WPF 组框中的停靠面板内有一个文本框和数据网格
  • 错误:无法在 IntelliJ IDE 中找到或加载主类

    我是 Java 初学者 正在尝试使用 IntelliJ 运行我的代码 我刚刚使用 JDK 1 7 将其安装为 IDE 下面的代码甚至无法编译并不断给我错误 Error Could not find or load main class li
  • 如何内省 Cython C 扩展模块中定义的函数

    蟒蛇的inspectmodule 似乎无法检查 内置 函数的签名 其中包括 C 扩展模块中定义的函数 例如 Cython 定义的函数 有什么方法可以获取您在此类模块中定义的 Python 函数的签名 特别是在 Cython 中 我希望能够找