【问题标题】:Can't execute function specified through %paste%无法执行通过 %paste% 指定的函数
【发布时间】:2012-09-24 19:10:22
【问题描述】:

是否可以运行在 IPython 中使用魔术%paste% 函数指定的函数?

In [1]: %paste%
def add_to_index(index,keyword,url):
    for e in index:
        if e[0] == keyword:
            if url not in e[1]:
                e[1].append(url)
            return
    index.append([keyword,[url]])

## -- End pasted text --
Block assigned to '%'

In [2]: %whos
Variable   Type     Data/Info
-----------------------------
%          SList    ['def add_to_index(index,<...>append([keyword,[url]])']

In [3]: add_to_index
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-e3075a18cb0c> in <module>()
----> 1 add_to_index

NameError: name 'add_to_index' is not defined

In [4]: add_to_index(index, 'test', 'http://test.com')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-580237464b17> in <module>()
----> 1 add_to_index(index, 'test', 'http://test.com')

NameError: name 'add_to_index' is not defined

In [5]:

【问题讨论】:

    标签: python ipython ipython-magic


    【解决方案1】:

    粘贴魔法是%paste(没有尾随%):

    In [3]: %paste
    def add_to_index(index,keyword,url):
        for e in index:
            if e[0] == keyword:
                if url not in e[1]:
                    e[1].append(url)
                return
        index.append([keyword,[url]])
    ## -- End pasted text --
    
    In [4]: add_to_index
    Out[4]: <function __main__.add_to_index>
    

    在您的情况下发生的情况是您使用%paste 的可选参数:

    In [5]: %paste?
    Type:       Magic function
    
    ...(text omitted)
    
    You can also pass a variable name as an argument, e.g. '%paste foo'.
    This assigns the pasted block to variable 'foo' as string, without
    dedenting or executing it (preceding >>> and + is still stripped)
    

    当您这样做时,粘贴的代码不会被执行,它只是分配给您作为参数提供的变量(在您的情况下为%)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2018-11-14
      • 2021-11-02
      • 2014-02-09
      • 1970-01-01
      相关资源
      最近更新 更多