"Python" (外部評価システム)
詳細
- Pythonバージョン3.4以降がサポートされる.
- ほとんどの場合,Wolfram言語は自動的に一つのPython環境を設定するのでユーザが手動で設定する必要はない.高度な設定をしたい場合は,ワークフローの「ExternalEvaluate用にPythonを設定する」の手順に従うとよい.
ExternalEvaluateの使用法
- ExternalEvaluate["Python",code] はPythonコードを実行し,Wolfram言語式として結果を返す.
- ExternalEvaluate[{"Python","Evaluator"evaluator},code] は evaluator で指定されたPython環境を使ってコードを実行する.
- ExternalEvaluate[{"Python","Evaluator"evaluator},…] の evaluator として可能な値:
-
"path" Python実行ファイルの場所 File["path"] Python実行ファイルの場所 Association[…] バーチャル環境指定 - ExternalEvaluate[{"Python","Evaluator"assoc},…]において assoc に可能な要素:
-
"Dependencies" {} pipを使って自動的にインストールされるパッケージ "EnvironmentName" Automatic 直接生成されるバーチャル環境の名前 "PythonRuntime" Automatic "3.11",File["/usr/bin/python3"]等,使用されるPythonランタイムの指定 "BaseDirectory" Automatic 生成されるバーチャル環境のディレクトリ - ExternalEvaluate["Python""type",code]の"type"として可能な設定:
-
"Expression" Wolfram言語式に変換しようと試みる "String" 外部評価子によって出力された生の文字列を与える "ExternalObject" 結果をExternalObjectとして返す
データ型
- Pythonに組み込まれたすべての型がサポートされている訳ではない.次のPythonの型がサポートされている:
-
bool TrueFalse ブール値 array NumericArray 配列(NumPyライブラリより) bytearray ByteArray 整数0-255の列 bytes ByteArray 整数0-255の不可変列 complex Complex 複素数 date DateObject 特定の暦の日付 datetime DateObject 時間の粒度を持つ特定の日付 Decimal Real 任意精度の実数 dictionary Association キーと値の連想 float Real 実数値の数 Fraction Rational fractionsモジュールのfractionオブジェクト frozenset List 一意の値の非順序不可変集合 Image Image 画像(Python PILライブラリより) int Integer 任意サイズの整数 list List 値の列 long Integer 任意サイズの整数 None Null ヌル値 set List 一意の値の非順序集合 str String 文字の値の列 tuple List 値の順序列 - 「呼出し可能」なサポートされていないPython型はExternalFunctionを返す.他のサポートされていないPython型はExternalObjectを返す.
- Decimalオブジェクトから返されるRealの精度は,ExternalEvaluateから返されても維持される.
- Pythonのcomplex型は実数でなければならないので,ExternalEvaluateから返される任意のComplex式は実数値のコンポーネントを持つ.
サポートされる外部操作
- ExternalOperation["Eval","code"]は"code"の外部評価を表す.
- ExternalOperation["Eval","code",assoc]はパラメータが assoc で与えられた"code"の外部評価を表す.
- ExternalOperation["Call",func,arg1,arg2,…]は与えられた引数が arg1, arg2, … の関数func を呼び出す.
- ExternalOperation["GetAttribute",obj,"attr"]は obj の属性"attr"を得る.
- ExternalOperation["SetAttribute",obj,"attr",val]は obj の属性"attr"を与えられた値 val に設定する.
- ExternalOperation["GetItem",obj,"item"]は obj の項目"item"を得る.
- ExternalOperation["SetItem",obj,"item",val]は obj の項目"item"を与えられた値 val に設定する.
- ExternalOperation["Import","path"]はモジュール"path"をインポートする.
- ExternalOperation["Import","path","attr"]はモジュール"path"をインポートして,そのモジュールから属性"attr"を得る.
- ExternalOperation["Cast",obj,"type"]は obj を指定された"type"に変換する.
例題
すべて開くすべて閉じる例 (3)
>とタイプして,ExternalEvaluateを使って評価を行うPythonコードのセルを取得する:
Fileラッパーを使ってファイルに含まれるコードを実行する:
CloudDeployを使ってコードを配備し,CloudObjectから直接コードを実行する:
URLラッパーを使ってオンラインでホストされたコードを直接実行する:
Associationを使って自動的にPython仮想環境を設定することができる:
Python仮想環境は$UserBaseDirectoryの下に作成された:
スコープ (49)
Pythonでバイト配列を生成して,Wolfram言語でそれに相当するものを返す:
Pythonの list,tuple,set,frozenset はListに変換される:
Pythonの dict はAssociationに変換される:
3.7以降のPythonを使う場合,辞書のキーはAssociationのように順番に並ぶ:
Pythonで複素数(Complex)を生成して,その結果を返す:
分数は自動的にRationalに変換される:
小数はRealに変換される:
NumPy配列は自動的にNumericArrayに変換される:
Pandas DataFramesは自動的にDatasetに変換される:
PIL画像は自動的にImageに変換される:
ジェネレータは自動的にListに変換される:
反復可能なPythonオブジェクトは,明示的な変換方法が実装されていない限り,どれも自動的にListに変換される:
列のテンプレートは,Wolfram言語式をPythonコードに挿入するために使うことができる.2つの変数を設定する:
式x^2+y^2はWolfram言語の中で評価され,その結果は変換されPythonのコード列に挿入される:
セッションオプション (12)
"ReturnType" (3)
Python評価システムでは,デフォルトの戻り型は"Expression"である:
"Expression"戻り型では,数,文字列,リスト,連想は自動的にインポートされる:
"String"戻り型は,Python関数の repr を呼び出すことによって結果の列を返す:
"Evaluator" (5)
指定された"Evaluator"を使ってPythonコードを評価する:
Associationを使って自動的にPython仮想環境を設定することができる:
"Dependencies"は,バージョンを指定するpip様式を使った,Pythonパッケージを指定する文字列のリストでもよい:
評価子の"Dependencies"を指定するためにFileラッパーを使うこともできる:
"EnvironmentName"を指定して,仮想環境フォルダの名前をカスタマイズする:
"BaseDirectory"を指定してインストールディレクトリを変更する:
指定されたバージョンをダウンロードするために"PythonRuntime"を使うことができる:
Fileラッパーを使って,自分のPythonを使うことができる:
コマンドオプション (11)
"Command" (4)
Pythonコードの列が与えられたときだけ,コマンドは直接実行される:
Fileラッパーを使ってファイルのコードを実行する:
URLラッパーを使って,オンラインでホストされるコードを直接実行する:
CloudObjectにコードを置く:
"ReturnType" (1)
"Arguments" (2)
"Arguments"を使って,引数付きのPython関数を呼び出す:
リスト以外の引数が与えられると,関数には単独の引数が渡される:
第一引数としてリストを渡す必要がある場合は,追加のリストで明示的にそれをラップしなければならない:
"Command"内で関数を定義し,"Arguments"で直接それを呼び出すことができる:
Ruleを使っても同じ結果を得ることができる:
ExternalFunctionを生成することによって引数を渡すこともできる:
"TemplateArguments" (3)
コマンドを実行するとき,TemplateExpressionを行内に埋め込むことができる:
"TemplateArguments"を使ってTemplateSlotを明示的に埋めることができる:
リスト以外の引数が与えられると,テンプレートには単独のテンプレート引数が渡される:
第一引数としてリストを渡す必要がある場合,それを明示的に追加のリストでラップしなければならない:
テンプレートスロットに名前を付け,Associationを使うと,テンプレートに名前付きの引数を渡すことができる:
外部操作 (16)
"Eval" (1)
"Call" (3)
Pythonで関数を作成するExternalOperationを定義する:
ExternalOperation "Call"を実行することによる関数呼出しを定義する:
ExternalEvaluateを使って関数呼出しを表す外部操作を実行する:
"Call"操作のいずれの引数もExternalOperationにすることができる:
以下のようにして,引数を直接ExternalEvaluateに渡すこともできる:
結果は,以下のPythonコードを実行したときと同じになる:
Python関数のExternalFunctionを作成する:
Python関数のExternalObjectを作成する:
ExternalObjectサブ値を使うこともできる:
"GetAttribute" (1)
datetimeオブジェクトに対するExternalObjectを返す:
ExternalObjectサブ値を使っても同じことができる:
Python評価子では"GetAttribute"がデフォルト操作であり,ExternalOperationは省略できる:
"SetAttribute" (1)
"GetItem" (2)
Pythonの辞書を作成し,それをExternalObjectとして返す:
辞書を表すExternalOperationを作成する:
項目"name"を得るための新規のExternalOperationを作成する:
ExternalEvaluateを使って操作を実行する:
"SetItem" (1)
辞書を使ってExternalObjectを作成する:
Expressionを使って,辞書全体を連想として得る:
"Import" (6)
"datetime"モジュールをインポートするExternalObjectを定義する:
ExternalObjectとしてモジュールを返す:
"datetime"モジュールから日付をインポートするExternalObjectを定義する:
ExternalEvaluateを使って引数で操作を呼び出す:
"datetime"モジュールをインポートするExternalObjectを定義する:
ExternalFunctionを使って メソッドを呼び出す:
fractionsモジュールをインポートするExternalObjectを定義する:
ExternalObjectサブ値を使ってfractionを初期化する:
"ip_address"をインポートする"Import"操作を定義する:
ExternalEvaluateを使ってアドレスインスタンスを作成する:
戻り型としてStringを使い,インスタンスのPython文字列バージョンを表示する:
"ip_address"をインポートする"Import"操作を定義する:
別のExternalOperationを使ってアドレスインスタンスを作成する:
ExternalEvaluateで操作を実行する:
"Cast" (1)
現在の日付を表すExternalObjectを作成する:
"Expression"を使ってオブジェクトをWolfram言語式として返す:
Cast操作もExternalObjectサブ値で実行することができる:
シンボルExpressionは同じことについてのショートカットである:
シンボルStringは同じ操作の近道である:
オブジェクトをExternalObjectとして返す:
シンボルExternalObjectは同じ操作の近道である:
ExternalEvaluateで"ReturnType"を使っても同じことができる:
アプリケーション (3)
特性と関係 (1)
考えられる問題 (1)
ジェネレータは自動的にListに変換される: