小编Jam*_*per的帖子

如何警告类(名称)弃用

我重命名了一个python类,它是库的一部分.我愿意在一段时间内使用其以前的名称,但是我想警告用户它已被弃用,将来会被删除.

我认为,为了提供向后兼容性,使用类似的别名就足够了:

class NewClsName:
    pass

OldClsName = NewClsName
Run Code Online (Sandbox Code Playgroud)

我不知道如何以OldClsName优雅的方式标记为已弃用.也许我可以创建OldClsName一个发出警告(记录)并NewClsName从其参数构造对象的函数(使用*args和**kvargs)但它看起来不够优雅(或者它可能是?).

但是,我不知道Python标准库弃用警告是如何工作的.我想可能有一些很好的魔法来处理弃用,例如允许根据某些解释器的命令行选项将其视为错误或静默.

问题是:如何警告用户使用过时的类别名(或一般的过时类).

编辑:函数方法对我不起作用(我已经试过了)因为类有一些类方法(工厂方法),当OldClsName定义为函数时无法调用.以下代码不起作用:

class NewClsName(object):
    @classmethod
    def CreateVariant1( cls, ... ):
        pass

    @classmethod
    def CreateVariant2( cls, ... ):
        pass

def OldClsName(*args, **kwargs):
    warnings.warn("The 'OldClsName' class was renamed [...]",
                  DeprecationWarning )
    return NewClsName(*args, **kwargs)

OldClsName.CreateVariant1( ... )
Run Code Online (Sandbox Code Playgroud)

因为:

AttributeError: 'function' object has no attribute 'CreateVariant1'
Run Code Online (Sandbox Code Playgroud)

继承是我唯一的选择吗?说实话,它对我来说看起来不太干净 - 它通过引入不必要的派生来影响类层次结构.此外,OldClsName is not NewClsName在大多数情况下,这不是问题,但如果使用该库的代码编写不当,可能会出现问题.

我还可以创建一个虚拟的,不相关的OldClsName类,并为其中的所有类方法实现构造函数和包装器,但在我看来,这是更糟糕的解决方案.

python class backwards-compatibility deprecation-warning

43
推荐指数
6
解决办法
2万
查看次数

如何在jupyter markdown单元格中创建一个新行

md $S$: a set of shops $I$: a set of items M wants to get

我想在这两句话之间划一条新线.我们通常在新行之前的第一句之后放置"(空格)",但它在Jupyter中不起作用.

我怎样才能做到这一点?第一句后我应该两次"输入"吗?

markdown jupyter jupyter-notebook

33
推荐指数
3
解决办法
9万
查看次数

如何将jupyter notebook目录中的模块导入较低目录中的笔记本?

我已经使用jupyter笔记本进行数据分析了很长一段时间.我想在我的jupyter notebook目录中开发一个模块,并能够将新模块导入到笔记本中.我的jupyter笔记本文件目录可以表示如下;

Jupyter notebooks\

    notebook1.ipynb

    new_module\
        __init__.py
        newfunction.py

    currentnotebooks\
        notebook2.ipynb
Run Code Online (Sandbox Code Playgroud)

当import new_module在notebook1.ipynb中使用时,它可以正常工作,当我在notebook2.ipynb中尝试相同的命令时,我得到以下内容ImportError: No module named 'new_module'.两个明显的解决方案是A)将new_module移动到currentnotebooks目录或B)将notebook2.ipynb移动到与new_module相同的级别.我根本不想乱用文件结构.这可能吗?

python ipython python-import python-3.x jupyter-notebook

22
推荐指数
1
解决办法
6万
查看次数

通过conda安装包时,奇怪的重复序列打印到控制台

我的系统规格:

C:\Users\Lenovo>conda info
Current conda install:

           platform : win-64
      conda version : 4.3.8
   conda is private : False
  conda-env version : 4.3.8
conda-build version : 1.21.3
     python version : 3.5.2.final.0
   requests version : 2.12.4
   root environment : C:\Anaconda3  (writable)
default environment : C:\Anaconda3
   envs directories : C:\Anaconda3\envs
      package cache : C:\Anaconda3\pkgs
       channel URLs : https://repo.continuum.io/pkgs/free/win-64
                      https://repo.continuum.io/pkgs/free/noarch
                      https://repo.continuum.io/pkgs/r/win-64
                      https://repo.continuum.io/pkgs/r/noarch
                      https://repo.continuum.io/pkgs/pro/win-64
                      https://repo.continuum.io/pkgs/pro/noarch
                      https://repo.continuum.io/pkgs/msys2/win-64
                      https://repo.continuum.io/pkgs/msys2/noarch
        config file : None
       offline mode : False
         user-agent : conda/4.3.8 requests/2.12.4 CPython/3.5.2 Windows/7 Windows/6.1.7601
