当前位置: 首页 > news >正文

多语言笔记系列:Polyglot Notebooks 混合使用多语言并共享变量

混合使用多语言并共享变量

混合使用多种语言(C#、F#、Powershell、SQL、KQL、Python、Html、JavaScript、JavaScript、Mermaind等语言),是多语言笔记的最大特性,并且支持各语言之间共享变量这一创新功能。

语言及共享变量的支持情况

语言变量共享
C#支持
F#支持
PowerShell支持
JavaScript支持
SQL支持
KQL支持
Python支持
R支持
HTML不支持
Mermaid不支持

初始化

//全局初始化
#!import "./Base.ipynb"//共享
using Microsoft.DotNet.Interactive;
using Microsoft.DotNet.Interactive.Commands;

使用 SQL(SQLite为例)

  • 引用NuGet包
#r "nuget:Microsoft.DotNet.Interactive.SQLite,*-*"
  • 连接 SQL内核(使用 #!connect 魔法命令)
/*  简单使用#!connect sqlite --kernel-name SQLiteSharedKernel --connection-string "Data Source=.\assets\database\study.db;"
*///优化方法
using Microsoft.DotNet.Interactive;
using Microsoft.DotNet.Interactive.Commands;
{//内核名:魔法命令中的内核名,执行后会自动加 sql- 前缀,做为内核名被使用string magicCommandKernelName =  "SQLiteSharedKernel";string completeKernelName = "sql-" + magicCommandKernelName;//引入内核:可重复执行if(Microsoft.DotNet.Interactive.Kernel.Root.FindKernelByName(completeKernelName) == null){var connectKernelCode = $"#!connect sqlite --kernel-name {magicCommandKernelName} --connection-string \"{SharedDbConnect.SQLiteConnectionString}\"";await Kernel.Root.SendAsync(new SubmitCode( connectKernelCode,  "csharp"));}else{Console.WriteLine($"名为 {completeKernelName} 的内核已存在。需要新内核时,请为--kernel-name参数使用不同的值, 本次执行不做任何更改!");}
}
  • 使用SQL内核(SQL语句操作数据库)
#!sql-SQLiteSharedKernel--查询年龄最大的5名学生
SELECT * FROM Student order by Age Desc LIMIT 5;--查询学生总数
SELECT COUNT(*) AS Count FROM Student;

使用 KQL(效果图)

因为环境比较难搭建,用效果图代替。

在这里插入图片描述

使用 Raw Value Storage

使用value内核,可以方便的管理共享文本数据。

#!value --name SharedDataFromValueKernel --from-file ./shared/file/data.json

C#

一般使用

var student = new {Id=1, Name="张三",Age=18};
student.Display();

使用Value内核共享的变量

#!set --name fromSharedFileData --value @value:SharedDataFromValueKernelfromSharedFileData.Display();

共享变量

使用C#查询数据库中的数据,共享出来,给其它语言(F#、html、js等使用)

#r "nuget:Microsoft.Data.SqlClient"
#r "nuget:Microsoft.Data.Sqlite"using System.Data;
using System.Data.Common;
using System.Data.SqlTypes;using Microsoft.Data.SqlClient;
using Microsoft.Data.Sqlite;//使用 Ado.Net 从SQLite中获取数据,再共享出去//查询数据
var SharedStudents = new List<Student>();
{DataSet ds = new DataSet();using(var sqlConnection = new SqliteConnection(SharedDbConnect.SQLiteConnectionString)){sqlConnection.Open();var querySql = """SELECT * FROM Student LIMIT 5;""";var cmd = sqlConnection.CreateCommand();cmd.CommandType = CommandType.Text;cmd.CommandText = querySql;using (var reader = await cmd.ExecuteReaderAsync()){//循环输出行数据while (await reader.ReadAsync()){var user = new Student(){Id = reader.GetFieldValue<int>("Id"),Name = reader.GetFieldValue<string>("Name"),Age = reader.GetFieldValue<int>("Age"),};SharedStudents.Add(user);}}sqlConnection.Close();sqlConnection.Dispose();}
}//共享数据:默认SharedStudents已共享,其它语言引用即可
SharedStudents.Display();

F#

简单示例

printfn "Hello World from F#"

使用C#共享数据

#!set --value @csharp:SharedStudents --name SharedStudentsSharedStudents

Powershell

#!powershell
Write-Host "hellow powershell"

使用Python

  • 前提:系统要安装Python环境,推荐使用Anaconda安装,直接安装Python也可以

  • 作用:使多语言笔记,直接支持 Python语言;

  • 连接到 Python 内核

using Microsoft.DotNet.Interactive;
using Microsoft.DotNet.Interactive.Commands;//引入Python内核:使用C# 执行引入语句
if(Kernel.Root.FindKernelByName("pythonkernel2") == null)
{//Console.WriteLine("正在导入Python内核....");var importPythonkernel = "#!connect jupyter --kernel-name pythonkernel2 --kernel-spec python3";await Kernel.Root.SendAsync(new SubmitCode( importPythonkernel,  "csharp"));Console.WriteLine("Python内核导入完成");
}
else 
{Console.WriteLine("Python内核已经导入");
}
  • 使用 Python
# 明确指定内核:优先级高于 "单元格选择的内核"
#!pythonkernel2#!set --value @csharp:SharedStudents --name SharedStudentsprint("你好,我是 Ployglot Notebooks 使用 Python语言内核,打印的内容!")

在 Python 中使用C#共享变量

#!pythonkernel2#!set --value @csharp:SharedStudents --name SharedStudents
print(SharedStudents)

使用 html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>完整html文档</title>
</head>
<body><div style="color:green"><h2 id="MyTitle">使用Html文档,当然也可以使用Html片断。注意:纯HTML不支持共享变量!</h2><table id="student" border="1" style="color:#fff"><caption>C#共享数据:学生表</caption><thead><tr><th>编号</th><th>姓名</th><th>年龄</th></tr></thead><tbody></tbody></table></div>
</body>
</html>

使用 JavaScript

  • 简单使用
console.log("输出js日志");
  • 操作html
//改变上面html中h2文本颜色:执行后上面看效果
document.getElementById("MyTitle").style.color = "red";
  • 使用C#共享数据,填充数据表格
#!set --value @csharp:SharedStudents --name SharedStudentsInJs// 获取表格的tbody部分
const tableBody = document.querySelector('#student tbody');// 遍历数据数组
SharedStudentsInJs.forEach(item => {// 创建一行const row = document.createElement('tr');// 创建单元格并填入数据const nameCell = document.createElement('td');nameCell.textContent = item.Id;row.appendChild(nameCell);const ageCell = document.createElement('td');ageCell.textContent = item.Name;row.appendChild(ageCell);const jobCell = document.createElement('td');jobCell.textContent = item.Age;row.appendChild(jobCell);// 将该行添加到表格的tbody中tableBody.appendChild(row);
});

HTTP Request

基本请求

### 请求 京东
get  https://www.jd.com### 请求QQ
get https://www.qq.com
  • 高级请求(使用变量等)
@host=https://www.qq.comget {{host}}

使用 mermaind

stateDiagram-v2[*] --> Activestate Active {[*] --> NumLockOffNumLockOff --> NumLockOn : EvNumLockPressedNumLockOn --> NumLockOff : EvNumLockPressed--[*] --> CapsLockOffCapsLockOff --> CapsLockOn : EvCapsLockPressedCapsLockOn --> CapsLockOff : EvCapsLockPressed--[*] --> ScrollLockOffScrollLockOff --> ScrollLockOn : EvScrollLockPressedScrollLockOn --> ScrollLockOff : EvScrollLockPressed}
stateDiagram-v2
state fork_state <<fork>>[*] --> fork_statefork_state --> State2fork_state --> State3state join_state <<join>>State2 --> join_stateState3 --> join_statejoin_state --> State4State4 --> [*]

相关文章:

  • 复刻低成本机械臂 SO-ARM100 标定篇
  • Vue常用优化
  • jeecg查询指定时间
  • 系统架构设计师:设计模式——行为设计模式
  • 【Touching China】2007-2011
  • WordPress不支持中文TAG标签出现404的解决方法
  • ES6入门---第三单元 模块三:async、await
  • LeetCode每日一题5.4
  • C++多态(上)
  • Java面试大纲(以及常见面试问答)
  • 如何查看电脑IP地址和归属地:全面指南
  • 强化学习机器人模拟器——RobotApp:一个交互式强化学习模拟器
  • Dify框架面试内容整理-Dify部署后常见问题有哪些?如何排查?
  • 【循环依赖(Circular Dependency)】
  • C++多态(下)
  • 自监督学习(Self-supervised Learning)李宏毅
  • 第十章.XML
  • langchain中 callbacks constructor实现
  • devtmpfs_create_node
  • WPF中Binding
  • 贵州黔西市游船倾覆事故致9人死亡1人失联
  • 中虎跳峡封闭仍有游客逆行打卡,景区:专人值守防意外
  • “矿茅”国际化才刚开始?紫金矿业拟分拆境外黄金矿山资产于港交所上市
  • 美国中央情报局计划裁员1200人
  • 美国多地爆发集会抗议特朗普政府多项政策
  • 一周文化讲座|那些年的年青人