Как Вы заставляете Python записывать код функции, которую он имеет в памяти?

Попробуйте, он генерирует событие при нажатии клавиши, а когда нажатие клавиши прекращается, через 500 мс появляется событие nottyping, чтобы прекратить показывать вам сообщение о наборе

var typing = false;

function typingstopped(){
  typing = false;
  socket.emit(notTyping);
}

function onKeyDown(){
  if(typing == false) {
    typing = true
    socket.emit(typing);
    time = setTimeout(typingstopped, 500);
  } else {
    clear(time);
    time = setTimeout(typingstopped, 500);
  }

}
5
задан Benjamin 15 July 2014 в 09:52
поделиться

5 ответов

vinko@mithril$ more a.py

def foo(a):
  print a

vinko@mithril$ more b.py

import a
import inspect

a.foo(89)
print inspect.getsource(a.foo)

vinko@mithril$ python b.py
89
def foo(a):
  print a

13
ответ дан 18 December 2019 в 12:02
поделиться

Вы спрашиваете об этом?

def writeoptions(directory):
    options=""
    options+="starting_length=%s%s"%(starting_length,os.linesep)
    options+="starting_cell_size=%s%s"%(starting_cell_size,os.linesep)
    options+="LengthofExperiments=%s%s"%(LengthofExperiments,os.linesep)
    options+="def pippo(a,b):%s" % ( os.linesep, )
    options+="    '''Some version of pippo'''%s" % ( os.linesep, )
    options+="    return 2*a+b%s" % ( os.linesep, )
    open("%s%soptions.py"%(directory,os.sep),'w').write(options)

Или что-то еще?

0
ответ дан 18 December 2019 в 12:02
поделиться

В то время как возможно сделать то, что Вы спрашиваете (поскольку Vinko показал), я сказал бы, что это более чисто для совместного использования кода. Поместить pippo и его приятели в подмодуле, к которому могут получить доступ обе программы.

0
ответ дан 18 December 2019 в 12:02
поделиться

Вместо того, чтобы погрузиться в предмет дизассемблеров и байт-кодов (например, осматривают), почему Вы только не сохраняете сгенерированный источник Python в модуле (file.py), и позже, импортируют его?

Я предложил бы изучить более стандартный способ обработать что Вы колл-опционы. Например, можно использовать модуль JSON и сохранить или восстановить данные. Или изучите маршала и засолите модули.

0
ответ дан 18 December 2019 в 12:02
поделиться

Вы могли бы также рассмотреть некоторые другие средства персистентности данных. В моем собственном (астрономия) исследуют, я экспериментировал с двумя различными средствами хранения сценариев для воспроизводимости. Первое должно иметь их исключительно в репозитории подверсии и затем иметь сценарий представления задания, автоматически фиксируют их. Например, если Вы просто хотели сделать это в ударе:

alias run_py='svn ci -m "Commit before running"; python2.5 $*'

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

Другой, существенно менее полнофункциональный, средства отслеживания входа к функции мог быть через что-то как LodgeIt, pastebin, который принимает вход XML-RPC и идет с привязкой Python. (Это может быть установлено локально и имеет поддержку ответа на и обновления существующих вставок.)

Но, если Вы ищете относительно небольшой объем кода, который будет включен, использование решения Vinko осматривают, должен работать вполне хорошо. Doug Hellman, застрахованный inspect модуль в его Модуле Python серии Week. Вы могли создать декоратора, который исследует каждую опцию и аргумент и затем распечатывает его как соответствующий (я буду использовать inspect.getargspec получить названия аргументов.)

import inspect
from functools import wraps

def option_printer(func):
    @wraps(func)
    def run_func(*args, **kwargs):
        for name, arg in zip(inspect.getargspec(func)[0], args) \
                       + sorted(kwargs.items()):
            if isinstance(arg, types.FunctionType): 
                print "Function argument '%s' named '%s':\n" % (name, func.func_name)
                print inspect.getsource(func)
            else:
                print "%s: %s" % (name, arg)
        return func(*args, **kwargs)
    return run_func

Это могло, вероятно, быть сделано немного более изящным, но в моих тестах это работает на простые наборы аргументов и переменных. Кроме того, это могло бы испытать некоторые затруднения из-за лямбд.

2
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: