我重命名了一个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类,并为其中的所有类方法实现构造函数和包装器,但在我看来,这是更糟糕的解决方案.
md
$S$: a set of shops
$I$: a set of items M wants to get
我想在这两句话之间划一条新线.我们通常在新行之前的第一句之后放置"(空格)",但它在Jupyter中不起作用.
我怎样才能做到这一点?第一句后我应该两次"输入"吗?
我已经使用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相同的级别.我根本不想乱用文件结构.这可能吗?
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,以下序列将打印到控制台: …
我有以下快捷方式配置,在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创建.
提前致谢.
使用 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笔记本.
只要它在我的浏览器选项卡中打开,它每2分钟自动保存一次,生活就很好.
即使关闭浏览器选项卡,是否可以保持自动保存?
当我关闭选项卡时内核已经继续运行,这很棒.
这有点像"屏幕",但在jupyter
编辑:即使我在浏览器中打开选项卡,我注意到24小时后,右上角的"内核状态"变为"断开连接",即使运行单元仍然从服务器websocket输出管道输出连接
我在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)
这会是一个问题吗?
我有一个包含两列的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(以矢量方式,因为它可能是可以迭代执行操作的所有行).
我想通过代码块保存笔记本(例如单击工具栏中的“磁盘”图标)。原因:我想nbconvert通过%%bash魔术来保存 HTML 和幻灯片版本,但这会转换磁盘上的内容,而不是正在运行的内容。
我不想每次保存时都这样做(我看到一些可以设置的配置),而只是有选择地用于我的一些笔记本。我希望能够“全部运行”并让最后几个单元格创建反映当前屏幕上最新数据的附加文件。
我试过%save和%notebook魔法,但也并不完全是我正在寻找(最好的,我可以告诉)。
有没有办法做到这一点?