У меня есть простая функция, которую я хочу вызвать двумя отдельными программами. Первый раз, когда я запустить программу она сохраняет указатель на функцию в файл:Вызов функции в 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():
pass
def main():
pFile = open('test.txt', 'rb')
a = cPickle.load(pFile)
pFile.close()
a()
Заметим, что с cPickle, это работает, что немного странно, так как я понял, что это в основном указатель на функцию и что это изменится во время выполнения? Когда я печатаю 'a', это дает мне что-то вроде: function test на 0x0351C170 :.
Так что, я думаю, мой первый вопрос: почему это работает, хотя ссылочный адрес должен меняться во время выполнения?
И мой второй вопрос был бы, если он не изменится/или что-то не имеет значения каким-то образом, как я могу выполнить функцию только из строки:: function test at 0x0351C170 :. например что-то вроде:
def test():
print 'test'
a = test
a() #outputs: 'test'
b = str(a) #<function test at 0x03509170>
eval(b)() #error
спасибо! это хорошо объяснено. – Muppet