
本文讲解为何直接导入变量无法获得新随机数,并演示如何将random.randint()封装为函数,确保每次调用都返回独立的随机结果,适用于D&D自动化脚本等场景。
本文讲解为何直接导入变量无法获得新随机数,并演示如何将random.randint()封装为函数,确保每次调用都返回独立的随机结果,适用于d&d自动化脚本等场景。
在Python中,模块(如 d6.py)仅在首次被导入时执行一次。如果你在 d6.py 中写的是:
import random d6 = random.randint(1, 6)
那么 d6 是一个静态整数值(例如 4),而非“掷一次骰子”的动作。无论你在 diceroller.py 中 from d6 import * 多少次,或重复 print(d6) 多少次,输出的始终是同一个数字——因为模块只加载一次,赋值也只发生一次。
✅ 正确做法:将逻辑封装为函数,把“掷骰子”定义为可重复执行的行为:
d6.py(修改后):
import random
def d6():
"""Roll a six-sided die and return an integer from 1 to 6."""
return random.randint(1, 6)
# 可选:支持多次掷骰并返回列表
def d6s(n):
"""Roll n six-sided dice and return a list of results."""
return [random.randint(1, 6) for _ in range(n)]
diceroller.py(调用示例):
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
from d6 import d6, d6s print(d6()) # → 例如:3 print(d6()) # → 例如:5(每次独立!) print(d6s(3)) # → 例如:[2, 6, 1]
? 关键理解:
-
d6(变量) ≠d6()(函数调用) - 函数定义描述“做什么”,函数调用才真正“执行它”
- 每次调用
d6()都会重新运行random.randint(1,6),因此结果天然不同
⚠️ 注意事项:
- 避免使用
from module import *在生产代码中(易引发命名冲突),推荐显式导入:from d6 import d6 - 若需更丰富的骰子逻辑(如
2d6+3、d20 advantage),可在d6.py中扩展函数,保持主脚本简洁 - 所有
import语句应在文件顶部,不建议在函数内动态导入(影响可读性与性能)
通过函数化设计,你的D&D自动化脚本能真正模拟“每一次掷骰都是新的冒险”——这才是编程赋予规则的生命力。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










