如何在Jupyter Notebook中更改语法突出显示?

And*_*z J 5 python syntax-highlighting jupyter-notebook

a = np.array([1,4,3]) 
b = np.array([2,-1,5]) 
a@b

df['A'].fillna(value=df['A'].mean())
df.fillna(value=df.mean())
Run Code Online (Sandbox Code Playgroud)

出于教学目的:我需要在Jupyter Notebook中应用特殊的颜色进行编码,以将它们与变量区分开:

  • a, b:默认为黑色,确定
  • 1,4,3:默认为绿色,确定
  • @:默认为紫色,确定
  • np.array( ):黑色>>>需要将其更改为其他颜色(蓝色)。
  • 'A':默认为红色,确定
  • df[ ]:默认为黑色,确定
  • .fillna(value=:黑色>>>需要将其更改为其他颜色(蓝色)。
  • .mean():黑色>>>需要将其更改为其他颜色(蓝色)。

Lon*_*rer 2

据我所知,Python 代码单元格中 Python 代码格式的 Jupyter 渲染依赖于特定的 CSS 样式。

所以:

pd.DataFrame(...)
Run Code Online (Sandbox Code Playgroud)

pd有 CSS 样式cm.variable(cm代表codemirror) DataFrame有 CSS 样式cm.property

所以 Jupyter 笔记本能看到pd.DataFrame,它只能看到variable.property

看图片: 在此输入图像描述

python: 3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)]
jupyterlab==3.5.0
ipython==8.6.0
Run Code Online (Sandbox Code Playgroud)

这似乎表明类属性、类方法、类属性、模块属性等之间没有区别......

我认为这是因为 python 代码是在 HTML 渲染中进行解析和样式化的。

这就是魔法发生的地方 <server>/static/notebook/js/notebook/js/codemirror-ipython.js

在这里:( <server>/static/notebook/js/components/codemirror/和子目录/文件 ( <server>/static/notebook/js/components/codemirror/mode/python/python.js))

您会在那里找到所有解析代码,它们似乎只处理(HTML)单元格中存在的代码。据我所知,几乎没有迹象表明 JS 代码能够像 IDE(比如 PyCharm)那样通过导入/调用图来确定代码标记的精确性质。

样本:

pd.DataFrame(...)
Run Code Online (Sandbox Code Playgroud)

也许我们可以这样看待事情:Jupyter笔记本并不是真正的IDE,它可能更好地被视为将字符串发送到python控制台的HTTP页面:页面发送print('foo'),(交互式)控制台所做的事情大致相当于python -c "print('foo')"和一些粘合得到结果并将其发送回 HTML。

除非:

  1. 有人指出了我找不到的 Jupyter 服务器页面的精确配置参数
  2. 和/或 Jupyter 开发团队为 HTML 渲染添加了更好的解析功能,

OP的愿望似乎无法实现。 您也许可以将颜色样式更改为自定义颜色样式,但无法增强 HTML 笔记本渲染端的解析能力以使其更精确。

但是,在支持笔记本的专用 IDE 中(例如PyCharm pro(请参阅https://www.jetbrains.com/help/pycharm/jupyter-notebook-support.html#tool-windows,它显示了高级调试功能,这使得我认为我是对的:))或VS代码(需要参考)),也许事情可能会有所不同,因为IDE可以对整个Python安装/模块代码库具有可见性,并且可以访问其专门的代码解析和渲染引擎(在这种情况下,它基本上取代了 Jupyter JavaScript 代码的功能!)。


用于教学目的

我认为真正的专用 IDE 是进行如此精确的语法突出显示以强调每个代码标记的性质的首选工具。请参阅 PyCharm 配置了解函数调用: 在此输入图像描述 样式继承自: 在此输入图像描述 (当然,您可以设置自己的全局默认值或特定于语言的默认值...这取决于 IDE)