-
[C#] C#에서 Python 코드 사용하기 (함수, 클래스)Microsoft .NET/C# 2019. 4. 11. 18:18
C#에서 Python Code를 사용하기 위해서는 NuGet 패키지를 설치해야 합니다.
IronPython 패키지를 설치합니다.
def GetString(): return 'Hello World' def Sum( num1, num2 ): return num1 + num2 def GetList1(data): data.append('Python1') data.append('Python2') data.append('Python3') return data def GetList2(): data=[] data.append('Python1') data.append('Python2') data.append('Python3') return data class World: def __init__(self): self.name = 'AAA' def hello(self): print("Hello") def getName(self): return self.name def add(self, a, b): return (a + b) def setName(self, name): self.name = name return self.name
python 코드를 준비합니다.
아래 C# 코드를 사용하여 Python의 함수 및 클래스를 사용할 수 있습니다.
//엔진 생성 Microsoft.Scripting.Hosting.ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); Microsoft.Scripting.Hosting.ScriptScope scope = engine.CreateScope(); try { //파일 실행 Microsoft.Scripting.Hosting.ScriptSource source = engine.CreateScriptSourceFromFile("sample.py"); dynamic result = source.Execute(scope); #region string GetString() //함수명 : GetString //반환값 : string //Return값으로 Hello World 반환 var GetString = scope.GetVariable<Func<string>>("GetString"); MessageBox.Show(GetString()); #endregion #region int Sum( num1, num2 ) //함수명 : Sum //반환값 : int //Return값으로 num1 + num2 반환 var Sum = scope.GetVariable<Func<int, int, int>>("Sum"); MessageBox.Show((Sum(1, 2)).ToString()); #endregion #region void GetList1(IronPython.Runtime.List) //함수명 : GetList1 //반환값 : IronPython.Runtime.List //Return값으로 리스트반환(리턴받아서 사용하지 않아도 됨) 매개변수로 넣은 리스트에 3개의 아이템을 넣어줌 var GetList1 = scope.GetVariable<Func<object, IronPython.Runtime.List>>("GetList1"); IronPython.Runtime.List list = new IronPython.Runtime.List(); list.Add("asd"); GetList1(list); foreach (string data in list) { MessageBox.Show("result: {"+ data+"}"); } #endregion #region IronPython.Runtime.List GetList2() //함수명 : GetList2 //반환값 : IronPython.Runtime.List //Return값으로 리스트를 생성하고 리스트에 3개의 아이템을 넣어서 반환 var GetList2 = scope.GetVariable<Func<IronPython.Runtime.List>>("GetList2"); IronPython.Runtime.List a = GetList2(); foreach (string data in a) { MessageBox.Show("result: {" + data + "}"); } #endregion #region class World ///클래스명 : World ///다양한 함수를 가지고 있음 dynamic world = scope.GetVariable("World")(); //python으로 출력창에 "Hello" 출력 world.hello(); //생성자에서 등록된 name를 출력 MessageBox.Show(world.getName() as string); //add 함수의 결과값 출력 int r = (int)(world.add(10, 20)); MessageBox.Show(r.ToString()); world.setName("전자기린"); MessageBox.Show(world.getName() as string); #endregion } catch (Exception ex) { Console.WriteLine(ex.Message); }
'Microsoft .NET > C#' 카테고리의 다른 글
[C# Console] Console Input Key (키 입력) (0) 2019.07.02 [C#] 자주 사용하는 단축키 모음 (0) 2019.04.19 [C#] 널 결합 연산자 (Null Coalesce Operator) (0) 2019.04.10 [C#] cm <-> pixel 변환, DPI 구하기 (0) 2019.04.02 [C#] 조건부 컴파일 기호, 여러 개(코드 비활성화, 코드 숨기기, #if, #else, #endif) (0) 2019.03.21