如何将Python回调传递给C#函数调用

2023-11-22

我正在尝试使用 python 中的 C# 类,在 mono / ubuntu 上使用 python.net。

到目前为止,我成功地用一个参数完成了一个简单的函数调用。我现在想做的是将 python 回调传递给 C# 函数调用。

我尝试了下面的以下变体,但没有成功。有人可以展示如何使其发挥作用吗?

// C# - testlib.cs
class MC {
    public double method1(int n) {
        Console.WriteLine("Executing method1" );
        /* .. */
    }

    public double method2(Delegate f) {
        Console.WriteLine("Executing method2" );
        /* ... do f() at some point ... */
        /* also tried f.DynamicInvoke() */
        Console.WriteLine("Done executing method2" );
    }
}

Python脚本

import testlib, System
mc = testlib.MC()
mc.method1(10) # that works

def f():
    print "Executing f"

mc.method2(f)  
# does not know of method2 with that signature, fair enough...

# is this the right way to turn it into a callback?
f2 = System.AssemblyLoad(f) 
# no error message, but f does not seem to be invoked
mc.method2(f2)              

尝试通过Action or Func而不仅仅是原始函数:

我在这里使用了 IronPython(因为现在我的任何机器上都没有安装 mono,但是根据 Python.NET文档我认为应该有效 实际上你的代码几乎没问题,但你需要导入Action or Func委托取决于您的需要。

蟒蛇代码:

import clr
from types import *
from System import Action
clr.AddReferenceToFileAndPath(r"YourPath\TestLib.dll")
import TestLib
print("Hello")
mc = TestLib.MC()
print(mc.method1(10))

def f(fakeparam):
    print "exec f" 

mc.method2(Action[int](f))

这是控制台输出:

Hello
Executing method1
42.0
Executing method2
exec f
Done executing method2

C# code:

using System;


namespace TestLib
{
    public class MC
    {
        public double method1(int n)
        {
            Console.WriteLine("Executing method1");
            return 42.0;
            /* .. */
        }

        public double method2(Delegate f)
        {
            Console.WriteLine("Executing method2");
            object[] paramToPass = new object[1];
            paramToPass[0] = new int();
            f.DynamicInvoke(paramToPass);
            Console.WriteLine("Done executing method2");
            return 24.0;

        }
    }
}

我阅读了 Python.net 的文档使用泛型又发现了这个Python.NET 泛型类型的命名和解析看起来你需要明确指定参数类型

从那里引用:

(反映的)泛型类型定义(如果存在泛型类型 定义与 给定基本名称,并且没有具有该名称的非泛型类型)。这个通用类型 可以使用 [] 语法将定义绑定到封闭泛型类型。尝试去 使用 () 实例化泛型类型 def 会引发 TypeError。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将Python回调传递给C#函数调用 的相关文章

  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • JUnit 测试未启动 Android 服务

    我有这个测试类来测试远程服务 public class CoreServiceBasicTest extends ServiceTestCase
  • RIA 服务与 WCF 服务

    我正在重写一个 LOB 应用程序 其架构如下 Silverlight Windows Mobile gt WCF gt 实体框架 gt 数据库 移动应用程序应该能够像 silverlight 应用程序一样执行某些操作 在这里使用 RIA 服
  • C++ 中向量是通过值还是通过引用传递给函数

    我正在用 C 编码 如果我有一些功能void foo vector
  • 如何打印保留命名空间的 groovy 节点?

    当我使用此代码输出一些 XML 时 我解析 并修改 了XmlParser XmlParser parser new XmlParser def root parser parseText feedUrl toURL text def wri
  • 单元测试 Web App 时如何模拟应用程序路径

    我正在 MVC HTML 帮助程序中测试代码 该代码在尝试获取应用程序路径时抛出错误 appropriate code that uses System IO Path to get directory that results in st
  • 如何从 FirebaseRecyclerAdapter 中排除项目

    我的代码中有这个代码populateViewHolder public void populateViewHolder final CampaignHolder viewHolder final Campaign campaign fina
  • 使用 python 创建 jpeg 缩略图

    正如标题所说 我正在寻找一种将大量图像转换为不同大小的缩略图的方法 我该如何在 python 中执行此操作 See http www pythonware com products pil index htm import os sys i
  • GDB单步执行功能(下一个)似乎不起作用

    我正在尝试调试我用 C 编写的程序 这是代码 void a void b a int main b return 0 我使用以下方法编译它 g g3 O0 o cards exe cards cpp 这是我的 GDB 会话的输出 gdb b
  • BroadcastReceiver 生命周期——静态变量

    我有一个 BroadcastReceiver 类 我声明了一些静态变量 其值在 onReceive 方法中更新 据我所知 静态变量将在 onReceive 调用中保持其值 当我丢失这些值时是否有可能 比如我的类将被卸载并重置静态变量 这些基
  • 重新排序提交

    我目前正在一个分支上工作 希望将一些提交合并到其他分支中 a b c d e f g branchA o x x x x x x x x x x master x x x x x branchB 字母表示提交 并且x是不相关的提交 然而我注
  • Redbean O/RM 将“日期”存储为 varchar(255)?

    从这段代码来看 toolbox RedBean Setup kickstartDev mysql r toolbox gt getRedBean test r gt dispense test test gt nom Test 1 test
  • ODataModel 在读取中传递“expand”参数

    我想将扩展参数传递给read因为如果我像这样调用该服务 它就不起作用 oModel1 read LinesSet expand ToCells The readAPI 等待选项图作为第二个参数 我们可以使用该属性定义任何查询urlParam
  • 使用 python setup.py Egg_info 安装 scikits.audiolab 时出错

    我正在尝试使用 pip 工具安装 scikits audiolab Pip 似乎运行命令python setup py egg info来自 scikits audiolab 源目录 当这样做时 我收到此错误 Andrews MacBook
  • Cloud Run Build 期间未定义环境变量

    我使用 Google Cloud Run 来容器化 node js 应用程序 我通过以下方式将环境变量添加到谷歌云运行中本指南并期望在我的应用程序代码中使用它们 但 每当我运行构建 云运行构建 时 它都会向我显示process env NO
  • 静态指针是强指针吗?

    在 Objective C 中 我知道静态变量 应该 在程序的生命周期内保留其值 但如果它存储一个指针 它算作strong在ARC 我可以依赖它并确信该实例会never一旦我将其分配给静态变量 就从堆中退出 static ClassA sh
  • 如何从 pandas DataFrame 绘制热图

    这是我的数据框 jan f m a m j 2000 7 894737 22 387006 22 077922 14 5455 15 8038 3 33333 2001 3 578947 11 958763 28 741093 5 0541
  • Codeigniter时区mysql设置

    刚刚意识到为什么我的网站现在将所有日期时间变量显示为 1 小时 我第一次使用 Codeigniter 以前没遇到过这个问题 因此 我在主 index php 文件中包含以下代码 DEFAULT TIMEZONE Set the defaul
  • 我可以重写 Javascript Function 对象来记录所有函数调用吗?

    我可以重写 Function 对象的行为 以便可以在每次函数调用之前注入行为 然后正常进行吗 具体来说 尽管总体想法本身很有趣 我可以将每个函数调用记录到控制台 而不必到处插入 console log 语句吗 然后正常的行为还会继续吗 我确
  • Xcode 8 宏 NSLocalizedString 的不明确扩展

    我的单元测试 pch 文件中有以下内容 允许我的单元测试为本地化文件找到正确的包 并且在我升级到 Xcode8 之前这一切都工作正常 undef NSLocalizedString define NSLocalizedString key
  • 如何将Python回调传递给C#函数调用

    我正在尝试使用 python 中的 C 类 在 mono ubuntu 上使用 python net 到目前为止 我成功地用一个参数完成了一个简单的函数调用 我现在想做的是将 python 回调传递给 C 函数调用 我尝试了下面的以下变体