函数指针python 函数指针怎么用

python有没有指针如果您曾经使用过C或C等低级语言 , 那么您可能已经听说过指针 。指针允许您在部分代码中创建高效率 。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此 。那么在Python中有指针的存在吗?
指针广泛用于C和C。本质上,它们是保存另一个变量的内存地址的变量 。有关指针的更新,可以考虑在C指针上查看此概述 。
为什么Python没有指针?
实际上指针为何不存在的原因现在还不知道,也许指针违背了Python的禅宗 。指针鼓励隐含的变化而不是明确的变化 。但通常情况下,它们很复杂而不是很简单,特别是对于初学者 。更糟糕的是,当他们用指针指向自己的方法 , 或做一些非常危险的事情,比如从你无法获取的的一些变量中读取数据 。
Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度 。因此,Python中的指针并没有多大意义 。但是在有些情况下,Python会为您提供使用指针的一些好处 。
想要理解Python中的指针,需要理解Python实现指针功能的具体细节 。简单来说 , 需要了解这些知识点:
不可变对象和可变对象【Python中的对象】
Python变量/名称【Python中的变量】
【在Python中模拟实现指针】
python使用C函数返回的指针int* GrabImage();
int GetPixel(int* image, int x, int y);
void SetPixel(int* image, int x, int y, int color);
求助 , 如何将C函数指针传递给python这个和用不用python没啥关系函数指针python,是数据来源函数指针python的问题 。调用淘宝API函数指针python,使用 api相关接口获得你想要的内容 , 我 记得api中有相关的接口,你可以看一下接口的说明 。用python做爬虫来进行页面数据的获龋 。
怎么在python调用C函数的时候实现指针参数 def a():global qq=1 2return q def b():a()c=2 qprint(c) b()5 q3函数中的变量在外面调用,需要申明为全局变量
python ctypes 怎么处理函数返回的一般指针test.c(动态库源代码)
[cpp] view plain copy
// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c
#include stdio.h
#include string.h
#include stdlib.h
typedef struct StructPointerTest
{
char name[20];
int age;
}StructPointerTest, *StructPointer;
StructPointer test()// 返回结构体指针
{
StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest));
strcpy(p-name, "Joe");
p-age = 20;
return p;
}
编译函数指针python:gcc -g -fPIC -shared -o libtest.so test.c
call.py(python调用C语言生成函数指针python的动态库):
[python] view plain copy
#!/bin/env python
# coding=UTF-8
from ctypes import *
#python中结构体定义
class StructPointer(Structure):
_fields_ = [("name", c_char * 20), ("age", c_int)]
if __name__ == "__main__":
lib = cdll.LoadLibrary("./libtest.so")
lib.test.restype = POINTER(StructPointer)
p = lib.test()
print "%s: %d" %(p.contents.name, p.contents.age)
最后运行结果函数指针python:
[plain] view plain copy
[zcm@c_py #112]$make clean
rm -f *.o libtest.so
[zcm@c_py #113]$make
gcc -g -fPIC -shared -o libtest.so test.c
[zcm@c_py #114]$./call.py
Joe: 20
[zcm@c_py #115]$
用C/Qt 写Python调试器遇到的问题在C中,“类函数指针”和传统的“函数指针”,是两个完全不同的东西 。
你取一个类的成员函数的地址,得到的是一个类函数指针,也叫成员函数指针 。即使你的成员函数定义看起来和普通函数原型完全一样,它也和这个原型的普通函数指针完全不同,彼此之间不能转换 。
PyEval_SetTrace要求传入的是一个传统的函数指针,你传入一个类函数指针,当然是不行的 。编译器报错是说无法将一个类函数指针转换为函数指针 。
C的类函数指针,是一个非常难用的东西 , 有非常多奇怪的特性 , 而且不同编译器对它的支持大不相同,是C著名的复杂性来源之一,建议不要使用 。
你想要的东西,实际上是一个“委托”的概念,不过可惜的是C并不支持委托 。使用boost::function可以实现类似功能,但python的C API接口却不支持boost::function,所以也不行 。
你这种情况 , 最简单的方法还是用传统的函数指针,使用普通函数包装下类的成员函数,然后把普通函数的指针传给python 。
【函数指针python 函数指针怎么用】关于函数指针python和函数指针怎么用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读