Оператор Pyimport

Оператор Pyimport предназначен для импорта описаний функций и классов из Python-модулей. Импорт может осуществляться как из Python-модулей, реализованных в репозитории, так и из системных модулей, которые устанавливаются вместе/дополнительно к языку Python. Оператор Pyimport поддерживает два варианта вызова:

При импорте классов для использования будут доступны только статические поля/методы класса. Все входные параметры и возвращаемые значения будут иметь тип данных Variant. Импортированные поля/методы могут быть непосредственно вызваны в Fore-коде или использованы для составления каких-либо выражений. Поддерживается вычисление выражений, основанных на импортированных типах, в инспекторе значений во время отладки Fore-кода. Для облегчения набора кода все импортированные типы будут доступны в IntelliSense.

Пример

Для выполнения примера предполагается наличие в репозитории Python-модуля с идентификатором PYTEST. Модуль содержит следующий код:

import math;
import random;

def summxy(x, y):
    
return x + y

def getrandom():
    
return random.random()

class testclass:
    fieldint = 
1
    fieldstr = 
'Test class'
    
    @staticmethod
    
def test(a, b, c = 5):
        
return a * b + c
        
    @staticmethod
    
def getpi(self):
        
return math.pi

Также создайте модуль, содержащий следующий код на Fore:

// Импорт системных модулей языка Python
Pyimport math, time;
Pyimport randint From random;
// Импорт Python-модуля из репозитория
Pyimport pytest;

Sub UserProc;
Var
    v: Variant;
Begin
    
//---Системные функции---
    Debug.WriteLine("Выполнение системных функций:");
    v := math.sqrt(
10);
    Debug.WriteLine(
"sqrt(10) = " + v);
    v := math.log2(
3);
    Debug.WriteLine(
"log2(10) = " + v);
    v := randint(
1100);
    Debug.WriteLine(
"randint(1, 20) = " + v);
    
//---Прикладные функции---
    Debug.WriteLine("Выполнение функций из прикладного Python-модуля с идентификатором pytest:");
    
// Отдельные функции
    v := pytest.summxy(37);
    Debug.WriteLine(
"summxy(3,7) = " + v);
    v := pytest.getrandom;
    Debug.WriteLine(
"random = " + v);
    
// Метод класса
    v := pytest.testclass.getpi(Null);
    Debug.WriteLine(
"Pi = " + v);
    
// Поля класса
    v := pytest.testclass.fieldint;
    Debug.WriteLine(
"fieldint = " + v);
    v := pytest.testclass.fieldstr;
    Debug.WriteLine(
"fieldstr = " + v);
End Sub UserProc;

При выполнении процедуры UserProc из кода на Fore будут выполнены различные функции на языке Python, получены значения полей класса. Все результаты функций и значения полей будут выведены в консоль среды разработки.

См. также:

Руководство по языку Fore