Module
更多信息
- Module允许用户创建局部变量,该局部变量的名称相对于模块是局部的.
- 在每次被调用时,Module 创建新的符号来表示它的每个局部变量.
- Module 创建名称为 xxx$nnn 的符号来表示名称为 xxx的局部变量. nnn 是 $ModuleNumber 当前的值.
- 每次任何模块被使用时,$ModuleNumber 的值都会增加.
- 在计算 expr 之前,Module 使用新符号来替换出现在 expr 中任意位置除作为作用域结构(scoping construct)中的局部变量外的每一个局部变量.
- 使用 Module 创建的符号具有 Temporary 属性.
- 使用 Module 创建的符号可以从模块返回.
- 你使用 Module[{vars},body/;cond] 作为带有一个条件的变换法则的右式.
- Module 具有 HoldAll 属性.
- Module 结构可以以任何方式嵌套,如有必要内变量会被改名.
- Module 是一个实现词典式作用域的作用域结构.
范例
打开所有单元 关闭所有单元基本范例 (1)
f[x0_] :=
Module[{x = x0},
While[x > 0, x = Log[x]];
x
]f[2.0]应用 (2)
fib[n_] :=
Module[{f},
f[1] = f[2] = 1;
f[i_] := f[i] = f[i - 1] + f[i - 2];
f[n]
]fib[5]对最大公约数(GCD)使用初始化局部变量的欧几里德(Euclid)算法:
gcd[m0_, n0_] :=
Module[{m = m0, n = n0},
While[n ≠ 0, {m, n} = {n, Mod[m, n]}];
m
]gcd[18, 21]属性和关系 (8)
{Module[{x}, x], Module[{x}, x]}Module 的符号是临时的,如果它们不再被引用就会被删除:
Module[{x}, Print[x];Attributes[x]]Names["x$*"]每次使用 Module 会增加 $ModuleNumber:
{$ModuleNumber, Module[{x}, x], $ModuleNumber}With[{x = 2.0}, Sqrt[x] + 1]Timing[Do[Module[{x = 5}, x;], {10 ^ 5}]]Timing[Do[With[{x = 5}, x;], {10 ^ 5}]]Block 只作用于局部变量; 它不创造新的符号:
x = 7;
Block[{x = 5}, Print[x]];x{Unique[x], Module[{x}, x]}x = 17;
Module[{x = x}, x = x + 1;x]xModule 中的符号不会受到命名冲突:
y = x ^ 2;Module[{x = 5}, x + y]可能存在的问题 (3)
Module 是作用域结构,内局部变量屏蔽外部的:
Module[{x}, Print[x];Module[{x}, Print[x]]]Module[{e = Expand[(1 + x) ^ 5]}, Function[x, e]]%[10]Module[{e = Expand[(1 + x) ^ 5]}, Function@@{x, e}]%[10]并行赋值不适用于 Module 变量:
v = {a, b};Module[{{x, y} = v}, x ^ 2 + y ^ 2]Module[{x = v[[1]], y = v[[2]]}, x ^ 2 + y ^ 2]技术笔记
-
▪
- 过程函数 ▪
- 模块和局部变量 ▪
- 纯函数和规则中的变量 ▪
- 块与模块的比较 ▪
- 动态简介
历史
1991年引入 (2.0)
文本
Wolfram Research (1991),Module,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Module.html.
CMS
Wolfram 语言. 1991. "Module." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Module.html.
APA
Wolfram 语言. (1991). Module. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Module.html 年
BibTeX
@misc{reference.wolfram_2026_module, author="Wolfram Research", title="{Module}", year="1991", howpublished="\url{https://reference.wolfram.com/language/ref/Module.html}", note=[Accessed: 23-July-2026]}
BibLaTeX
@online{reference.wolfram_2026_module, organization={Wolfram Research}, title={Module}, year={1991}, url={https://reference.wolfram.com/language/ref/Module.html}, note=[Accessed: 23-July-2026]}