Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在python中使用指针地址调用函数

在python中使用指针地址调用函数
EN

Stack Overflow用户
提问于 2011-12-28 04:40:25
回答 2查看 2.9K关注 0票数 3

我有一个简单的函数,我想在两个独立的程序执行中调用它。我第一次运行这个程序时,它将函数指针保存到一个文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cPickle

def test():
    pass

def main():
    a = test
    pFile = open('test.txt', 'wb')
    cPickle.dump(a, pFile)
    pFile.close()

第二次我想加载文件并执行保存在对象中的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cPickle

def test():
    pass

def main():
    pFile = open('test.txt', 'rb')
    a = cPickle.load(pFile)
    pFile.close()
    a() 

请注意,在cPickle中,这是可行的,这有点奇怪,因为我认为这基本上是指向函数的指针,并且在运行时会发生变化?当我打印'a‘时,它给我类似于:function test at 0x0351C170:。

所以我想我的第一个问题是,即使引用地址在运行时应该改变,为什么这种方法仍然有效?

我的第二个问题是,如果它没有改变/或者它以某种方式不相关,我如何仅通过在0x0351C170:处具有string::function test来执行函数。例如,像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test():
    print 'test'

a = test
a()          #outputs: 'test'

b = str(a)   #<function test at 0x03509170>
eval(b)()    #error
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-28 04:45:22

请参阅pickle documentation

可以对以下类型进行酸洗:

