Оператор Pyimport предназначен для импорта описаний функций и классов из Python-модулей. Импорт может осуществляться как из Python-модулей, реализованных в репозитории, так и из системных модулей, которые устанавливаются вместе/дополнительно к языку Python. Оператор Pyimport поддерживает два варианта вызова:
Pyimport <идентификатор модуля>; - импортируется всё содержимое модуля, дальнейшее обращение к функциям осуществляется в формате <идентификатор модуля>.<имя функции>;
Pyimport <имя функции1>, <имя функции2> from <идентификатор модуля>; - импортируются функции с указанными именами, дальнейшее обращение к функциям осуществляется по их имени без указания модуля.
При импорте классов для использования будут доступны только статические поля/методы класса. Все входные параметры и возвращаемые значения будут иметь тип данных 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(1, 100);
Debug.WriteLine("randint(1, 20) = " + v);
//---Прикладные функции---
Debug.WriteLine("Выполнение функций из прикладного Python-модуля с идентификатором pytest:");
// Отдельные функции
v := pytest.summxy(3, 7);
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, получены значения полей класса. Все результаты функций и значения полей будут выведены в консоль среды разработки.
См. также: