返回介绍

概述

文章

用户指南

NumPy 参考手册

其他文档

高级 F2PY 用法

发布于 2023-06-23 19:27:33 字数 1841 浏览 0 评论 0 收藏 0

将自编写函数添加到F2PY生成的模块

可以使用 usercodepymethoddef 语句在签名文件中定义自编的Python C / API函数(它们必须在 python模块 块中使用)。 例如,以下签名文件spam.pyf

!    -*- f90 -*-
python module spam
    usercode '''
  static char doc_spam_system[] = "Execute a shell command.";
  static PyObject *spam_system(PyObject *self, PyObject *args)
  {
    char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return Py_BuildValue("i", sts);
  }
    '''
    pymethoddef '''
    {"system",  spam_system, METH_VARARGS, doc_spam_system},
    '''
end python module spam

包装C库函数system()

f2py -c spam.pyf

在Python中:

>>> import spam
>>> status = spam.system('whoami')
pearu
>> status = spam.system('blah')
sh: line 1: blah: command not found

修改F2PY生成模块的字典

以下示例说明如何将用户定义的变量添加到F2PY生成的扩展模块。给出以下签名文件:

!    -*- f90 -*-
python module var
  usercode '''
    int BAR = 5;
  '''
  interface
    usercode '''
      PyDict_SetItemString(d,"BAR",PyInt_FromLong(BAR));
    '''
  end interface
end python module

将其编译为:f2py -c var.pyf

请注意,必须在 interface(接口) 块内定义第二个 usercode 语句,并且通过变量 d 可以获得模块字典(有关其他详细信息,请参阅f2py var.pyf 生成的 varmodule.c)。

在Python中:

>>> import var
>>> var.BAR
5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文