Unicode、True和False

  • integers,长整型、浮点数、复数以及仅包含在module

  • classes顶层定义的module

  • built-in函数顶层定义的可挑取objects

  • functions的Unicode module

  • classes列表、集合和字典(此类类的__dict____setstate__()是可挑取的(有关详细信息,请参见pickle协议一节)

因此,pickle模块实际上在pickle文件中写出了Python字节码。重新加载pickle文件时,将从代码对象重新创建该函数。

要回答你的问题的第二部分,不,仅仅通过知道内部地址值是不可能直接调用Python代码的。

票数 2
EN

Stack Overflow用户

发布于 2011-12-28 04:46:50

您不能在给定的地址上执行函数。

是的,引用地址在运行时更改。当cPickle加载文件时,它会创建一个函数,您看到的就是该函数。它将不具有与原始函数相同的地址。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8651928

复制
相关文章
TypeScript高级类型与实用程序
我们一起来看一下今天的大纲,希望这些高级类型 与实用程序能够帮助大家节省一些开发的时间:
疯狂的技术宅
2021/01/14
6850
TypeScript高级类型与实用程序
TypeScript 实用程序类型:选择和省略
Pick只拿你定义你想要的物品 Omit将选择你未定义的所有项目以省略 所以两者的结果非常相似,这取决于你的需要你可能喜欢哪一个。
海拥
2022/04/13
6760
TypeScript 实用程序类型:选择和省略
k8s无法删除namespace
kubernetes 删除 namespace 但是一直处于 Terminating 状态
summerking
2022/10/27
9080
必须为元素类型 “mapper” 声明属性 “namespace” 或The content of element type “mapper” must match “EMPTY”
只需把<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Config 3.0//EN” “http://mybatis.org/dtd/mybatis-3-config.dtd”>
全栈程序员站长
2022/06/30
6680
Kubernetes 的 NameSpace 无法删除应该怎么办?
有时候我们操作不规范,或者删除的先后顺序有问题,或者某项关键服务没有启动,导致 Kubernetes 经常会出现无法删除 NameSpace 的情况。这种情况下我们应该怎么办?
东风微鸣
2023/03/08
1.6K0
Kubernetes 的 NameSpace 无法删除应该怎么办?
实用程序
文件和文件夹操作 创建/删除目录 - mkdir / rmdir。 创建/删除文件 - touch / rm。 touch命令用于创建空白文件或修改文件时间。在Linux系统中一个文件有三种时间: 更改内容的时间(mtime) 更改权限的时间(ctime) 最后访问时间(atime) 切换和查看当前工作目录 - cd / pwd。 查看目录内容 - ls。 查看文件内容 - cat / head / tail / more / less。 拷贝/移动文件 - cp / mv。 查看文件及内容 - find
用户8442333
2021/05/20
2770
关于C ++:Cmake无法找到Boost库
boostc++cmake Cmake cannot find Boost libraries 我是Cmake的新手,并增强了C ++中的库。 我正在做一个需要boost和Cmake的项目。 我正在使用Cmake版本2.8.11,MS Visual Studio 2013和Boost 1.54.0。 当我尝试从Cmake配置时,出现以下错误:
用户3519280
2023/07/08
1.1K0
openshift/origin工作记录(14)——解决Namespace Terminating无法删除的问题
版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/huqigang,内容如有错误,欢迎留言指出,谢谢! https://blog.csdn.net/huqigang/article/details/87855331
胡了了
2019/05/27
1.1K0
VirtualBox克隆后无法找到网卡的问题
Virtualbox现在更新到了4.1.6版本,我记得在之前的版本中,镜像的克隆只能通过命令行的方式来进行,现在已经可以通过界面来进行克隆了,可以说非常的方便。
大江小浪
2018/07/25
1.3K0
VirtualBox克隆后无法找到网卡的问题
glui.h无法找到描述+解决+测试
GLUI 是一个基于 GLUT 的 C++ 用户界面库,它为 OpenGL 应用程序提供按钮、复选框、单选按钮和微调器等控件。它独立于窗口系统,使用 GLUT 或 FreeGLUT。
zhangrelay
2022/08/10
6220
glui.h无法找到描述+解决+测试
namespace用法
一直不知道namespace怎么用,所以在noip吃了不小的亏,然后前天的省选模拟写了四个子程序,拼的我心累QWQ... 今天膜了一下mjt大佬,get到了新姿势 namespace的用法其实很简单 像这样 #include<iostream> namespace Attack { int a; } int main() { std::cin>>Attack::a; return 0; } 它的一大好处就是避免变量名冲突, 在信息学奥赛中一般是为了对代码进行封装, 比如说你可以用na
attack
2018/04/10
1.1K0
volume 、namespace
顺带说一下 volume 和 namespace ,咱们就开始分享一下 service 是什么
阿兵云原生
2023/09/01
1820
volume 、namespace
Matlab实用程序--图形应用
实例1:三角函数曲线(1) function shili01 h0=figure('toolbar','none',... 'position',[198 56 350 300],... 'name','实例01'); h1=axes('parent',h0,... 'visible','off'); x=-pi:0.05:pi; y=sin(x); plot(x,y); xlabel('自变量X'); ylabel('函数值Y'); title('SIN( )函数曲线'); grid
用户9925864
2022/07/27
3100
Matlab实用程序--图形应用
TS类型定义详解:types/typeRoots/@types,以及命名空间namespace
声明文件就是给js代码补充类型标注. 这样在ts编译环境下就不会提示js文件"缺少类型".
周陆军博客
2023/05/07
6.1K0
PE盘装系统时无法找到ISO文件
用PE盘装系统时,在选择包含Windows安装文件的文件夹时,找不到ISO系统镜像映像,如图所示
全栈程序员站长
2022/09/12
6.2K0
PE盘装系统时无法找到ISO文件
无法为 WSDD 操作找到匹配的 Java 操作
我发现了错误。 只需要把“AndrQues”改成“andrQues”,程序就可以正常运行了。
matinal
2023/10/13
1690
Kubernetes Namespace
Kubernetes支持由同一物理集群支持的多个虚拟集群。这些虚拟集群称为名称空间。
kubernetes中文社区
2019/06/24
1.1K0
成功解决python.exe 无法找到入口 无法定位程序输入点
问题描述:在新建的环境装了 FLAML 跑自动化机器学习,配置了 jupyter 有关依赖库和扩展,进入 jupyter notebook 就会弹出这个错误,但将其叉掉却又可以正常进入 jupyter notebook 调试代码。初步分析觉得应该是 dll 文件出了问题。看了一些网上的解决方案,如下所示:
叶庭云
2022/06/25
4.4K0
成功解决python.exe 无法找到入口 无法定位程序输入点
TKE的namespace
namespace的配额 cat quota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: object-counts namespace: default spec: hard: configmaps: "10" ## 最多10个 ConfigMap secrets: "10" ## 最多10个 secret services: "10" ## 最多10个 service services.lo
何飞良
2020/07/01
1.2K0
解决 IDEA 无法找到 java.util.Date 的问题
最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date。
andyxh
2019/09/10
1.8K0
解决 IDEA 无法找到 java.util.Date 的问题

相似问题

与css和html的浏览器兼容性问题

12

CSS浏览器兼容性问题

72

浏览器兼容性问题-css

20

浏览器与“旧”css和HTML5的兼容性问题

13

CSS浏览器兼容性问题- <hr />

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文