在python中使用指针地址调用函数
我有一个简单的函数,我想在两个单独的程序执行中调用它。第一次运行程序时,它会将函数指针保存到一个文件中:在python中使用指针地址调用函数,python,Python,我有一个简单的函数,我想在两个单独的程序执行中调用它。第一次运行程序时,它会将函数指针保存到一个文件中: import cPickle def test(): pass def main(): a = test pFile = open('test.txt', 'wb') cPickle.dump(a, pFile) pFile.close() 第二次加载文件并执行保存在对象中的函数时: import cPickle def test():
import cPickle
def test():
pass
def main():
a = test
pFile = open('test.txt', 'wb')
cPickle.dump(a, pFile)
pFile.close()
第二次加载文件并执行保存在对象中的函数时:
import cPickle
def test():
pass
def main():
pFile = open('test.txt', 'rb')
a = cPickle.load(pFile)
pFile.close()
a()
请注意,对于cPickle,这是可行的,这有点奇怪,因为我认为这基本上是一个指向函数的指针,并且在运行时会发生变化?当我打印“a”时,它会给我类似的信息:0x0351C170处的函数测试:
所以我想我的第一个问题是,为什么这样做,即使引用地址在运行时应该改变
我的第二个问题是,如果它没有改变/或者它不相关,我怎么能仅仅通过在0x0351C170处进行string::function测试来执行函数呢。e、 g.类似于:
def test():
print 'test'
a = test
a() #outputs: 'test'
b = str(a) #<function test at 0x03509170>
eval(b)() #error
def test():
打印“测试”
a=测试
a()#输出:“测试”
b=str(a)#
评估(b)(#错误
请参阅:
可以对以下类型进行酸洗:
- 没有,真的,假的
- 整数、长整数、浮点数、复数
- 普通字符串和Unicode字符串
- 仅包含可拾取对象的元组、列表、集和字典
- 在模块顶层定义的功能
- 在模块顶层定义的内置函数
- 在模块顶层定义的类
- 类的实例,这些类的
或\uuuuu dict\uuuuu
是可拾取的(有关详细信息,请参阅pickle协议一节)\uuuu setstate\uuuuu()
pickle
模块实际上在pickle文件中写出Python字节码。重新加载pickle文件时,将从代码对象重新创建函数
回答问题的第二部分,不,仅仅知道内部地址值是不可能直接调用Python代码的。您不能在给定地址执行函数
是,参考地址在运行时更改。当cPickle加载文件时,它会创建一个函数,您看到的就是该函数。它将不具有与原始函数相同的地址。hmm,这太可惜了。谢谢你!