Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 5, 2008 17:55:34

QZip
От:
Зарегистрирован: 2007-11-09
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

1скрипт передает второму(импортированному) имя функции.
2скрипт вызывает функцию первого(не импортированного) скрипта

Можно ли сделать что-то типа того?

Если нет, то как например сделали в PyGTK ( gtk.Button(“кнопка”,callback()) )



Офлайн

#2 Фев. 5, 2008 18:07:25

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

уверен, что в pygtk передается имя функции, а не сама функция?



Офлайн

#3 Фев. 5, 2008 18:17:07

QZip
От:
Зарегистрирован: 2007-11-09
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

я ни в чем не уверен.
Всмысле сама функция?
Вырезается кусок скрипта с функцией и передается?
А как же глобалы, импорты и прочие?



Офлайн

#4 Фев. 5, 2008 18:27:23

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

Конечно можно, в питоне и не такая камасутра проходит, тока нельзя этим злоупотреблять, только если по другому нельзя или задача специфическая.

Вы лучше скажите в чём конкретно проблема с конкретными примерами, которые нужно поправить, а то не понятно что нужно в результате.



Офлайн

#5 Фев. 5, 2008 18:46:39

QZip
От:
Зарегистрирован: 2007-11-09
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

да, по другому нельзя и задача специфическая

Как?

А править вобщем нечего т.к. неясен принцип.



Отредактировано (Фев. 5, 2008 18:47:54)

Офлайн

#6 Фев. 5, 2008 20:17:03

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

хез конечно что имел ввиду полтергейст… разве что распарсить файл, и скомпилить его самому :/ да и то, возможно ли… можно запустить через execfile, но это непозволит юзать функцию.
я вообще неочень представляю ситуацию, где реально нельзя импортировать скрипт… разве что корявый скрипт, который выдает ошибку при попытке импорта



Офлайн

#7 Фев. 5, 2008 20:58:31

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

QZip
Можно ли вызвать из скрипта функцию не импортируя его?
Hi, хіба шось типу такого:
#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)

Офлайн

#8 Фев. 5, 2008 21:07:44

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

Вот моё ХЗ (понимание вопроса):

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()



Офлайн

#9 Фев. 6, 2008 11:45:11

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

cybergrind
хез конечно что имел ввиду полтергейст… разве что распарсить файл, и скомпилить его самому :/ да и то, возможно ли… можно запустить через execfile, но это непозволит юзать функцию.
я вообще неочень представляю ситуацию, где реально нельзя импортировать скрипт… разве что корявый скрипт, который выдает ошибку при попытке импорта
Кирилл, а с чего бы это нельзя использовать execfile?
Скрипт a.py:

#!/usr/bin/env python
def fun(arg):
print arg

scope = {'function': fun}
execfile('b.py', scope)


скрипт b.py

#!/usr/bin/env python
function(3)


zan@alex> ./a.py
3

Просто выполняем скрипт b.py в нужном scope (выполняет роль globals) - переменной function приклеивается ссылка на функцию “fun”, которую и вызываем во втором скрипте без импорта.



Офлайн

#10 Фев. 6, 2008 15:26:58

QZip
От:
Зарегистрирован: 2007-11-09
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли вызвать из скрипта функцию не импортируя его?

Код poltergeist'а действительно работает.
Все гениальное просто.

2 tabajara, ZAN,
маленько не то.

Всем спасибо.



Отредактировано (Фев. 6, 2008 15:31:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version