ExternalSessionObjectにバインドされた外部オブジェクトを表す.
ExternalObject
外部評価器のリスト »ExternalSessionObjectにバインドされた外部オブジェクトを表す.
詳細
- ExternalObjectは,"Python","Ruby","NodeJS"等のExternalEvaluateシステムによって返される外部データを参照する.
- ExternalObject[…]は,特定のExternalSessionObjectに固有であるが,永久的ではないかもしれない.
- ほとんどの評価器のExternalObject[…]["name"]はExternalObject[…][ExternalOperation["GetAttribute", "name"]]と同一である.
- ExternalObject[…][ExternalOperation[…]]はExternalEvaluate[session,ExternalOperation[…][ExternalObject[…]]]に等しい.ただし,session はExternalObject[…]によって暗示される.
- ExternalObject[…][op1,op2,…]はExternalEvaluate[session,RightComposition[op1,op2,…][ExternalObject[…]]]と同一である.
- ExternalObject[…][{op1,op2,…}]はExternalEvaluate[session, {op1[ExternalObject[…]],op2[ExternalObject[…]],…}]と同一である.
例題
すべて開く すべて閉じるスコープ (7)
Pythonで関数について表示されるキーは,組込み関数とユーザ定義関数とでは異なる:
py = StartExternalSession["Python"]ExternalEvaluate[py, "class MyObject: pass"];
ExternalEvaluate[py, "MyObject()"]DeleteObject[py]外部操作 (6)
"Eval" (2)
session = StartExternalSession["Python"]有効なPythonのコードを含む文字列でExternalObjectを作成する:
obj = ExternalEvaluate[session, <|"Command" -> "'2+2'", "ReturnType" -> "ExternalObject"|>]"Eval"操作を使って文字列をPythonのコードに評価する:
obj[ExternalOperation["Eval"]]DeleteObject[session]session = StartExternalSession["Python"]変数を含む有効なPythonのコードを含む文字列でExternalObjectを作成する:
obj = ExternalEvaluate[session, <|"Command" -> "'a+b'", "ReturnType" -> "ExternalObject"|>]"Eval"操作を使って評価コンテキストで文字列をPythonのコードに評価する:
obj[ExternalOperation["Eval", <|"a" -> 2, "b" -> 3|>]]DeleteObject[session]"Call" (1)
session = StartExternalSession["Python"]Pythonで関数を作成するExternalObjectを定義する:
obj = ExternalEvaluate[session, <|"Command" -> "max", "ReturnType" -> "ExternalObject"|>]ExternalOperation "Call"を実行してこの関数を呼び出す:
obj[ExternalOperation["Call", 1, 2]]"Call"操作の引数はExternalOperationでよい:
obj[ExternalOperation["Call", 1, ExternalOperation["Eval", "2+2"]]]ExternalObjectも引数として使うことができる:
n = ExternalEvaluate[session, <|"Command" -> "2+2", "ReturnType" -> "ExternalObject"|>]obj[ExternalOperation["Call", 1, n]]以下を実行することで,ExternalEvaluateの中で直接引数を渡すこともできる:
ExternalEvaluate[session, obj -> {1, 2}]ExternalEvaluate[session, "max(1, 2)"]DeleteObject[session]"GetAttribute" (1)
session = StartExternalSession[{"Python", "SessionProlog" -> "import datetime"}];日付時間オブジェクトに対してExternalObjectを返す:
now = ExternalEvaluate[session, <|"Command" -> "datetime.datetime.now()", "ReturnType" -> "ExternalObject"|>]ExternalEvaluate[session, ExternalOperation["GetAttribute", now, "year"]]同様のことはExternalObjectのサブ値を使って行うこともできる:
now[ExternalOperation["GetAttribute", "year"]]Python評価器については, "GetAttribute"がデフォルトの操作であり,ExternalOperationは省略できる:
now["year"]ExternalEvaluate[session, "datetime.datetime.now().year"]DeleteObject[session]"SetAttribute" (1)
session = StartExternalSession[{"Python", "SessionProlog" -> "from decimal import getcontext, Decimal"}];context = ExternalEvaluate[session, "getcontext()"]ExternalEvaluate[session, ExternalOperation["SetAttribute", context, "prec", 6]]ExternalEvaluate[session, ExternalOperation["GetAttribute", context, "prec"]]ExternalEvaluate[session, "Decimal('0') + Decimal('0.123456789')"]ExternalEvaluate[session, "getcontext().prec = 6"]DeleteObject[session]"Cast" (1)
現行の日付を表すExternalObjectを作成する:
session = StartExternalSession["Python"];now = ExternalEvaluate[session, <|"Command" -> "import datetime; datetime.datetime.now()", "ReturnType" -> "ExternalObject"|>]"Expression"を使ってオブジェクトをWolfram言語の式として返す:
ExternalEvaluate[session, ExternalOperation["Cast", now, "Expression"]]Cast操作もExternalObjectのサブ値で実行できる:
now[ExternalOperation["Cast", "Expression"]]シンボルExpressionは同じことのショートカットである:
now[Expression]now[ExternalOperation["Cast", "String"]]シンボルStringは同じことのショートカットである:
now[String]オブジェクトをExternalObjectとして返す:
now[ExternalOperation["Cast", "ExternalObject"]]シンボルExternalObjectは同じことのショートカットである:
now[ExternalObject]ExternalEvaluateで"ReturnType"を使っても同じことができる:
ExternalEvaluate[session, <|"Command" -> now, "ReturnType" -> "String"|>]DeleteObject[session]特性と関係 (6)
ExternalOperationを使ってExternalObjectから操作が抽出できる:
ExternalOperation[ExternalObject["Python", "2+2"]]ExternalFunctionを使っても同じことができる:
ExternalOperation[ExternalFunction["Python", "str"]]ExternalOperationはExternalObjectの引数として使うことができる:
ExternalObject["Python", "len"][ExternalOperation["Call", {1, 2, 3}]]op = ExternalOperation["Call", {1, 2, 3}][ExternalObject["Python", "len"]]これはExternalEvaluateで実行できる:
ExternalEvaluate["Python", op]ExternalEvaluate["Python", "len((1, 2, 3))"]sysモジュールで使えるExternalObjectを作成する:
sys = ExternalObject["Python", ExternalOperation["Import", "sys"]]文字列が使われると,Pythonを含むほとんどの評価で"GetAttribute"操作が実行される:
sys["maxsize"]結果は,"GetAttribute"操作を明示的に実行することに等しい:
sys[ExternalOperation["GetAttribute", "maxsize"]]session = StartExternalSession["Python"]ExternalObjectを作成する:
module = ExternalEvaluate[session, ExternalOperation["Import", "datetime"]]ExternalFunctionを使ってオブジェクトにメソッドを実行する:
ExternalFunction[module, "date"][2012, 10, 10]DeleteObject[session]session = StartExternalSession["Python"]日付時間モジュール用のExternalObjectを作成する:
datetime = ExternalEvaluate[session, ExternalOperation["Import", "datetime"]]現在の日付を持つものとtimedeltaを持つものの,2つのExternalObjectを作成する:
{now, tenhours} = {datetime["datetime", "now" -> {}, ExternalObject], datetime["timedelta" -> {"hours" -> 10}, ExternalObject]}ExternalFunctionを使ってオブジェクトを送り返す:
ExternalFunction[session, "lambda obj, n: obj + n"][now, tenhours]ExternalEvaluateコールを使っても同じことができる:
ExternalEvaluate[session, "lambda obj, n: obj + n" -> {now, tenhours}]"ReturnType"を使ってStringを返す:
ExternalEvaluate[session, <|"Command" -> "lambda obj, n: obj + n", "Arguments" -> {now, tenhours}, "ReturnType" -> "String"|>]DeleteObject[session]ExternalObjectの複数の引数で複数の操作を繋ぐことができる:
uuid = ExternalObject["Python", ExternalOperation["Import", "uuid"]]uuid[ExternalOperation["GetAttribute", "uuid4"], ExternalOperation["Call"], ExternalOperation["Cast", "String"]]uuid["uuid4" -> {}, String]考えられる問題 (1)
下向きの値を使って連続的な操作を実行すると,各ステップで戻り値をチェックしない未定義の動作に至ることがある:
session = StartExternalSession[{"Python", "SessionProlog" -> "import datetime"}];obj = ExternalEvaluate[session, "datetime"]obj["date" ][ExternalOperation["Call", 2022, 10, 1]]これは,最初の操作がExternalFunctionを返す(日付は初期化可能なクラスである)のに,日付コンストラクタに不完全なExternalOperationを渡しているために発生している:
obj["date" ]すべてのステップで戻り型を確かめずに安全に操作を繋ぐために,すべての操作を一度に実行する:
obj["date", ExternalOperation["Call", 2022, 10, 1]]いずれかの操作が失敗した途端に失敗オブジェクトが返され,残りの実行は阻止される:
obj["not_a_valid_attribute", ExternalOperation["Call", 2022, 10, 1]]DeleteObject[session]おもしろい例題 (1)
session = StartExternalSession[{"Python", "Evaluator" -> <|"Dependencies" -> "chess"|>, "SessionProlog" -> "import chess, chess.svg"}]チェス盤の状態を表すExternalObjectを作成する:
board = ExternalEvaluate[session, "chess.Board()"]PlotBoard[b_] := ImportString[ExternalFunction[session, "chess.svg.board"][b], "SVG"]PlotBoard[board]オブジェクトから属性を抽出することで現在の動きの数を抽出する:
board["fullmove_number"]関数を実行して駒を動かす.これで外部オブジェクトの状態が変化する:
board["push_san" -> "e4"]PlotBoard[board]これで,現在の配置で実行できるすべての正当な動きを計算が計算できるようになった:
moves = board["legal_moves"];外部操作を連鎖させて,"UCI"特性のメソッドコーラーを作成する:
ucigetter = ExternalOperation["GetAttribute", "uci"] /* ExternalOperation["Call"]ExternalEvaluate[session, ucigetter[RandomChoice[moves]]]board["push_san" -> ucigetter[RandomChoice[moves]]]PlotBoard[board]RandomChessPlay[board_, n_Integer : 1, processor_ : Identity] := Table[board["push_san" -> ucigetter[RandomChoice[board["legal_moves"]]]];processor[board], n]Column[RandomChessPlay[board, 4, PlotBoard]]board["fullmove_number"]DeleteObject[session]関連項目
StartExternalSession ExternalEvaluate ExternalSessionObject ExternalFunction ExternalOperation
Function Repository: PythonObject
関連するガイド
テキスト
Wolfram Research (2018), ExternalObject, Wolfram言語関数, https://reference.wolfram.com/language/ref/ExternalObject.html (2024年に更新).
CMS
Wolfram Language. 2018. "ExternalObject." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/ExternalObject.html.
APA
Wolfram Language. (2018). ExternalObject. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ExternalObject.html
BibTeX
@misc{reference.wolfram_2026_externalobject, author="Wolfram Research", title="{ExternalObject}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/ExternalObject.html}", note=[Accessed: 25-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_externalobject, organization={Wolfram Research}, title={ExternalObject}, year={2024}, url={https://reference.wolfram.com/language/ref/ExternalObject.html}, note=[Accessed: 25-June-2026]}