Я определил пользовательский я Python волхвов c так:
%%writefile pymagic.py
from IPython.core import magic_arguments
@magic_arguments.magic_arguments()
@magic_arguments.argument('--include', '-i', nargs='+', help='Pass file patterns to include')
@magic_arguments.argument('--omit', '-o', nargs='+', help='Pass file patterns to omit')
def pymagic(line, cell):
args = magic_arguments.parse_argstring(pymagic, line)
ip = get_ipython()
out = ip.run_cell(cell)
return args, 'test'
def load_ipython_extension(ipython):
ipython.register_magic_function(pymagic, magic_kind='cell')
Я могу использовать его так:
%load_ext pymagic
%%pymagic --include /home/test/a* --omit /home/test/b*
a = [1,2,3]
# Output: (Namespace(include=['/home/test/a*'], omit=['/home/test/b*']), 'test')
Теперь я могу это сделать без использования декораторов @magic_arguments?
Причина, по которой я этого хочу, заключается в том, что я должен избегать глобального импорта модуля I Python, поскольку он вызывает некоторые другие неожиданные проблемы. Это означает, что я должен переместить импорт 'from I Python .core import magic_arguments' из глобальной области видимости, предпочтительно внутри функции load_python_extension ().
Я думаю о достижении чего-то подобного, что позволило бы мне избавиться от глобального импорта I python .core: (Приведенный ниже фрагмент является лишь приблизительным описанием и не синтаксически правильным )
def pymagic(line, cell):
args = magic_arguments.parse_argstring(pymagic, line)
ip = get_ipython()
out = ip.run_cell(cell)
return args, 'test'
def load_ipython_extension(ipython):
from IPython.core import magic_arguments
magic_arguments.add_magic_arg(func=pymagic, arg_attrs=('--include', '-i', nargs='+', help='Pass file patterns to include'))
magic_arguments.add_magic_arg(func=pymagic, arg_attrs=('--omit', '-o', nargs='+', help='Pass file patterns to omit'))
ipython.register_magic_function(pymagic, magic_kind='cell')
Возможно ли это?