Run Code Online (Sandbox Code Playgroud)

最近,在通过conda安装或更新软件包之后,有时甚至是pip,以下序列将打印到控制台: …

python pip anaconda conda

13
推荐指数
1
解决办法
8148
查看次数

如何将键盘快捷键永久添加到Jupyter(ipython)笔记本?

我有以下快捷方式配置,在Jupiter笔记本的单元格中运行后可以正常工作:

%%javascript


IPython.keyboard_manager.command_shortcuts.add_shortcut('ctrl-q', {
    help: 'Clear all output',               // This text will show up on the help page (CTRL-M h or ESC h)
    handler: function (event) {             // Function that gets invoked
        if (IPython.notebook.mode == 'command') {
            IPython.notebook.clear_all_output();
            return false;
        }
        return true;                   
    }
  });
Run Code Online (Sandbox Code Playgroud)

如何设置Jupiter笔记本以在启动时自动进行初始化?

我尝试添加相同的代码(没有%%javascript)C:\Users\<username>\.ipython\profile_default\static\custom\custom.js但它没有用.

我只有一个配置文件,使用ipython profile createPython 3.3,Windows 7创建.

提前致谢.

startup ipython ipython-notebook jupyter jupyter-notebook

11
推荐指数
3
解决办法
4848
查看次数

Altair 删除或取消自动生成的图例

使用 altair 包时,我注意到创建图表时还会生成图例。以下代码:

import altair as alt
from vega_datasets import data
alt.renderers.enable('notebook')

cars = data.cars()

alt.Chart(cars).mark_circle().encode(x='Horsepower', 
                                     y='Miles_per_Gallon',
                                     color='Origin',
                                     tooltip=['Name', 'Origin', 'Horsepower', 'Miles_per_Gallon']).interactive()
Run Code Online (Sandbox Code Playgroud)

产生这个图:

牛郎图

我的问题:有没有办法在图形输出中抑制这个图例?

python vega jupyter-notebook vega-lite altair

11
推荐指数
1
解决办法
4261
查看次数

我可以自动保存正在运行的jupyter python笔记本,而无需在浏览器选项卡中打开它吗?

所以我有一个长期运行的python笔记本.

只要它在我的浏览器选项卡中打开,它每2分钟自动保存一次,生活就很好.

即使关闭浏览器选项卡,是否可以保持自动保存?

当我关闭选项卡时内核已经继续运行,这很棒.

这有点像"屏幕",但在jupyter

编辑:即使我在浏览器中打开选项卡,我注意到24小时后,右上角的"内核状态"变为"断开连接",即使运行单元仍然从服务器websocket输出管道输出连接

autosave ipython-notebook jupyter jupyter-notebook

10
推荐指数
1
解决办法
2182
查看次数

克隆Conda根环境不会克隆conda和condo-build

我在OS X El Capitan 10.11.4上使用了conda 4.2.9。

我使用以下命令克隆了根env:

conda create -n rootclone --clone root
Run Code Online (Sandbox Code Playgroud)

它给出了以下消息:

The following packages cannot be cloned out of the root environment:
 - conda-4.2.9-py35_0
 - conda-build-2.0.2-py35_0
Run Code Online (Sandbox Code Playgroud)

这会是一个问题吗?

python anaconda conda

7
推荐指数
1
解决办法
3093
查看次数

Pandas - 在列中添加秒到其他列中的日期时间

我有一个包含两列的dataFrame,列中["StartDate" ,"duration"] 的元素StartDate是datetime类型,duration而是int.

就像是:

StartDate  Duration
08:16:05    20  
07:16:01    20
Run Code Online (Sandbox Code Playgroud)

我希望得到:

EndDate 
08:16:25
07:16:21
Run Code Online (Sandbox Code Playgroud)

只需添加秒钟即可.

我正在检查有关它的一些想法,如delta 时间类型,并且所有这些日期时间都有可能添加delta时间,但到目前为止,我可以找到如何使用DataFrames(以矢量方式,因为它可能是可以迭代执行操作的所有行).

python pandas

7
推荐指数
1
解决办法
5949
查看次数

如何以编程方式保存 Jupyter Notebook(iPython notebook)?

我想通过代码块保存笔记本(例如单击工具栏中的“磁盘”图标)。原因:我想nbconvert通过%%bash魔术来保存 HTML 和幻灯片版本,但这会转换磁盘上的内容,而不是正在运行的内容。

我不想每次保存时都这样做(我看到一些可以设置的配置),而只是有选择地用于我的一些笔记本。我希望能够“全部运行”并让最后几个单元格创建反映当前屏幕上最新数据的附加文件。

我试过%save和%notebook魔法,但也并不完全是我正在寻找(最好的,我可以告诉)。

有没有办法做到这一点?

ipython jupyter-notebook

6
推荐指数
1
解决办法
3008
查看次数