Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用指针地址调用函数_Python - Fatal编程技术网

在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
    \uuuu setstate\uuuuu()
    是可拾取的(有关详细信息,请参阅pickle协议一节)
因此,
pickle
模块实际上在pickle文件中写出Python字节码。重新加载pickle文件时,将从代码对象重新创建函数


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

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


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

hmm,这太可惜了。谢谢你!