展开全部

#先上代码再解释

static PyObject *keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds)

{

int voltage;

char *state = "a stiff";

char *action = "voom";

char *type = "Norwegian Blue";

static char *kwlist[] = {"voltage", "state", "action", "type", NULL};

if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist,

&voltage, &state, &action, &type))

return NULL;

printf("-- This parrot wouldn't %s if you put %i Volts through it.\n",

action, voltage);

printf("-- Lovely plumage, the %s -- It's %s!\n", type, state);

Py_INCREF(Py_None);

return Py_None;

}

static PyMethodDef keywdarg_methods[] = {

/* The cast of the function is necessary since PyCFunction values

* only take two PyObject* parameters, and keywdarg_parrot() takes

* three.

*/

{"parrot", (PyCFunction)keywdarg_parrot, METH_VARARGS | METH_KEYWORDS,

"Print a lovely skit to standard output."},

{NULL, NULL, 0, NULL} /* sentinel */

};

PyObject * initkeywdarg(void)

{

/* Create the module and add the functions */

return Py_InitModule("keywdarg", keywdarg_methods);

}

这是一个函数(keywdarg_parrot)即使用了元组参数,也32313133353236313431303231363533e4b893e5b19e31333335333064使用了字典参数的例子。例子出自Python2.7.2的文档。具体在:

Python v2.7.2 documentation »Extending and Embedding the Python

Interpreter

这个页面下。文档里面有一些关于C/C++与Python交互的介绍和例子,还是比较详细的。传递字典参量要注意,{"parrot", (PyCFunction)keywdarg_parrot, METH_VARARGS | METH_KEYWORDS,

"Print a lovely skit to standard output."},

这里的METH_VARARGS | METH_KEYWORDS,与普通的不同。解析用:PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist,

&voltage, &state, &action, &type)

其中的四个变量要提前声明好,这里分别是int,str,str,str类型的。int对应的是args接受到的值。string的都是keywds里面的,它们都是有初始值的。kwlist是变量的名字,就是在python里调用的时候使用的keyword名称。照着例子的模式可以改成其它的,能用的。具体是怎么工作的,其实我也太明白。

Python代码是这样的调用的时候:print keywdarg.parrot(10,"LHJ",'HKJ','ER')

print keywdarg.parrot(10,"LHJ",'HKJ')

print keywdarg.parrot(10,"LHJ",type='KJ')

输出分别是:

-- This parrot wouldn't HKJ if you put 10 Volts through it.

-- Lovely plumage, the ER -- It's LHJ!

None

-- This parrot wouldn't HKJ if you put 10 Volts through it.

-- Lovely plumage, the Norwegian Blue -- It's LHJ!

None

-- This parrot wouldn't voom if you put 10 Volts through it.

-- Lovely plumage, the KJ -- It's LHJ!

None

第二次调用省略掉了变量,也能正常执行。第三次调用,变量type本来是第四位的,现在变成了keyword并写在了第三位,是python代码里调用的常见形式:keyword不讲顺序,省略掉的keyword使用了默认值。

就这些了,其它的你再看一下Python的文档吧。

python dict函数用法_如何将python中的dict作为参数传入c函数中用c做相关的处理?...相关推荐

  1. python装饰器用法_深入浅出分析Python装饰器用法

    本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 用类作为装饰器 示例一 最初代码: class bol(object): def __init__(self, func): s ...

  2. python get函数用法_详解python中get函数的用法(附代码)

    描述 Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法:dict.get(key, default=None) 参数 key – 字典中要查找 ...

  3. python语言format用法_详解Python中的format格式化函数的使用方法

    format函数实现字符串格式化的功能 基本语法为: 通过 : 和 {} 来控制字符串的操作 一.对字符串进行操作 1. 不设置指定位置,按默认顺序插入 ①当参数个数等于{}个数的时候 str_1 = ...

  4. python or的用法_详细介绍Python中and和or实际用法

    and 和 or 的特殊性质 在Python 中,and 和 or 执行布尔逻辑演算,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一.下面来看一下实例.>>> 'a' a ...

  5. python字符串切片用法_详解Python字符串切片

    在python中,我们定义好一个字符串,如下所示. 在python中定义个字符串然后把它赋值给一个变量. 我们可以通过下标访问单个的字符,跟所有的语言一样,下标从0开始(==,我自己都觉得写的好脑残了 ...

  6. python语言arrows用法_如何在Python中使用pyarrow读取parquet文件

    我已经从数据库中创建了一个具有三列(id.author.title)的parquet文件,并希望使用条件(title='learnpython')读取拼花板文件. 下面提到的是我用于这个POC的pyt ...

  7. python raw input用法_如何在 python raw_input 中使用 tab 键补全?

    http://stackoverflow.com/ques... 这段代码写得不错,如果要补全第二个参数要自己写 complete 函数类似于下面的代码. def complete_cd(self, ...

  8. MATLAB中fix啥意思,matlab fix函数用法_常见问题解析,matlab

    matlab syms什么意思_常见问题解析 matlab中syms的意思是定义多个变量,可以用来创建符号变量x和y,语法是"syms x y":也可以创建一些符号变量.函数和数组 ...

  9. matlab中的fix,matlab fix函数用法_常见问题解析

    matlab syms什么意思_常见问题解析 matlab中syms的意思是定义多个变量,可以用来创建符号变量x和y,语法是"syms x y":也可以创建一些符号变量.函数和数组 ...

最新文章

  1. 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
  2. SortedMap接口
  3. python顺时针螺旋顺序
  4. 相交链表—leetcode160
  5. 计算机设备管理程序在哪,电脑设备管理在哪,教您如何打开电脑设备管理
  6. 华为二面!!!面试官直接问我Java中到底什么是NIO?这不是直接送分题???
  7. wince6.0 s5pv210 中断
  8. Go并发调用的超时处理
  9. Head First 设计模式 —— 单例模式(Singleton)
  10. 微服务调用链基本原理与使用
  11. codeIgniter3 学习笔记五(表单验证)
  12. LINUX下载编译sqlite-jdbc(支持mips64el/loongarch64的jar包下载)
  13. 关于报表在移动端展现你需要知道哪些?
  14. 60套模板免费送,一秒搞定甘特图
  15. offsetWidth offsetHeight和clientWidth clientHeight的区别
  16. 为什么需要交叉编译器
  17. jax指标的用法_济安线预警指标?JAX指标?
  18. 谷歌大脑组合模型霸榜 SuperGLUE,什么模型这么高?
  19. 【Python爬虫】-从入门到入门-个人技术经验汇总-【爬虫和数据】
  20. 详谈Scrum和看板的区别

热门文章

  1. DBSCAN算法理论和Python实现
  2. 【解决方案】VMWare拖动窗口后有黑色边框(分辨率自适应问题)
  3. 1.3.2 向量化实现浅层神经网络
  4. 推荐: 五分钟搞懂Xen、KVM、Qemu间的关系和区别[转载]
  5. Kudu安装前的建议说明(博主推荐)
  6. bootstrap modal垂直居中(简单封装)
  7. php 防止表单重复提交
  8. Spring+Hibernate的典型配置
  9. C++(2013.11.27)
  10. 智能算法之Matlab实现(1)——遗传算法(1)