ExternalFunction[sys,"f"]
表示在外部求值程序 sys 中定义的名为 "f" 的外部函数.
ExternalFunction[session,"f"]
表示指定 ExternalSessionObject 中的外部函数 "f".
ExternalFunction[sys,"code"]
表示由代码片段 "code" 定义的外部函数.
ExternalFunction[obj,"method"]
表示与 ExternalObject 绑定的方法.
ExternalFunction
外部运算器列表 »ExternalFunction[sys,"f"]
表示在外部求值程序 sys 中定义的名为 "f" 的外部函数.
ExternalFunction[session,"f"]
表示指定 ExternalSessionObject 中的外部函数 "f".
ExternalFunction[sys,"code"]
表示由代码片段 "code" 定义的外部函数.
ExternalFunction[obj,"method"]
表示与 ExternalObject 绑定的方法.
更多信息
- 在 ExternalFunction[sys,"code"] 中,"code" 通常是外部系统中的纯函数或 lambda 函数.
- 在 ExternalFunction[sys, …] 中,sys 的可能选项包括:
-
"Python" Python "NodeJS" 通过 Node.js 运行的 JavaScript "Julia" Julia "Ruby" Ruby "R" R "Jupyter" Jupyter 内核
范例
打开所有单元 关闭所有单元基本范例 (3)
abs = ExternalFunction["Python", "abs"]abs[-2.7]session = StartExternalSession["Python"]addtwo = ExternalFunction[session, "def addtwo(x,y):
return x+y"
]addtwo[4, 5]DeleteObject[session]session = StartExternalSession["Python"]module = ExternalEvaluate[session, ExternalOperation["Import", "datetime"]]使用 ExternalFunction 运行模块中的方法:
ExternalFunction[module, "date"][2012, 10, 10]DeleteObject[session]范围 (6)
times = ExternalFunction["Python", "lambda x,y: x * y"]times[2, 3]list = ExternalFunction["Python", "list"]list["hello"]session = StartExternalSession["Python"]ExternalEvaluate[session, "from cmath import phase
def arg(re,im):
c=complex(re,im)
return phase(c)"]z = 1.2 + 3.4I;
ExternalFunction[session, "arg"][Re[z], Im[z]]DeleteObject[session]nodejs = StartExternalSession["NodeJS"]在 NodeJS 中,不能仅定义一个函数,必须显式地返回该函数,ExternalFunction 才能将其识别为可调用函数:
incr = ExternalFunction[nodejs, "function increment(x) {return x+1}; increment"]incr[3]DeleteObject[nodejs]julia = StartExternalSession["Julia"]addFive = ExternalFunction[julia, "f(x) = x + 5"]addFive[10]DeleteObject[julia]ExternalFunction 支持与 ExternalEvaluate 相同的命令规范:
func = ExternalFunction["Python", <|"Command" -> "range", "ReturnType" -> "String"|>]func[2]属性和关系 (5)
ExternalOperation 可用于从 ExternalFunction 中提取操作:
op = ExternalOperation[ExternalFunction["Python", "max"]]使用 ExternalEvaluate 运行操作:
ExternalEvaluate["Python", op -> {1, 2}]ExternalOperation 可用作 ExternalFunction 的参数:
ExternalFunction["Python", "len"][ExternalOperation["Eval", "[1, 2]"]]op = ExternalOperation["Call", ExternalFunction["Python", "len"], ExternalOperation["Eval", "[1, 2]"]]可通过 ExternalEvaluate 执行:
ExternalEvaluate["Python", op]ExternalEvaluate["Python", "len((1, 2, 3))"]session = StartExternalSession["Python"]创建 ExternalFunction 和 ExternalObject:
func = ExternalFunction[session, "max"]obj = ExternalEvaluate[session, <|"Command" -> "[1, 2,3]", "ReturnType" -> "ExternalObject"|>]ExternalObject 可用作 ExternalFunction 的参数:
func[obj]ExternalEvaluate["Python", "len((1, 2, 3))"]DeleteObject[session]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"]]创建一个包含当前日期的 ExternalObject 和一个包含 timedelta 的 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]应用 (3)
session = StartExternalSession["Python"]ExternalEvaluate[session, "def collatz(n):
if n%2 == 0:
r = int(n/2)
else:
r = 3*n+1
return r
"]根据该 Python 函数创建 ExternalFunction:
collatz = ExternalFunction[session, "collatz"]NestWhileList[collatz, 100, # =!= 1&]session = StartExternalSession["Python"]ExternalEvaluate[session, "import numpy as np
def fun(list):
result = np.array(list).reshape(3,4)
return result
"]ExternalFunction[session, "fun"][Range[12]]Normal[%]Partition[Range[12], 4]session = StartExternalSession["Python"]定义一个 Python 函数,从 URL 导入一幅图像并旋转图像:
ExternalEvaluate[session,
"import io
import requests
from PIL import Image
def rotateimage(url,angle):
response = requests.get(url)
img = Image.open(io.BytesIO(response.content))
img = img.rotate(angle)
b = io.BytesIO()
img.save(b, 'PNG')
return b.getvalue()"]结果为一个 ByteArray:
ba = ExternalFunction[session, "rotateimage"]["http://www.wolfram.com/language/img/wolfram-language-logo-home.png", 45]导入 ByteArray 显示旋转后的图像:
ImportByteArray[ba, "PNG"]
DeleteObject[session]参见
ExternalEvaluate ExternalObject ExternalOperation StartExternalSession APIFunction FunctionCompile CloudFunction Function
格式: JavaScriptExpression PythonExpression
外部计算系统: Python NodeJS Julia Java Octave Shell Ruby R Jupyter SQL SQL-JDBC CUDA
Function Repository: ToPythonFunction
相关指南
-
▪
- 调用外部程序 ▪
- 外部语言接口 ▪
- 外部已诠释的语言接口 ▪
- 云函数和部署
文本
Wolfram Research (2019),ExternalFunction,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ExternalFunction.html (更新于 2024 年).
CMS
Wolfram 语言. 2019. "ExternalFunction." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/ExternalFunction.html.
APA
Wolfram 语言. (2019). ExternalFunction. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ExternalFunction.html 年
BibTeX
@misc{reference.wolfram_2026_externalfunction, author="Wolfram Research", title="{ExternalFunction}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/ExternalFunction.html}", note=[Accessed: 16-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_externalfunction, organization={Wolfram Research}, title={ExternalFunction}, year={2024}, url={https://reference.wolfram.com/language/ref/ExternalFunction.html}, note=[Accessed: 16-September-2026]}