Форум сайта python.su
1скрипт передает второму(импортированному) имя функции.
2скрипт вызывает функцию первого(не импортированного) скрипта
Можно ли сделать что-то типа того?
Если нет, то как например сделали в PyGTK ( gtk.Button(“кнопка”,callback()) )
Офлайн
уверен, что в pygtk передается имя функции, а не сама функция?
Офлайн
я ни в чем не уверен.
Всмысле сама функция?
Вырезается кусок скрипта с функцией и передается?
А как же глобалы, импорты и прочие?
Офлайн
Конечно можно, в питоне и не такая камасутра проходит, тока нельзя этим злоупотреблять, только если по другому нельзя или задача специфическая.
Вы лучше скажите в чём конкретно проблема с конкретными примерами, которые нужно поправить, а то не понятно что нужно в результате.
Офлайн
да, по другому нельзя и задача специфическая
Как?
А править вобщем нечего т.к. неясен принцип.
Отредактировано (Фев. 5, 2008 18:47:54)
Офлайн
хез конечно что имел ввиду полтергейст… разве что распарсить файл, и скомпилить его самому :/ да и то, возможно ли… можно запустить через execfile, но это непозволит юзать функцию.
я вообще неочень представляю ситуацию, где реально нельзя импортировать скрипт… разве что корявый скрипт, который выдает ошибку при попытке импорта
Офлайн
QZipHi, хіба шось типу такого:
Можно ли вызвать из скрипта функцию не импортируя его?
#dont_import.py import sys, os print "You import me!!!" def needed_func(a): return a + 2
#main.py import new dont_import_module = open("dont_import.py", "r") source = dont_import_module.read() dont_import_module.close() co = compile(source, "dont_import.py", "exec") nf = new.function(co.co_consts[list(co.co_names).index("needed_func")], globals()) print nf(10)
Отредактировано (Фев. 5, 2008 21:01:07)
Офлайн
Вот моё ХЗ (понимание вопроса):
file1: script1.py
import script2
print ‘——————— basic ————————-’
def callback(): print ‘my implementation’
script2.myProcedureWithCallback('arg1_value', ‘arg2_value’, callback)
print ‘——————– no hack ————————’
script2.myProcedureWithHack('arg1_value', ‘arg2_value’)
print ‘——————- with hack ———————–’
script2.int_callback = callback
script2.myProcedureWithHack('arg1_value', ‘arg2_value’)
file2: script2.py
import inspect
def int_callback(): print ‘original implementation’
def myProcedureWithCallback(arg1, arg2, callback=None):
print arg1, arg2, callback
#
if callback and inspect.isfunction(callback):
try: result = callback()
except Exception, msg: print msg
else: return result
def myProcedureWithHack(arg1, arg2):
print arg1, arg2, int_callback
#
return int_callback()
Офлайн
cybergrindКирилл, а с чего бы это нельзя использовать execfile?
хез конечно что имел ввиду полтергейст… разве что распарсить файл, и скомпилить его самому :/ да и то, возможно ли… можно запустить через execfile, но это непозволит юзать функцию.
я вообще неочень представляю ситуацию, где реально нельзя импортировать скрипт… разве что корявый скрипт, который выдает ошибку при попытке импорта
Офлайн
Код poltergeist'а действительно работает.
Все гениальное просто.
2 tabajara, ZAN,
маленько не то.
Всем спасибо.
Отредактировано (Фев. 6, 2008 15:31:04)
Офлайн