zoukankan      html  css  js  c++  java
  • Python实例--C#执行Python脚本,传参

    # -*- coding: utf-8 -*-
    # 第一行的目的,是为了让代码里面,可以有中文注释信息. (否则要运行报错)
    # 这个 Python 脚本, 用于被 C# 来调用.
    # 简单测试 Hello World 的效果.
    def welcome(name):
        return "hello " + name
    
    
    # 测试 参数为 C# 对象的效果. (获取/设置 C# 对象的属性)
    def testAddAge(obj):
        obj.Age = obj.Age + 1
        obj.Desc = obj.UserName + "又大了一岁 in Python."
    
    
    # 测试 参数为 C# 对象的效果. (调用 C# 对象的方法)
    def testAddAge2(obj):
        obj.AddAge(2)
    
    
    # 测试 List.
    def testList(lst):
        vResult = ""
        for each_item in lst:
            vResult = vResult + " " + each_item
        return vResult
    
    # 测试 Set.
    def testSet(pSet):
        vResult = ""
        for each_item in pSet:
            vResult = vResult + " " + each_item
        return vResult
    
    
    # 测试 Dictionary
    def testDictionary(pDictionary):
        vResult = ""
        for each_item in pDictionary:
            vResult = vResult + " " + each_item + "=" + pDictionary[each_item] + ";"
        return vResult
    
    
    
    
    
     
    using System; 
    
    using IronPython.Hosting;
    using Microsoft.Scripting.Hosting;
    
    namespace ConsoleApp1
    {
    
        /// <summary>
        /// 测试对象.
        /// 
        /// 用于传递数据给 Python 脚本
        /// </summary>
        public class TestDataObject
        {
            /// <summary>
            /// 用户名.
            /// </summary>
            public string UserName { set; get; }
            /// <summary>
            /// 年龄.
            /// </summary>
            public int Age { set; get; }
            /// <summary>
            /// 描述信息.
            /// </summary>
            public string Desc { set; get; }
            public void AddAge(int age)
            {
                this.Age = this.Age + age;
                this.Desc = String.Format("{0}又大了{1}岁 in C#", this.UserName, age);
            }
            public override string ToString()
            {
                return String.Format("姓名:{0}; 年龄:{1}; 描述:{2}", this.UserName, this.Age, this.Desc);
            }
    
        }
        public class RunPython
        {
            public void RunPythonTest()
            {
                // 加载外部 python 脚本文件.
                ScriptRuntime pyRumTime = Python.CreateRuntime();
                dynamic obj = pyRumTime.UseFile("TestPythonFile.py");
    
    
                // ==================================================
                // 简单调用脚本文件中的方法.
                Console.WriteLine(obj.welcome("Test C# Call Python."));
                Console.WriteLine(obj.welcome("测试中文看看是否正常!"));
    
    
    
                // ==================================================
                // 测试自定义对象.
                TestDataObject testObj = new TestDataObject()
                {
                    UserName = "张三",
                    Age = 20,
                    Desc = "",
                };
                Console.WriteLine("调用脚本前对象数据:{0}", testObj);
                obj.testAddAge(testObj);
                Console.WriteLine("调用 testAddAge 脚本后,对象数据={0}", testObj);
    
                obj.testAddAge2(testObj);
                Console.WriteLine("调用 testAddAge2 脚本后,对象数据={0}", testObj);
    
    
    
    
                // ==================================================
                // 测试 List.
                IronPython.Runtime.List testList = new IronPython.Runtime.List();
                testList.Add("List数据1");
                testList.Add("List数据2");
                testList.Add("List数据3");
                // 测试参数为 List.
                string result = obj.testList(testList);
                Console.WriteLine("调用 testList , 返回结果:{0}", result);
    
    
    
                // ==================================================
                // 测试 Set.
                IronPython.Runtime.SetCollection testSet = new IronPython.Runtime.SetCollection();
                testSet.add("Set数据1");
                testSet.add("Set数据2");
                testSet.add("Set数据3");
    
                // 测试参数为 Set.
                result = obj.testSet(testSet);
                Console.WriteLine("调用 testSet , 返回结果:{0}", result);
    
    
    
                // ==================================================
                // 测试 Dictionary.
                IronPython.Runtime.PythonDictionary testDictionary = new IronPython.Runtime.PythonDictionary();
                testDictionary["Key1"] = "Value1";
                testDictionary["Key2"] = "Value2";
                testDictionary["Key3"] = "Value3";
                // 测试参数为 Dictionary.
                result = obj.testDictionary(testDictionary);
                Console.WriteLine("调用 testDictionary , 返回结果:{0}", result);
    
                Console.ReadLine();
            }
        }
         
    }
    
    
    //-- 运行结果
    //hello Test C# Call Python.
    //hello 测试中文看看是否正常!
    //调用脚本前对象数据:姓名:张三; 年龄:20; 描述:
    //调用 testAddAge 脚本后,对象数据=姓名:张三; 年龄:21; 描述:张三又大了一岁 in Py
    //thon.
    //调用 testAddAge2 脚本后,对象数据= 姓名:张三; 年龄:23; 描述:张三又大了2岁 in C#
    //调用 testList , 返回结果: List数据1 List数据2 List数据3
    //调用 testSet , 返回结果: Set数据1 Set数据2 Set数据3
    //调用 testDictionary , 返回结果: Key3=Value3; Key2=Value2; Key1=Value1;
  • 相关阅读:
    css取消input、select默认样式(手机端)
    Vue解决sass-loader的版本过高导致的编译错误
    在Vue项目中引入element-ui,显示结果没有样式的问题
    修改Vue项目打开指定浏览器和修改端口号
    Vue如何关闭eslint
    停止事件冒泡
    子组件中定义的方法如何传给父组件调用了呢?
    vue自定义时间过滤器之使用date-fans代替moment
    面试5(每日打卡)
    2019.10.22
  • 原文地址:https://www.cnblogs.com/liuyongpingblog/p/8028903.html
Copyright © 2011-2022 走看看